From: Julian Smart Date: Tue, 28 Feb 2006 13:37:23 +0000 (+0000) Subject: Added context menu support under PocketPC X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7d4f65e3939402a406be6669d2a71a3d7773c9a2 Added context menu support under PocketPC git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37762 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index c11f9fdaaa..01232d1ac9 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -137,6 +137,11 @@ public: virtual bool UnregisterHotKey(int hotkeyId); #endif // wxUSE_HOTKEY +#ifdef __POCKETPC__ + bool IsContextMenuEnabled() const { return m_contextMenuEnabled; } + void EnableContextMenu(bool enable = true) { m_contextMenuEnabled = enable; } +#endif + // window handle stuff // ------------------- @@ -502,6 +507,10 @@ private: wxPoint m_pendingPosition; wxSize m_pendingSize; +#ifdef __POCKETPC__ + bool m_contextMenuEnabled; +#endif + DECLARE_DYNAMIC_CLASS(wxWindowMSW) DECLARE_NO_COPY_CLASS(wxWindowMSW) DECLARE_EVENT_TABLE() diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 3cbd040167..7872678a64 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -110,6 +110,12 @@ #if defined(__WXWINCE__) #include "wx/msw/wince/missing.h" +#ifdef __POCKETPC__ + #include + #include + #include + #include +#endif #endif #if defined(TME_LEAVE) && defined(WM_MOUSELEAVE) @@ -487,6 +493,10 @@ void wxWindowMSW::Init() m_pendingPosition = wxDefaultPosition; m_pendingSize = wxDefaultSize; + +#ifdef __POCKETPC__ + m_contextMenuEnabled = false; +#endif } // Destructor @@ -2582,6 +2592,35 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l wxCHECK_MSG( win, 0, _T("FindWindowForMouseEvent() returned NULL") ); } +#ifdef __POCKETPC__ + if (IsContextMenuEnabled() && message == WM_LBUTTONDOWN) + { + SHRGINFO shrgi = {0}; + + shrgi.cbSize = sizeof(SHRGINFO); + shrgi.hwndClient = (HWND) GetHWND(); + shrgi.ptDown.x = x; + shrgi.ptDown.y = y; + + shrgi.dwFlags = SHRG_RETURNCMD; + // shrgi.dwFlags = SHRG_NOTIFYPARENT; + + if (GN_CONTEXTMENU == ::SHRecognizeGesture(&shrgi)) + { + wxPoint pt(x, y); + pt = ClientToScreen(pt); + + wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU, GetId(), pt); + + evtCtx.SetEventObject(this); + if (GetEventHandler()->ProcessEvent(evtCtx)) + processed = true; + else + return MSWDefWindowProc(message, wParam, lParam); + } + } +#endif + #else // !__WXWINCE__ wxWindowMSW *win = this; #endif // __WXWINCE__/!__WXWINCE__