在 WindowProc 中过滤 WM_ACTIVATE 和 WM_CLOSE case WM_ACTIVATE:即 LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(uMsg) { { BOOL fActive = LOWORD(wParam); fMinimized = (BOOL) HIWORD(wParam); HWND hwndPrevious = (HWND) lParam; // m_hWndMyDialog 为 无模式对话框的hWnd if(fActive != WA_INACTIVE && hwndPrevious && hwndPrevious == m_hWndMyDialog) { PostMessage(hwndPrevious,WM_ACTIVATE,MAKEWPARAM(0,WA_INACTIVE), LPARAM(hwndPrevious) ); return 0; } } break; // case WM_NCACTIVATE: // if((fActive = LOWORD(wParam))!=FALSE) // return TRUE; // break; 参考: WM_ACTIVATE The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately. WM_ACTIVATE fActive = LOWORD(wParam); // activation flag fMinimized = (BOOL) HIWORD(wParam); // minimized flag hwndPrevious = (HWND) lParam; // window handle Parameters fActive Value of the low-order word of wParam. Specifies whether the window is being activated or deactivated. This parameter can be one of the following values. Value Meaning WA_ACTIVE Activated by some method other than a mouse click (for example, by a call to the SetActiveWindow function or by use of the keyboard interface to select the window). WA_CLICKACTIVE Activated by a mouse click. WA_INACTIVE Deactivated. fMinimized Value of the high-order word of wParam. Specifies the minimized state of the window being activated or deactivated. A nonzero value indicates the window is minimized. hwndPrevious Value of lParam. Handle to the window being activated or deactivated, depending on the value of the fActive parameter. If the value of fActive is WA_INACTIVE, hwndPrevious is the handle to the window being activated. If the value of fActive is WA_ACTIVE or WA_CLICKACTIVE, hwndPrevious is the handle to the window being deactivated. This handle can be NULL. Return Values If an application processes this message, it should return zero. (###)
|
|