HOWTO: Ignore WM_MOUSEACTIVATE Message for an MDI Window
ID: Q62068
|
The information in this article applies to:
-
Microsoft Windows Software Development Kit (SDK)
-
Microsoft Win32 Software Development Kit (SDK)
-
Microsoft Windows 2000
SUMMARY
To make an MDI window to become active and have the caret be in the same
position as when the window was last active you need to process the
WM_MOUSEACTIVATE message and return MA_ACTIVATEANDEAT for the first time.
Therefore, you need to set a Boolean flag in the WM_MDIACTIVATE message so
that the return is set only once. The sample code below can be used to
modify the MULTIPAD sample application. Also, the following is
documentation on MA_ACTIVATE* messages, taken from the Windows 3.0 final
SDK README.WRI file:
WM_MOUSEACTIVATE
Return Value The return value specifies whether the window
should be activated and whether the mouse event
should be discarded. It must be one of the
following values:
Value Meaning
----- -------
MA_ACTIVATE Activate the window.
MA_NOACTIVATE Do not activate the window.
MA_ACTIVATEANDEAT Activate the window and
discard the mouse event.
Sample Code
/* --- multipad.c MPMDIWndProc section --- */
case WM_MOUSEACTIVATE: // Added.
if (bEatMessage) {
bEatMessage = FALSE;
return (LONG)MA_ACTIVATEANDEAT ;
}
/* Else, break. */
break;
case WM_MDIACTIVATE:
/* If you are activating this child, remember it. */
if (wParam){
hwndActive = hwnd;
hwndActiveEdit = (HWND)GetWindowWord (hwnd, GWW_HWNDEDIT);
bEatMessage = TRUE; // added
}
else{
hwndActive = NULL;
hwndActiveEdit = NULL;
}
break;
Additional query words:
Keywords : kbMDI kbNTOS kbWinOS2000 kbSDKWin32 kbGrpUser kbWinOS kbWndw kbWndwMsg
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbhowto