]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/toplevel.cpp
support for Mac Help Button added (wxID_HELP) is automatically translated
[wxWidgets.git] / src / msw / toplevel.cpp
index b44e0b8a2182721677edfbb9755f40edc757ddd0..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"
@@ -85,10 +85,7 @@ wxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
 // globals
 // ----------------------------------------------------------------------------
 
-// list of all frames and modeless dialogs
-wxWindowList wxModelessWindows;
-
-// the name of the default wxWindows class
+// the name of the default wxWidgets class
 #ifdef __WXWINCE__
 extern       wxChar *wxCanvasClassName;
 #else
@@ -146,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
@@ -172,6 +173,7 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
     }
     //else: WS_OVERLAPPED is 0 anyhow, so it is on by default
 
+#ifndef __SMARTPHONE__
     // border and caption styles
     if ( style & wxRESIZE_BORDER )
         msflags |= WS_THICKFRAME;
@@ -181,6 +183,7 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
         msflags |= WS_BORDER;
     else
         msflags |= WS_POPUP;
+#endif
 
     // normally we consider that all windows without caption must be popups,
     // but CE is an exception: there windows normally do not have the caption
@@ -211,11 +214,11 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
     // Keep this here because it saves recoding this function in wxTinyFrame
     if ( style & (wxTINY_CAPTION_VERT | wxTINY_CAPTION_HORIZ) )
         msflags |= WS_CAPTION;
-        
+
     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 )
@@ -389,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"));
@@ -414,11 +417,14 @@ bool wxTopLevelWindowMSW::CreateFrame(const wxString& title,
     WXDWORD exflags;
     WXDWORD flags = MSWGetCreateWindowFlags(&exflags);
 
-#if _WIN32_WCE < 400 || defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
-       // 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);
@@ -514,14 +520,23 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
         );
     }
 
+    // Native look is full screen window on Smartphones and Standard SDK
+#if defined(__WXWINCE__)
+    if ( style & wxMAXIMIZE )
+    {
+        this->Maximize();
+    }
+#endif
+
+#ifdef __SMARTPHONE__
+    SetRightMenu(); // to nothing for initialization
+#endif
+
     return ret;
 }
 
 wxTopLevelWindowMSW::~wxTopLevelWindowMSW()
 {
-    if ( wxModelessWindows.Find(this) )
-        wxModelessWindows.DeleteObject(this);
-
     // after destroying an owned window, Windows activates the next top level
     // window in Z order but it may be different from our owner (to reproduce
     // this simply Alt-TAB to another application and back before closing the
@@ -561,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
@@ -578,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());
@@ -740,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
 
@@ -750,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);
@@ -928,7 +955,7 @@ void wxTopLevelWindowMSW::OnActivate(wxActivateEvent& event)
     }
 }
 
-// the DialogProc for all wxWindows dialogs
+// the DialogProc for all wxWidgets dialogs
 LONG APIENTRY _EXPORT
 wxDlgProc(HWND hDlg,
           UINT message,
@@ -946,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()