From: Matt Houser on
It appears that PreTranslateMessage is not called for property pages
(CPropertyPageEx) in Wizards.

Where should CToolTipCtrl::RelayEvent() be called instead to make tooltips
work?

....Matt

From: AliR on
PreTranslateMessage gets called when I tried it just now. What version of VS
are you using, the reason I ask is that CPropertyPageEx and CPropertySheetEx
are both depricated as of MFC 7.0, and simply map to CPropertyPage and
CPropertySheet.

AliR.


"Matt Houser" <matt(a)houser.ca> wrote in message
news:9E72377E-1788-4E8D-B807-E57731AFF82B(a)microsoft.com...
> It appears that PreTranslateMessage is not called for property pages
> (CPropertyPageEx) in Wizards.
>
> Where should CToolTipCtrl::RelayEvent() be called instead to make tooltips
> work?
>
> ...Matt


From: Pavel Pokutnev on
If you use your Property Pages in modeless mode, than you need to do a
HOOK. The PreTranslateMessage() doesn't work in this scenario.

HHOOK i_hHook = NULL;
YourPropertySheet* i_PropSheet = NULL;


// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK hook_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)
&&
i_PropSheet &&
i_PropSheet->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(i_hHook, nCode, wParam, lParam);
}

// in OnInitDialog() of your PropertySheet
{
i_PropSheet = this;
// Install the WH_GETMESSAGE hook function.
i_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,
pxGetMessageProc,
AfxGetInstanceHandle(),
GetCurrentThreadId());
ASSERT(i_hHook);
}

// in d-tor of you PropertySheet
{
// Uninstall the WH_GETMESSAGE hook function.
VERIFY(::UnhookWindowsHookEx(i_hHook));
}


From: Pavel Pokutnev on
If you use your Property Pages in modeless mode, than you need to do
a
HOOK. The PreTranslateMessage() doesn't work in this scenario.
HHOOK i_hHook = NULL;
YourPropertySheet* i_PropSheet = NULL;
// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK hook_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)
&&
i_PropSheet &&
i_PropSheet->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(i_hHook, nCode, wParam, lParam);
}

// in OnInitDialog() of your PropertySheet
{
i_PropSheet = this;
// Install the WH_GETMESSAGE hook function.
i_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,

hook_GetMessageProc,
AfxGetInstanceHandle
(),
GetCurrentThreadId
());
ASSERT(i_hHook);
}

// in d-tor of you PropertySheet
{
// Uninstall the WH_GETMESSAGE hook function.
VERIFY(::UnhookWindowsHookEx(i_hHook));
From: Pavel Pokutnev on
On 3 Nov., 17:07, "Matt Houser" <m...(a)houser.ca> wrote:
> It appears that PreTranslateMessage is not called for property pages
> (CPropertyPageEx) in Wizards.
>
> Where should CToolTipCtrl::RelayEvent() be called instead to make tooltips
> work?
>
> ...Matt

If you use your Property Pages in modeless mode, than you need to do a
HOOK. The PreTranslateMessage() doesn't work in this scenario.

namespace
{
HHOOK i_hHook = NULL;
YourPropertySheet* i_PropSheet = NULL;
}

// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK hook_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)
&&
i_PropSheet &&
i_PropSheet->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(i_hHook, nCode, wParam, lParam);
}

// --------------------
YourPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();

i_PropSheet = this;
// Install the WH_GETMESSAGE hook function.
i_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,
hook_GetMessageProc,
AfxGetInstanceHandle(),
GetCurrentThreadId());
ASSERT(i_hHook);
return bResult;
}

// --------------------
YourPropertySheet::~YourPropertySheet()
{
// Uninstall the WH_GETMESSAGE hook function.
VERIFY(::UnhookWindowsHookEx(i_hHook));
}

// --------------------
BOOL YourPropertySheet::PreTranslateMessage(MSG* pMsg)
{
YourPropertyPage* pActPage = static_cast<YourPropertyPage*>
(GetActivePage());
if (pActPage)
{
pActPage->PreTranslateMessage(pMsg);
}

return CPropertySheet::PreTranslateMessage(pMsg);
}