=================================================
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:
Supported platforms
===================
-These are the supported platform at the moment:
+These are the supported platforms at the moment:
- x86 emulator
- PocketPC (StrongARM)
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.
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
==========
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; }
#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)
//
// 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
// ----------------------------------------------------------------------------
#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__)
DetachMenuBar();
- AttachMenuBar(menubar);
+ this->AttachMenuBar(menubar);
}
#endif // wxUSE_MENUS
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 )
}
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() )
{
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) )
{
if (show)
{
#if wxUSE_TOOLBAR
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
// TODO: hide commandbar
#else
wxToolBar *theToolBar = GetToolBar();
#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
else
{
#if wxUSE_TOOLBAR
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
// TODO: show commandbar
#else
wxToolBar *theToolBar = GetToolBar();
}
#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
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();
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.
{
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
}
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
// 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
{
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
}
}
-#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
}
if ( IsAttached() )
{
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
if (!GetToolBar())
return FALSE;
TBBUTTON tbButton;
if ( IsAttached() )
{
-#ifdef __WXWINCE__
+#if defined(__WXWINCE__) && (_WIN32_WCE < 400 || wxUSE_POCKETPC_UI)
if (!GetToolBar())
return FALSE;
TBBUTTON tbButton;
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))
{
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
#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"
#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"
SOURCE=..\taskbar.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\tbar95.cpp
+
+
# End Source File
# Begin Source File