HOWTO: Ignore WM_MOUSEACTIVATE Message for an MDI WindowID: Q62068
|
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.
/* --- 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;
Keywords : kbMDI kbNTOS kbGrpUser kbWinOS kbWndw kbWndwMsg
Version :
Platform :
Issue type : kbhowto
Last Reviewed: March 5, 1999