From: Matt Houser on 3 Nov 2009 11:07 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 3 Nov 2009 11:19 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 3 Nov 2009 11:56 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 3 Nov 2009 11:58 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 3 Nov 2009 12:12 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); }
|
Next
|
Last
Pages: 1 2 Prev: History of Visual Studio Next: CListBox items based on dialog resources. |