でLengthyOperationを取り消すことができます。は、どのように私は、MSDNの記事を読む、完全に混乱がありますのWindowProc
HWND hwnd;
BOOL fDone;
MSG msg;
// Begin the operation and continue until it is complete
// or until the user clicks the mouse or presses a key.
fDone = FALSE;
while (!fDone)
{
fDone = DoLengthyOperation(); // application-defined function
while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
switch(msg.message)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_KEYDOWN:
//
// Perform any required cleanup.
//
fDone = TRUE;
}
}
}
MSDNは、このコードの私たちは、長い操作中にメッセージキューを調べる &をした場合に、それを取り消すことができます言いますマウスクリックまたはキーボードのキーダウン。 どうすればいいですか?
DoLengthyOperationが開始されてから終了するまでPeekMessageはこの時間に呼び出しを行わず、操作をキャンセルできません。
MSDNのリンク:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644928
この関数は、しばらくの間、* false *を返し、長い操作がまだ行われていないことを示します。鍵は、1つの長い操作を多数の小さな操作に分割することです。 –
* GUI *スレッドでDoLengthyOperation();を呼び出さないでください - 別の作業スレッドで呼び出す必要があります。あなたのコード例で 'DoLengthyOperation();'が実行されるまで - 'PeekMessage'を呼び出さず、ウィンドウメッセージが全くなく、あなたのUIはフリーズします – RbMm
@HansPassant次の呼び出しで、以前の呼び出しで実行されたコードの最後の行から?次のコール関数で再び最初の行から実行 –