]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxUSE_POCKETPC_UI to distinguish between using
authorJulian Smart <julian@anthemion.co.uk>
Sun, 28 Dec 2003 01:07:31 +0000 (01:07 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sun, 28 Dec 2003 01:07:31 +0000 (01:07 +0000)
combined toolbar/menubar and using separate ones

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25022 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/msw/wince/readme.txt
include/wx/msw/menu.h
include/wx/msw/wince/setup.h
include/wx/toolbar.h
src/common/framecmn.cpp
src/msw/frame.cpp
src/msw/menu.cpp
src/msw/tbar95.cpp
src/msw/wince/tbarwce.cpp
src/msw/wince/wxWindowsCE.vcp

index 8666f0a9bdfcd1608a47e86c23d33881a35dd013..8fae0bead11e1aba543ddddcceee2e721e382868 100644 (file)
@@ -4,8 +4,8 @@
   =================================================
 
 You have downloaded version 2.5.1 of the Windows CE port of
-the wxWindows GUI library. This runs on PocketPC 2002
-and SmartPhone 2002.
+the wxWindows GUI library. This runs on PocketPC 2002,
+SmartPhone 2002, and Windows CE .NET 4.x.
 
 More information about the wxWindows project as a whole
 can be found at:
@@ -20,7 +20,7 @@ http://wiki.wxwindows.org/wiki.pl?Windows_CE_Port
 Supported platforms
 ===================
 
-These are the supported platform at the moment:
+These are the supported platforms at the moment:
 
 - x86 emulator
 - PocketPC (StrongARM)
@@ -28,37 +28,60 @@ These are the supported platform at the moment:
 You can test the library and applications using PocketPC emulator 
 and/or Compaq iPAQ or other PDAs using PocketPC
 
-WindowsCE.NET is not supported.
-
 Compiler installation
 =====================
 
 Get the Visual C++ embedded (FREE) from Microsoft website
  http://msdn.microsoft.com/vstudio/device/embedded/download.asp
  
-You must use Visual Tools 3.0 for CE 3.0 
- (this is the same we are currently using for wxWinCE) 
+You must use Embedded Visual C++ 3.0 or Embedded Visual C++ 4.x.
  
 Install selecting only the two target platforms used:
 
 - WCE x86em (PocketPC emulation)
 - WCE ARM (PocketPC StrongARM)
 
-Download an archive containing the library project file
-and a sample project file:
+You can install other targets but you will need
+to create new configurations for them in the
+wxWindows project files.
+
+wxWindows/CE Configuration
+================================
+
+You may wish to customize the following file
+before compiling wxWinCE:
+
+include/wx/msw/wince/setup.h
 
-http://www.anthemion.co.uk/wxwin/wxWinCE.zip
+These are some of the Windows CE-specific settings
+you can adjust.
 
-Unarchive this over your wxWindows installation.
+wxUSE_POCKETPC_UI
+
+  If you are compiling with Windows CE .NET, you may
+  wish to emulate PocketPC behaviour (set it to 1), or
+  take advantage of the greater flexibility of
+  Windows CE .NET (set it to 0).
+  If 0, the PocketPC-specific toolbar class will be
+  used, which uses commandbar to combine the toolbar
+  and menubar in one control. If 1, the normal menubar
+  and toolbar behaviour will be used, as per
+  desktop Windows.
+
+wxUSE_SMARTPHONE
+
+  Set this to 1 if you wish to compile for the SmartPhone
+  platform (with eVC++ 3).
 
 wxWindows/CE Compilation
 ================================
 
 Open src/msw/wince/wxWindowsCE.vcp, select an
-ARM or x86 target, and compile.
+ARM or x86 target (or emulator target for eVC++ 4),
+and compile.
 
 Then open samples/minimal/minimalCE.vcp, select an
-ARM or x86 target, and compile. You can
+ARM, x86 or emulator target, and compile. You can
 use the emulator or real hardware to run the
 sample.
 
@@ -69,7 +92,7 @@ Currently under development. For further information
 about what has been done and what needs to be
 done, see:
 
-http://wiki.wxwindows.org/wiki.pl?Windows_CE_Port
+http://wiki.wxwindows.org/wiki.pl?Developers_Notebook/WxWinCE
 
 Disclaimer
 ==========
index 90bc786920cc8d95c19a22aa15270425bd590b31..55d7d5c7865055e137443042ce1020e40059e190 100644 (file)
@@ -172,7 +172,7 @@ public:
     virtual void Detach();
     virtual void Attach(wxFrame *frame);
 
-#if defined(__WXWINCE__) && wxUSE_TOOLBAR
+#if wxUSE_TOOLBAR && defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
     // Under WinCE, a menubar is owned by the frame's toolbar
     void SetToolBar(wxToolBar* toolBar) { m_toolBar = toolBar; }
     wxToolBar* GetToolBar() const { return m_toolBar; }
@@ -214,6 +214,12 @@ protected:
 #if defined(__WXWINCE__) && wxUSE_TOOLBAR
     wxToolBar*  m_toolBar;
 #endif
+    // Not using a combined wxToolBar/wxMenuBar? then use
+    // a commandbar in WinCE .NET to implement the
+    // menubar, since there is no ::SetMenu function.
+#if defined(__WXWINCE__) && (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)
+    WXHWND      m_commandBar;
+#endif
 
 private:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuBar)
index 79de00e12cf72a72a98a903d2f8057e05b6dc68a..b468eef0dd5998809dba742d53f633f642c26efd 100644 (file)
 //
 // Default is 0
 //
-// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP)
+// Recommended setting: 1
 #ifndef wxUSE_UNICODE
-    #define wxUSE_UNICODE 0
+    #define wxUSE_UNICODE 1
 #endif
 
 // Set wxUSE_UNICODE_MSLU to 1 if you want to compile wxWindows in Unicode mode
 // (notably, wxNotebook pages)
 #define wxUSE_UXTHEME_AUTO      0
 
-// Set to 1 to if you're developing for MS SmartPhone
+// Set to 1 if you're developing for MS SmartPhone
 #define wxUSE_SMARTPHONE        0
 
+// Set to 1 if you want to maintain a PocketPC-style UI on
+// Windows CE .NET. If 0, wxWindows will use a commandbar
+// for the menubar, and a normal separate toolbar as per the
+// desktop implementation. If 1, wxWindows will combine
+// the toolbar and menubar as per the PocketPC implementation.
+//
+// Note that at present, the dynamic loading of PocketPC
+// shell functions on WinCE .NET is not yet done, and a
+// simple commandbar implementation is used instead of the
+// PocketPC one. The intention is to use the PocketPC style
+// when available (when wxUSE_POCKETPC_UI is 1).
+//
+// So if you're using WinCE .NET, and wxUSE_POCKETPC_UI is 0,
+// you will be able to create separate toolbars and menubars,
+// but _not_ the combined toolbar/menubar.
+#define wxUSE_POCKETPC_UI       1
+
 // ----------------------------------------------------------------------------
 // obsolete settings
 // ----------------------------------------------------------------------------
index 61abe5d7f6d34650f174f127e07a39aa7395f5ae..ff1ae8a51f113dd70bd21273f5f26c5d694fd946 100644 (file)
@@ -123,10 +123,10 @@ enum
     #else // wxUSE_TOOLBAR_NATIVE
         #if defined(__WXUNIVERSAL__)
            #include "wx/univ/toolbar.h"
+        #elif defined(__WXMSW__) && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI))
+           #include "wx/msw/tbar95.h"
         #elif defined(__WXWINCE__)
            #include "wx/msw/wince/tbarwce.h"
-        #elif defined(__WXMSW__) && defined(__WIN95__)
-           #include "wx/msw/tbar95.h"
         #elif defined(__WXMSW__)
            #include "wx/msw/tbarmsw.h"
         #elif defined(__WXMOTIF__)
index 78d72ccbd05e826419352fa069d18f4404567bbb..36ff939b35a22bdd05b318d7e34bfda018f2a936 100644 (file)
@@ -519,7 +519,7 @@ void wxFrameBase::SetMenuBar(wxMenuBar *menubar)
 
     DetachMenuBar();
 
-    AttachMenuBar(menubar);
+    this->AttachMenuBar(menubar);
 }
 
 #endif // wxUSE_MENUS
index 2885c3ed50b8c52ed5867653afe8f8511b61de74..75a1b4e4ef27926235374e3c89633aa3f76f9ddb 100644 (file)
@@ -320,6 +320,18 @@ void wxFrame::PositionStatusBar()
 
 void wxFrame::AttachMenuBar(wxMenuBar *menubar)
 {
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
+    if (!GetToolBar())
+    {
+        wxToolBar* toolBar = new wxToolBar(this, -1,
+                         wxDefaultPosition, wxDefaultSize,
+                         wxBORDER_NONE | wxTB_HORIZONTAL,
+                         wxToolBarNameStr, GetMenuBar());
+        SetToolBar(toolBar);
+        menubar->SetToolBar(toolBar);
+    }
+#endif
+
     wxFrameBase::AttachMenuBar(menubar);
 
     if ( !menubar )
@@ -330,7 +342,7 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar)
     }
     else // set new non NULL menu bar
     {
-#ifndef __WXWINCE__
+#if !defined(__WXWINCE__) || (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)
         // Can set a menubar several times.
         if ( menubar->GetHMenu() )
         {
@@ -353,18 +365,8 @@ void wxFrame::AttachMenuBar(wxMenuBar *menubar)
 
 void wxFrame::InternalSetMenuBar()
 {
-#ifdef __WXMICROWIN__
+#if defined(__WXMICROWIN__) || defined(__WXWINCE__)
     // Nothing
-#elif defined(__WXWINCE__)
-
-    if (!GetToolBar())
-    {
-        wxToolBar* toolBar = new wxToolBar(this, -1,
-                         wxDefaultPosition, wxDefaultSize,
-                         wxBORDER_NONE | wxTB_HORIZONTAL,
-                         wxToolBarNameStr, GetMenuBar());
-        SetToolBar(toolBar);
-    }
 #else
     if ( !::SetMenu(GetHwnd(), (HMENU)m_hMenu) )
     {
@@ -403,7 +405,7 @@ bool wxFrame::ShowFullScreen(bool show, long style)
     if (show)
     {
 #if wxUSE_TOOLBAR
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         // TODO: hide commandbar
 #else
         wxToolBar *theToolBar = GetToolBar();
@@ -420,8 +422,10 @@ bool wxFrame::ShowFullScreen(bool show, long style)
 #endif // __WXWINCE__
 #endif // wxUSE_TOOLBAR
 
+#if defined(__WXMICROWIN__)
+#elif defined(__WXWINCE__)
         // TODO: make it work for WinCE
-#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
+#else
         if (style & wxFULLSCREEN_NOMENUBAR)
             SetMenu((HWND)GetHWND(), (HMENU) NULL);
 #endif
@@ -446,7 +450,7 @@ bool wxFrame::ShowFullScreen(bool show, long style)
     else
     {
 #if wxUSE_TOOLBAR
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         // TODO: show commandbar
 #else
         wxToolBar *theToolBar = GetToolBar();
@@ -472,8 +476,10 @@ bool wxFrame::ShowFullScreen(bool show, long style)
         }
 #endif // wxUSE_STATUSBAR
 
+#if defined(__WXMICROWIN__)
+#elif defined(__WXWINCE__)
         // TODO: make it work for WinCE
-#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
+#else
         if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
             SetMenu((HWND)GetHWND(), (HMENU)m_hMenu);
 #endif
@@ -490,7 +496,7 @@ bool wxFrame::ShowFullScreen(bool show, long style)
 
 wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
 {
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
     // We may already have a toolbar from calling SetMenuBar.
     if (GetToolBar())
         return GetToolBar();
@@ -508,7 +514,7 @@ void wxFrame::PositionToolBar()
     wxToolBar *toolbar = GetToolBar();
     if ( toolbar && toolbar->IsShown() )
     {
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         // We want to do something different in WinCE, because
         // the toolbar should be associated with the commandbar,
         // and not an independent window.
index bcc1febf1d6f8ee186c5c816f3333b764accbd6f..f8b1c4377b315f56ffad9b2caf54deae03cf4ace 100644 (file)
@@ -673,8 +673,14 @@ void wxMenuBar::Init()
 {
     m_eventHandler = this;
     m_hMenu = 0;
-#ifdef __WXWINCE__
+#if wxUSE_TOOLBAR && defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
     m_toolBar = NULL;
+#endif
+    // Not using a combined wxToolBar/wxMenuBar? then use
+    // a commandbar in WinCE .NET just to implement the
+    // menubar.
+#if defined(__WXWINCE__) && (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)
+    m_commandBar = NULL;
 #endif
 }
 
@@ -705,9 +711,9 @@ wxMenuBar::wxMenuBar(int count, wxMenu *menus[], const wxString titles[])
 
 wxMenuBar::~wxMenuBar()
 {
-    // In Windows CE, the menubar is always associated
+    // In Windows CE (not .NET), the menubar is always associated
     // with a toolbar, which destroys the menu implicitly.
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
     if (GetToolBar())
         GetToolBar()->SetMenuBar(NULL);
 #else
@@ -715,7 +721,12 @@ wxMenuBar::~wxMenuBar()
     // which happens if we're attached to a frame
     if (m_hMenu && !IsAttached())
     {
+#if defined(__WXWINCE__) && (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)
+        ::DestroyWindow((HWND) m_commandBar);
+        m_commandBar = (WXHWND) NULL;
+#else
         ::DestroyMenu((HMENU)m_hMenu);
+#endif        
         m_hMenu = (WXHMENU)NULL;
     }
 #endif
@@ -729,11 +740,14 @@ void wxMenuBar::Refresh()
 {
     wxCHECK_RET( IsAttached(), wxT("can't refresh unattached menubar") );
 
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
     if (GetToolBar())
     {
         CommandBar_DrawMenuBar((HWND) GetToolBar()->GetHWND(), 0);
     }
+#elif defined(__WXWINCE__) && (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)
+    if (m_commandBar)
+        DrawMenuBar((HWND) m_commandBar);
 #else
     DrawMenuBar(GetHwndOf(GetFrame()));
 #endif
@@ -806,17 +820,6 @@ WXHMENU wxMenuBar::Create()
         }
     }
 
-#if _WIN32_WCE >= 400
-    if (GetToolBar())
-    {
-        HWND hCommandBar = (HWND) GetToolBar()->GetHWND();
-        if (!CommandBar_InsertMenubarEx(hCommandBar, NULL, (LPTSTR) m_hMenu, 0))
-        {
-            wxLogLastError(wxT("CommandBar_InsertMenubarEx"));
-        }
-    }
-#endif
-
     return m_hMenu;
 #endif
 }
@@ -953,7 +956,7 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 
     if ( IsAttached() )
     {
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         if (!GetToolBar())
             return FALSE;
         TBBUTTON tbButton; 
@@ -1007,7 +1010,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
 
     if ( IsAttached() )
     {
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         if (!GetToolBar())
             return FALSE;
         TBBUTTON tbButton; 
@@ -1058,7 +1061,7 @@ wxMenu *wxMenuBar::Remove(size_t pos)
 
     if ( IsAttached() )
     {
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
         if (GetToolBar())
         {
             if (!::SendMessage((HWND) GetToolBar()->GetHWND(), TB_DELETEBUTTON, (UINT) pos, (LPARAM) 0))
@@ -1125,6 +1128,36 @@ void wxMenuBar::Attach(wxFrame *frame)
 {
     wxMenuBarBase::Attach(frame);
 
+#if defined(__WXWINCE__) && _WIN32_WCE >= 400
+    if (!m_hMenu)
+        this->Create();
+#if wxUSE_POCKETPC_UI
+    if (GetToolBar())
+    {
+        HWND hCommandBar = (HWND) GetToolBar()->GetHWND();
+        if (!CommandBar_InsertMenubarEx(hCommandBar, NULL, (LPTSTR) m_hMenu, 0))
+        {
+            wxLogLastError(wxT("CommandBar_InsertMenubarEx"));
+        }
+    }
+#else
+    if (!m_commandBar)
+        m_commandBar = (WXHWND) CommandBar_Create(wxGetInstance(), (HWND) frame->GetHWND(), NewControlId());
+    if (m_commandBar)
+    {
+        if (m_hMenu)
+        {
+            if (!CommandBar_InsertMenubarEx((HWND) m_commandBar, NULL, (LPTSTR) m_hMenu, 0))
+            {
+                wxLogLastError(wxT("CommandBar_InsertMenubarEx"));
+            }
+        }
+    }
+#endif
+    // wxUSE_POCKETPC_UI
+#endif
+    // __WXWINCE__ && _WIN32_WCE >= 400
+
 #if wxUSE_ACCEL
     RebuildAccelTable();
 #endif // wxUSE_ACCEL
index 304a16175640739dd1bf23386bf569586ab9b279..58ddd04fa776137a1189e80cabf8dff313e9a120 100644 (file)
@@ -39,7 +39,7 @@
     #include "wx/control.h"
 #endif
 
-#if wxUSE_TOOLBAR && defined(__WIN95__) && wxUSE_TOOLBAR_NATIVE
+#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI))
 
 #include "wx/toolbar.h"
 
index 79baa1c7b22299f3d878b5770c36d418e51f7dee..f5b7b164ef2a9552fa6d5b759ae1edd8f527137d 100644 (file)
@@ -39,7 +39,9 @@
     #include "wx/control.h"
 #endif
 
-#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE
+// Use the WinCE-specific toolbar only if we're either compiling
+// with a WinCE earlier than 4, or we wish to emulate a PocketPC-style UI
+#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
 
 #include "wx/toolbar.h"
 
index f2aa6637f46a9f4c803f7c2c546a7996310eb97c..5afe33a36d43f1ad3f1d61e701a0543a0dd532e9 100644 (file)
@@ -2253,6 +2253,12 @@ SOURCE=..\tabctrl.cpp
 SOURCE=..\taskbar.cpp
 
 
+# End Source File
+# Begin Source File
+
+SOURCE=..\tbar95.cpp
+
+
 # End Source File
 # Begin Source File