]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
fix for hot keys in menu items (patch 1013082)
[wxWidgets.git] / src / msw / toplevel.cpp
index 683c6c3e165809d48e2f9d96b0409bf64f46e72d..3cf38606e30c27129d69df4d0c1fbbf5673698bc 100644 (file)
 #include "wx/module.h"
 
 #include "wx/msw/private.h"
-#if defined(__WXWINCE__)
+#if defined(__WXWINCE__) && !defined(__HANDHELDPC__)
   #include <ole2.h>
   #include <shellapi.h>
   // Standard SDK doesn't have aygshell.dll: see include/wx/msw/wince/libraries.h
-  #if _WIN32_WCE < 400 || !defined(WCE_PLATFORM_STANDARDSDK)
+  #if _WIN32_WCE < 400 || !defined(__WINCE_STANDARDSDK__)
     #include <aygshell.h>
   #endif
 #include "wx/msw/wince/missing.h"
@@ -143,6 +143,10 @@ void wxTopLevelWindowMSW::Init()
     m_fsIsShowing = FALSE;
 
     m_winLastFocused = (wxWindow *)NULL;
+
+#ifdef __SMARTPHONE__
+    m_MenuBarHWND = 0;
+#endif
 }
 
 WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
@@ -214,7 +218,7 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
     if ( exflags )
     {
         // there is no taskbar under CE, so omit all this
-#ifndef __WXWINCE__
+#if !defined(__WXWINCE__)
         if ( !(GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) )
         {
             if ( style & wxFRAME_TOOL_WINDOW )
@@ -388,7 +392,7 @@ bool wxTopLevelWindowMSW::CreateDialog(const void *dlgTemplate,
         y = (sizeDpy.y - h) / 2;
     }
 
-#ifndef __WXWINCE__
+#if !defined(__WXWINCE__) || defined(__WINCE_STANDARDSDK__)
     if ( !::MoveWindow(GetHwnd(), x, y, w, h, FALSE) )
     {
         wxLogLastError(wxT("MoveWindow"));
@@ -413,13 +417,14 @@ bool wxTopLevelWindowMSW::CreateFrame(const wxString& title,
     WXDWORD exflags;
     WXDWORD flags = MSWGetCreateWindowFlags(&exflags);
 
-#if (defined(_WIN32_WCE) && _WIN32_WCE < 400) || \
-    defined(WIN32_PLATFORM_PSPC) || \
-    defined(__SMARTPHONE__)
-       // Always expand to fit the screen in PocketPC or SmartPhone
-       wxSize sz(wxDefaultSize);
+#if !defined(__HANDHELDPC__) && ((defined(_WIN32_WCE) && _WIN32_WCE < 400) || \
+    defined(__POCKETPC__) || \
+    defined(__SMARTPHONE__))
+    // Always expand to fit the screen in PocketPC or SmartPhone
+    wxSize sz(wxDefaultSize);
+    wxUnusedVar(size);
 #else // other (including normal desktop) Windows
-       wxSize sz(size);
+    wxSize sz(size);
 #endif
 
     return MSWCreate(wxCanvasClassName, title, pos, sz, flags, exflags);
@@ -515,10 +520,16 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
         );
     }
 
-       // Native look is full screen window on Smartphones
-#ifdef __SMARTPHONE__
+    // Native look is full screen window on Smartphones and Standard SDK
+#if defined(__WXWINCE__)
     if ( style & wxMAXIMIZE )
-           Maximize();
+    {
+        this->Maximize();
+    }
+#endif
+
+#ifdef __SMARTPHONE__
+    SetRightMenu(); // to nothing for initialization
 #endif
 
     return ret;
@@ -565,6 +576,11 @@ bool wxTopLevelWindowMSW::Show(bool show)
             // show and maximize
             nShowCmd = SW_MAXIMIZE;
 
+            // This is necessary, or no window appears
+#ifdef __WINCE_STANDARDSDK__
+            DoShowWindow(SW_SHOW);
+#endif
+
             m_maximizeOnShow = FALSE;
         }
         else // just show
@@ -582,6 +598,13 @@ bool wxTopLevelWindowMSW::Show(bool show)
 
     DoShowWindow(nShowCmd);
 
+#if defined(__WXWINCE__) && (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__))
+    // Addornments have to be added when the frame is the correct size
+    wxFrame* frame = wxDynamicCast(this, wxFrame);
+    if (frame && frame->GetMenuBar())
+        frame->GetMenuBar()->AddAdornments(GetWindowStyleFlag());
+#endif
+
     if ( show )
     {
         ::BringWindowToTop(GetHwnd());
@@ -744,7 +767,7 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style)
                      rect.x, rect.y, rect.width, rect.height,
                      flags);
 
-#if defined(__WXWINCE__) && _WIN32_WCE < 400
+#if !defined(__HANDHELDPC__) && (defined(__WXWINCE__) && (_WIN32_WCE < 400))
         ::SHFullScreen(GetHwnd(), SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
 #endif
 
@@ -754,7 +777,7 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style)
     }
     else // stop showing full screen
     {
-#if defined(__WXWINCE__) && _WIN32_WCE < 400
+#if !defined(__HANDHELDPC__) && (defined(__WXWINCE__) && (_WIN32_WCE < 400))
         ::SHFullScreen(GetHwnd(), SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON);
 #endif
         Maximize(m_fsIsMaximized);
@@ -950,11 +973,14 @@ wxDlgProc(HWND hDlg,
 
         // Standard SDK doesn't have aygshell.dll: see
         // include/wx/msw/wince/libraries.h
-#if defined(__WXWINCE__) && !defined(WCE_PLATFORM_STANDARDSDK)
+#if defined(__WXWINCE__) && !defined(__WINCE_STANDARDSDK__) && !defined(__HANDHELDPC__)
         SHINITDLGINFO shidi;
         shidi.dwMask = SHIDIM_FLAGS;
-        shidi.dwFlags = SHIDIF_DONEBUTTON |
-                        SHIDIF_SIZEDLGFULLSCREEN;
+        shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN
+#ifndef __SMARTPHONE__
+                        | SHIDIF_DONEBUTTON
+#endif
+                        ;
         shidi.hDlg = hDlg;
         SHInitDialog( &shidi );
 #else // no SHInitDialog()