Article ID: 187988
Article Last Modified on 11/21/2006
// Handle to the Windows Message hook. It can be a global variable or a
// member variable in your CPropertySheet-derived class.
HHOOK hHook = NULL;
// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// Switch the module state for the correct handle to be used.
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
// If this is a keystrokes message, translate it in controls'
// PreTranslateMessage().
LPMSG lpMsg = (LPMSG) lParam;
if( (nCode >= 0) &&
PM_REMOVE == wParam &&
(lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) &&
AfxGetApp()->PreTranslateMessage((LPMSG)lParam) )
{
// The value returned from this hookproc is ignored, and it cannot
// be used to tell Windows the message has been handled. To avoid
// further processing, convert the message to WM_NULL before
// returning.
lpMsg->message = WM_NULL;
lpMsg->lParam = 0L;
lpMsg->wParam = 0;
}
// Passes the hook information to the next hook procedure in
// the current hook chain.
return ::CallNextHookEx(hHook, nCode, wParam, lParam);
}
// Declare and define the following two functions:
BOOL CModelessPropertySheet::OnInitDialog()
{
CPropertySheet::OnInitDialog();
// Install the WH_GETMESSAGE hook function.
hHook = ::SetWindowsHookEx(
WH_GETMESSAGE,
GetMessageProc,
AfxGetInstanceHandle(),
GetCurrentThreadId());
ASSERT (hHook);
return TRUE; // Return TRUE unless you set the focus to a control.
// EXCEPTION: OCX Property Pages should return FALSE.
}
void CModelessPropertySheet::OnClose()
{
// Uninstall the WH_GETMESSAGE hook function.
VERIFY (::UnhookWindowsHookEx (hHook));
CPropertySheet::OnClose();
}
Additional query words: ocx kbcodesam tabs hooks dll mfcdll
Keywords: kbctrlcreate kbprb kbdlg kbcode KB187988