Frames have Ctrl+Q accelerator set automatically, as per the

PocketPC guidelines
Documented issues in manual under wxWinCE topic.
wxDEFAULT_DIALOG_STYLES rationalised so we can make use of
styles such as wxCLOSE_BOX in future (OK button on titlebar)
Added Set/GetAffirmativeId and DoOK so that titlebar OK button
can be customised


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32823 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2005-03-14 17:15:06 +00:00
parent f8a10a3d2b
commit 9ceeecb94e
10 changed files with 323 additions and 62 deletions

View File

@@ -43,11 +43,15 @@ wxPalmOS:
wxWinCE: wxWinCE:
- Added wxNB_FLAT for flat-look notebooks on Windows CE. - Added wxNB_FLAT for flat-look notebooks on Windows CE.
- Titlebar OK button on PocketPC now looks for OK, Cancel, Close buttons. - Titlebar OK button on PocketPC now sends command set by SetAffirmativeId.
You can also override wxDialog::DoOK if you need more flexibility.
- Dialog size now takes into account SIP or menubar. - Dialog size now takes into account SIP or menubar.
- Panels more naturally white on PocketPC. - Panels more naturally white on PocketPC.
- wxDIALOG_EX_CONTEXTHELP ignored on WinCE since it interferes - wxDIALOG_EX_CONTEXTHELP ignored on WinCE since it interferes
with correct titlebar style. with correct titlebar style.
- Frames have Ctrl+Q accelerator set automatically, as per the
PocketPC guidelines
- Documented issues in manual under wxWinCE topic.
2.5.4 2.5.4

View File

@@ -42,27 +42,24 @@ to one of the symbols above so this should be tested first.}
\twocolitem{\_\_X\_\_}{any X11-based GUI toolkit except GTK+} \twocolitem{\_\_X\_\_}{any X11-based GUI toolkit except GTK+}
\end{twocollist} \end{twocollist}
Mac situation is a bit confusing so a few extra words to explain it: there are There are two wxWidgets ports to Mac OS. One of them, wxMac, exists in two versions: Classic and
2 wx ports to Mac OS. One of them, wxMac, exists in 2 versions: Classic and
Carbon. The Classic version is the only one to work on Mac OS version 8. The Carbon. The Classic version is the only one to work on Mac OS version 8. The
Carbon version may be built either as CFM or Mach-O (binary format, like ELF) Carbon version may be built either as CFM or Mach-O (binary format, like ELF)
and the former may run under OS 9 while the latter only runs under OS X. and the former may run under OS 9 while the latter only runs under OS X.
Finally, there is a new Cocoa port which can only be used under OS X. To Finally, there is a new Cocoa port which can only be used under OS X. To
summarize: summarize:
\begin{itemize} \begin{itemize}
\item If you want to test for all Mac platforms, classic and OS X, you \item If you want to test for all Mac platforms, classic and OS X, you
should test both \texttt{\_\_WXMAC\_\_} and \texttt{\_\_WXCOCOA\_\_} should test both \texttt{\_\_WXMAC\_\_} and \texttt{\_\_WXCOCOA\_\_}.
\item If you want to test for any GUI Mac port under OS X, use \item If you want to test for any GUI Mac port under OS X, use
\texttt{\_\_WXOSX\_\_} \texttt{\_\_WXOSX\_\_}.
\item If you want to test for any port under Mac OS X, including, for \item If you want to test for any port under Mac OS X, including, for
example, wxGTK and also wxBase, use \texttt{\_\_DARWIN\_\_} (see below) example, wxGTK and also wxBase, use \texttt{\_\_DARWIN\_\_} (see below).
\end{itemize} \end{itemize}
The convention is to use the \texttt{\_\_WX} prefix for these
Note to implementors: although some of the symbols above don't start with symbols, although this has not always been followed.
\texttt{\_\_WX} prefix, they really should always use it, so please do start
any new symbols with it.
\subsection{Operating systems}\label{osconst} \subsection{Operating systems}\label{osconst}
@@ -110,15 +107,20 @@ compiler used.
\subsection{Hardware type}\label{hardwareconst} \subsection{Hardware type}\label{hardwareconst}
Combination of these symbols with GUI symbols describes real hardware % Note: previous documentation referred to __SMARTPHONE__ as a generic (non-MS-specific) symbol
(like \_\_PDA\_\_ $&&$ \_\_WXWINCE\_\_ $==$ PocketPC devices). % but we should go back to using it for a specific SDK, because trying to be
% generic doesn't really work
\begin{twocollist}\itemsep=0pt \begin{twocollist}\itemsep=0pt
\twocolitem{\_\_SMARTPHONE\_\_}{Mobile devices with dialog capability through \twocolitem{\_\_SMARTPHONE\_\_}{Microsoft-powered mobile devices with phone buttons and a small display}
phone buttons and small display} \twocolitem{\_\_POCKETPC\_\_}{Microsoft-powered PocketPC devices with touch-screen}
\twocolitem{\_\_PDA\_\_}{Personal digital assistant usually with touch screen and \twocolitem{\_\_WINCE\_STANDARDSDK\_\_}{Microsoft-powered Windows CE devices, for generic Windows CE applications}
middle sized screen} \twocolitem{\_\_WINCE\_NET\_\_}{Microsoft-powered Windows CE .NET devices (\_WIN32\_WCE is 400 or greater)}
\twocolitem{\_\_HANDHELD\_\_}{Small enough but powerful computer} % Note to doc writers: these symbols are pretty useless because of the blurred
% dividing lines between these machines, plus they're not actually used.
%\twocolitem{\_\_PDA\_\_}{Personal digital assistant usually with touch screen and
%middle sized screen (not yet defined anywhere)}
%\twocolitem{\_\_HANDHELD\_\_}{Small enough but powerful computer (not yet defined anywhere)}
\end{twocollist} \end{twocollist}

View File

@@ -184,6 +184,15 @@ of the following flags: wxOK, wxCANCEL, wxYES, wxNO, wxHELP, wxNO\_DEFAULT.
The sizer lays out the buttons in a manner appropriate to the platform. The sizer lays out the buttons in a manner appropriate to the platform.
\membersection{wxDialog::DoOK}\label{wxdialogdook}
\func{virtual bool}{DoOK}{\void}
This function is called when the titlebar OK button is pressed (PocketPC only).
A command event for the identifier returned by GetAffirmativeId is sent by
default. You can override this function. If the function returns false, wxWidgets
will call Close() for the dialog.
\membersection{wxDialog::EndModal}\label{wxdialogendmodal} \membersection{wxDialog::EndModal}\label{wxdialogendmodal}
\func{void}{EndModal}{\param{int }{retCode}} \func{void}{EndModal}{\param{int }{retCode}}
@@ -201,6 +210,16 @@ invocation.
\helpref{wxDialog::GetReturnCode}{wxdialoggetreturncode},\rtfsp \helpref{wxDialog::GetReturnCode}{wxdialoggetreturncode},\rtfsp
\helpref{wxDialog::SetReturnCode}{wxdialogsetreturncode} \helpref{wxDialog::SetReturnCode}{wxdialogsetreturncode}
\membersection{wxDialog::GetAffirmativeId}\label{wxdialoggetaffirmativeid}
\constfunc{int}{GetAffirmativeId}{\void}
Gets the identifier to be used when the user presses an OK button in a PocketPC titlebar.
\wxheading{See also}
\helpref{wxDialog::SetAffirmativeId}{wxdialogsetaffirmativeid}
\membersection{wxDialog::GetReturnCode}\label{wxdialoggetreturncode} \membersection{wxDialog::GetReturnCode}\label{wxdialoggetreturncode}
\func{int}{GetReturnCode}{\void} \func{int}{GetReturnCode}{\void}
@@ -325,6 +344,17 @@ propagate the notification to child windows and controls.
\helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent} \helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}
\membersection{wxDialog::SetAffirmativeId}\label{wxdialogsetaffirmativeid}
\func{void}{SetAffirmativeId}{\param{int }{id}}
Sets the identifier to be used when the user presses an OK button in a PocketPC titlebar.
By default, this is wxID\_OK.
\wxheading{See also}
\helpref{wxDialog::GetAffirmativeId}{wxdialoggetaffirmativeid}
\membersection{wxDialog::SetIcon}\label{wxdialogseticon} \membersection{wxDialog::SetIcon}\label{wxdialogseticon}
\func{void}{SetIcon}{\param{const wxIcon\& }{icon}} \func{void}{SetIcon}{\param{const wxIcon\& }{icon}}

View File

@@ -40,6 +40,7 @@ not available, \helpref{wxHtmlHelpController}{wxhtmlhelpcontroller}. You need to
{\bf both} CHM and HTB versions of the help file. For 32bit Windows only. {\bf both} CHM and HTB versions of the help file. For 32bit Windows only.
\item wxExtHelpController, for controlling external browsers under Unix. \item wxExtHelpController, for controlling external browsers under Unix.
The default browser is Netscape Navigator. The 'help' sample shows its use. The default browser is Netscape Navigator. The 'help' sample shows its use.
\item wxWinceHelpController, for controlling a simple {\tt .htm} help controller for Windows CE applications.
\item \helpref{wxHtmlHelpController}{wxhtmlhelpcontroller}, a sophisticated help controller using \helpref{wxHTML}{wxhtml}, in \item \helpref{wxHtmlHelpController}{wxhtmlhelpcontroller}, a sophisticated help controller using \helpref{wxHTML}{wxhtml}, in
a similar style to the Microsoft HTML Help viewer and using some of the same files. a similar style to the Microsoft HTML Help viewer and using some of the same files.
Although it has an API compatible with other help controllers, it has more advanced features, so it is Although it has an API compatible with other help controllers, it has more advanced features, so it is

View File

@@ -13,3 +13,190 @@ MinGW32 tool chain.
For further information, please see the files in docs/msw For further information, please see the files in docs/msw
in the distribution. in the distribution.
\subsection{wxWinCE}\label{wxwince}
wxWinCE is the name given to wxMSW when compiled on Windows CE devices;
most of wxMSW is common to Win32 and Windows CE but there are
some simplifications, enhancements, and differences in
behaviour.
For installation instructions, see docs/msw/wince in the
distribution. The rest of this section documents issues you
need to be aware of when programming for Windows CE devices.
\subsubsection{General issues for wxWinCE programming}
Mobile applications generally have fewer features and
simpler user interfaces. Simply omit whole sizers, static
lines and controls in your dialogs, and use comboboxes instead
of listboxes where appropriate. You also need to reduce
the amount of spacing used by sizers, for which you can
use a macro such as this:
\begin{verbatim}
#if defined(__WXWINCE__
#define wxLARGESMALL(large,small) small
#else
#define wxLARGESMALL(large,small) large
#endif
// Usage
topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) );
\end{verbatim}
There is only ever one instance of a Windows CE application running,
and wxWidgets will take care of showing the current instance and
shutting down the second instance if necessary.
You can test the return value of wxSystemSettings::GetScreenType()
for a qualitative assessment of what kind of display is available,
or use wxGetDisplaySize() if you need more information.
See the "Life!" example (demos/life) for an example of
an application that has been tailored for Windows CE use.
\subsubsection{Testing for WinCE SDKs}
Use these preprocessor symbols to test for the different SDKS:
\begin{twocollist}\itemsep=0pt
\twocolitem{\_\_WXWINCE\_\_}{Microsoft-powered Windows CE devices, whether PocketPC, Smartphone or Standard SDK}
\twocolitem{\_\_SMARTPHONE\_\_}{Microsoft-powered mobile devices with phone buttons and a small display}
\twocolitem{\_\_POCKETPC\_\_}{Microsoft-powered PocketPC devices with touch-screen}
\twocolitem{\_\_WINCE\_STANDARDSDK\_\_}{Microsoft-powered Windows CE devices, for generic Windows CE applications}
\twocolitem{\_\_WINCE\_NET\_\_}{Microsoft-powered Windows CE .NET devices (\_WIN32\_WCE is 400 or greater)}
\end{twocollist}
\subsubsection{Window sizing in wxWinCE}
When creating frames and dialogs, create them with wxDefaultPosition and
wxDefaultSize, which will tell WinCE to create them full-screen.
Don't call Fit() and Centre(), so the content sizes to
the window rather than fitting the window to the content. (We really need a single API call
that will do the right thing on each platform.)
If the screen orientation changes, the windows will automatically be resized
so no further action needs to be taken (unless you want to change the layout
according to the orientation, which you could detect in idle time, for example).
However, if the input panel (SIP) is shown, windows do not yet resize accordingly. This will
be implemented soon.
\subsubsection{Dialogs in wxWinCE}
PocketPC dialogs have an OK button on the caption, and so you should generally
not repeat an OK button on the dialog. You can add a Cancel button if necessary, but some dialogs
simply don't offer you the choice (the guidelines recommend you offer an Undo facility
to make up for it). When the user clicks on the OK button, your dialog will receive
a wxID\_OK event by default. If you wish to change this, call wxDialog::SetAffirmativeId
with the required identifier to be used. Or, override wxDialog::DoOK (return false to
have wxWidgets simply call Close to dismiss the dialog).
Smartphone dialogs do {\it not} have an OK button on the caption, and are closed
using one of the two menu buttons. You need to assign these using wxTopLevelWindow::SetLeftMenu
and wxTopLevelWindow::SetRightMenu, for example:
\begin{verbatim}
#ifdef __SMARTPHONE__
SetLeftMenu(wxID_OK);
SetRightMenu(wxID_CANCEL, _("Cancel"));
#elif defined(__POCKETPC__)
// No OK/Cancel buttons on PocketPC, OK on caption will close
#else
topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxEXPAND | wxALL, 10 );
#endif
\end{verbatim}
For implementing property sheets (flat tabs), use a wxNotebook with wxNB_FLAT|wxNB_BOTTOM
and have the notebook left, top and right sides overlap the dialog by about 3 pixels
to eliminate spurious borders. You can do this by using a negative spacing in your
sizer Add() call. A cross-platform property sheet dialog will be implemented in the
future, so you only need to provide the dialog's pages.
Notifications (bubble HTML text with optional buttons and links) will also be
implemented in the future for PocketPC.
\subsubsection{Menubars and toolbars in wxWinCE}
Menubars and toolbars can only be implemented using a combined control,
but you can use the same syntax as before; wxWidgets will combine the menubar
and toolbar. However, you cannot at present use arbitrary toolbar bitmaps
(since they have to be loaded from a Windows resource), so only standard
identifiers will work (wxID\_OPEN, wxID\_SAVE, wxID\_COPY and so on).
The wxWidgets API doesn't currently provide us with a method of passing resource
identifiers to AddTool, which is something that needs to be addressed.
On PocketPC, a frame must always have a menubar, even if it's empty.
On Smartphone, there are only two menu buttons, so a menubar is simulated
using a nested menu on the right menu button.
\subsubsection{Closing windows in wxWinCE}
The guidelines state that applications should not have a Quit menu item,
since the user should not have to know whether an application is in memory
or not. The close button on a window does not call the window's
close handler; it simply hides the window. However, the guidelines say that
the Ctrl+Q accelerator can be used to quit the application, so wxWidgets
defines this accelerator by default and if your application handles
wxID\_EXIT, it will do the right thing.
\subsubsection{Control differences on wxWinCE}
This section is to be written.
Can someone remind us why wxChoice was rewritten for Smartphone?
\subsubsection{Online help in wxWinCE}
You can use the help controller wxWinceHelpController which controls
simple {\tt .htm} files, usually installed in the Windows directory.
\subsubsection{Remaining issues}
These are some of the remaining problems to be sorted out, and features
to be supported.
\itemsep=0pt
\begin{itemize}
\item {\bf Custom toolbar buttons.} The bitmaps could be loaded from a resource
named using the string normally used for a tool caption. Currently only buttons with
standard identifiers can be used.
\item {\bf Font dialog.} The generic font dialog is currently used, which
needs to be simplified (and speeded up).
\item {\bf Sizer speed.} Particularly for dialogs containing notebooks,
layout seems slow. Some analysis is required.
\item {\bf Property sheets.} We should have a class for handling property sheets
on WinCE and desktop platforms (see previous section on dialogs).
\item {\bf Notification boxes.} The balloon-like notification messages, and their
icons, should be implemented. This will be quite straightforward.
\item {\bf WM\_SETTINGCHANGE.} This message needs to be handled by calling SHHandleWMSettingChange.
\item {\bf WM\_ACTIVATE.} This message needs to be handled by calling SHHandleWMActivate.
\item {\bf WM\_HIBERNATE.} We need to handle this message.
\item {\bf SIP size.} We need to be able to get the area taken up by the SIP (input panel),
and the remaining area, by calling SHSipInfo. We also may need to be able to show and hide
the SIP programmatically, with SHSipPreference. See also the {\it Input Dialogs} topic in
the {\it Programming Windows CE} guide for more on this, and how to have dialogs
show the SIP automatically using the WC_SIPREF control.
\item {\bf Drawing.} The "Life!" demo shows some droppings being left on the window,
indicating that drawing works a bit differently between desktop and mobile versions of
Win32.
\item {\bf wxStaticBitmap.} The About box in the "Life!" demo shows a bitmap that is
the correct size on the emulator, but too small on a VGA Pocket Loox device.
\item {\bf OK button.} We should allow the OK button on a dialog to be optional, perhaps
by using wxCLOSE\_BOX to indicate when the OK button should be displayed.
\item {\bf Data storage.} Methods for saving data on Smartphone need to be supported and documented.
\item {\bf Dynamic adaptation.} We should probably be using run-time tests more
than preprocessor tests, so that the same WinCE application can run on different
versions of the operating system.
\item {\bf Home screen plugins.} Figure out how to make home screen plugins for use with wxWidgets
applications (see {\tt http://www.codeproject.com/ce/CTodayWindow.asp} for inspiration).
Although we can't use wxWidgets to create the plugin (too large), we could perhaps write
a generic plugin that takes registry information from a given application, with
options to display information in a particular way using icons and text from
a specified location.
\item {\bf Further abstraction.} We should be able to abstract away more of the differences
between desktop and mobile applications, in particular for sizer layout.
\end{itemize}

View File

@@ -26,13 +26,9 @@ class WXDLLEXPORT wxStdDialogButtonSizer;
#define wxDIALOG_NO_PARENT 0x0001 // Don't make owned by apps top window #define wxDIALOG_NO_PARENT 0x0001 // Don't make owned by apps top window
#ifdef __WXWINCE__ #ifdef __WXWINCE__
# ifdef __SMARTPHONE__ #define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxMAXIMIZE | wxCLOSE_BOX)
# define wxDEFAULT_DIALOG_STYLE (wxMAXIMIZE | wxCAPTION) #else
# else #define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX)
# define wxDEFAULT_DIALOG_STYLE (0)
# endif
#else // !__WXWINCE__
# define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
#endif #endif
extern WXDLLEXPORT_DATA(const wxChar*) wxDialogNameStr; extern WXDLLEXPORT_DATA(const wxChar*) wxDialogNameStr;
@@ -45,11 +41,15 @@ public:
void Init(); void Init();
// the modal dialogs have a return code - usually the id of the last // Modal dialogs have a return code - usually the id of the last
// pressed button // pressed button
void SetReturnCode(int returnCode) { m_returnCode = returnCode; } void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
int GetReturnCode() const { return m_returnCode; } int GetReturnCode() const { return m_returnCode; }
// The identifier for the affirmative button
void SetAffirmativeId(int affirmativeId) { m_affirmativeId = affirmativeId; }
int GetAffirmativeId() const { return m_affirmativeId; }
#if wxUSE_STATTEXT // && wxUSE_TEXTCTRL #if wxUSE_STATTEXT // && wxUSE_TEXTCTRL
// splits text up at newlines and places the // splits text up at newlines and places the
// lines into a vertical wxBoxSizer // lines into a vertical wxBoxSizer
@@ -63,9 +63,12 @@ public:
#endif // wxUSE_BUTTON #endif // wxUSE_BUTTON
protected: protected:
// the return code from modal dialog // The return code from modal dialog
int m_returnCode; int m_returnCode;
// The identifier for the affirmative button (usually wxID_OK)
int m_affirmativeId;
DECLARE_NO_COPY_CLASS(wxDialogBase) DECLARE_NO_COPY_CLASS(wxDialogBase)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
WX_DECLARE_CONTROL_CONTAINER(); WX_DECLARE_CONTROL_CONTAINER();

View File

@@ -79,6 +79,14 @@ public:
// Responds to colour changes // Responds to colour changes
void OnSysColourChanged(wxSysColourChangedEvent& event); void OnSysColourChanged(wxSysColourChangedEvent& event);
#ifdef __POCKETPC__
// Responds to the OK button in a PocketPC titlebar. This
// can be overridden, or you can change the id used for
// sending the event with SetAffirmativeId. Returns false
// if the event was not processed.
virtual bool DoOK();
#endif
// Windows callbacks // Windows callbacks
WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);

View File

@@ -56,7 +56,8 @@ WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase)
void wxDialogBase::Init() void wxDialogBase::Init()
{ {
m_returnCode = 0; m_returnCode = 0;
m_affirmativeId = wxID_OK;
// the dialogs have this flag on by default to prevent the events from the // the dialogs have this flag on by default to prevent the events from the
// dialog controls from reaching the parent frame which is usually // dialog controls from reaching the parent frame which is usually
// undesirable and can lead to unexpected and hard to find bugs // undesirable and can lead to unexpected and hard to find bugs
@@ -228,6 +229,11 @@ wxStdDialogButtonSizer *wxDialogBase::CreateStdDialogButtonSizer( long flags )
yes->SetFocus(); yes->SetFocus();
} }
} }
if (flags & wxOK)
SetAffirmativeId(wxID_OK);
else if (flags & wxYES)
SetAffirmativeId(wxID_YES);
return sizer; return sizer;
} }

View File

@@ -433,6 +433,31 @@ void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event))
Refresh(); Refresh();
} }
#ifdef __POCKETPC__
// Responds to the OK button in a PocketPC titlebar. This
// can be overridden, or you can change the id used for
// sending the event, by calling SetAffirmativeId.
bool wxDialog::DoOK()
{
wxButton *btn = wxDynamicCast(FindWindow(GetAffirmativeId()), wxButton);
if ( btn && btn->IsEnabled() )
{
// If we have this button, press it
btn->MSWCommand(BN_CLICKED, 0 /* unused */);
return true;
}
else
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId());
event.SetEventObject(this);
return GetEventHandler()->ProcessEvent(event);
}
}
#endif
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// dialog window proc // dialog window proc
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -450,32 +475,13 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar
{ {
switch ( LOWORD(wParam) ) switch ( LOWORD(wParam) )
{ {
#ifndef __SMARTPHONE__ #ifdef __POCKETPC__
case IDOK: case IDOK:
// First, try the OK button, since it's closest in meaning. processed = DoOK();
wxButton *btn = wxDynamicCast(FindWindow(wxID_OK), wxButton); if (!processed)
// Next, try Cancel or Close buttons
if (!btn)
btn = wxDynamicCast(FindWindow(wxID_CANCEL), wxButton);
if (!btn)
btn = wxDynamicCast(FindWindow(wxID_CLOSE), wxButton);
if ( btn && btn->IsEnabled() )
{
// if we do have a cancel button, do press it
btn->MSWCommand(BN_CLICKED, 0 /* unused */);
processed = true;
break;
}
else
{
// Finally, if there aren't appropriate buttons,
// act as if it were the normal close button.
processed = !Close(); processed = !Close();
} #endif
#ifdef __SMARTPHONE__
#else // ifdef __SMARTPHONE__
case IDM_LEFT: case IDM_LEFT:
case IDM_RIGHT: case IDM_RIGHT:
processed = HandleCommand( LOWORD(wParam) , 0 , NULL ); processed = HandleCommand( LOWORD(wParam) , 0 , NULL );

View File

@@ -185,31 +185,42 @@ WXDWORD wxTopLevelWindowMSW::MSWGetStyle(long style, WXDWORD *exflags) const
msflags |= WS_POPUP; msflags |= WS_POPUP;
#endif #endif
// normally we consider that all windows without caption must be popups, // normally we consider that all windows without a caption must be popups,
// but CE is an exception: there windows normally do not have the caption // but CE is an exception: there windows normally do not have the caption
// but shouldn't be made popups as popups can't have menus and don't look // but shouldn't be made popups as popups can't have menus and don't look
// like normal windows anyhow // like normal windows anyhow
// TODO: Smartphone appears to like wxCAPTION, but we should check that
// we need it.
#if defined(__SMARTPHONE__) || !defined(__WXWINCE__)
if ( style & wxCAPTION ) if ( style & wxCAPTION )
msflags |= WS_CAPTION; msflags |= WS_CAPTION;
#ifndef __WXWINCE__ #ifndef __WXWINCE__
else else
msflags |= WS_POPUP; msflags |= WS_POPUP;
#endif // !__WXWINCE__ #endif // !__WXWINCE__
#endif
// next translate the individual flags // next translate the individual flags
if ( style & wxMINIMIZE_BOX ) if ( style & wxMINIMIZE_BOX )
msflags |= WS_MINIMIZEBOX; msflags |= WS_MINIMIZEBOX;
if ( style & wxMAXIMIZE_BOX ) if ( style & wxMAXIMIZE_BOX )
msflags |= WS_MAXIMIZEBOX; msflags |= WS_MAXIMIZEBOX;
#ifndef __WXWINCE__
if ( style & wxSYSTEM_MENU ) if ( style & wxSYSTEM_MENU )
msflags |= WS_SYSMENU; msflags |= WS_SYSMENU;
#endif
// NB: under CE these 2 styles are not supported currently, we should // NB: under CE these 2 styles are not supported currently, we should
// call Minimize()/Maximize() "manually" if we want to support them // call Minimize()/Maximize() "manually" if we want to support them
if ( style & wxMINIMIZE ) if ( style & wxMINIMIZE )
msflags |= WS_MINIMIZE; msflags |= WS_MINIMIZE;
#if !defined(__POCKETPC__)
if ( style & wxMAXIMIZE ) if ( style & wxMAXIMIZE )
msflags |= WS_MAXIMIZE; msflags |= WS_MAXIMIZE;
#endif
// Keep this here because it saves recoding this function in wxTinyFrame // Keep this here because it saves recoding this function in wxTinyFrame
if ( style & (wxTINY_CAPTION_VERT | wxTINY_CAPTION_HORIZ) ) if ( style & (wxTINY_CAPTION_VERT | wxTINY_CAPTION_HORIZ) )
@@ -509,10 +520,12 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
ret = CreateFrame(title, pos, sizeReal); ret = CreateFrame(title, pos, sizeReal);
} }
#ifndef __WXWINCE__
if ( ret && !(GetWindowStyleFlag() & wxCLOSE_BOX) ) if ( ret && !(GetWindowStyleFlag() & wxCLOSE_BOX) )
{ {
EnableCloseButton(false); EnableCloseButton(false);
} }
#endif
// for some reason we need to manually send ourselves this message as // for some reason we need to manually send ourselves this message as
// otherwise the mnemonics are always shown -- even if they're configured // otherwise the mnemonics are always shown -- even if they're configured
@@ -531,8 +544,10 @@ bool wxTopLevelWindowMSW::Create(wxWindow *parent,
); );
} }
// Native look is full screen window on Smartphones and Standard SDK // Native look is full screen window on Smartphones and Standard SDK.
#if defined(__WXWINCE__) // TODO: check that we need this (if we're passing default values to ctor).
// Also check that there really is a difference between PocketPC and Smartphone in this regard.
#if defined(__WXWINCE__) && (defined(__SMARTPHONE__) || defined(__WINCE_STANDARDSDK__))
if ( style & wxMAXIMIZE ) if ( style & wxMAXIMIZE )
{ {
this->Maximize(); this->Maximize();
@@ -1025,10 +1040,9 @@ wxDlgProc(HWND hDlg,
// under CE, add a "Ok" button in the dialog title bar and make it full // under CE, add a "Ok" button in the dialog title bar and make it full
// screen // screen
// //
// VZ: we should probably allow for overriding this, e.g. by including // TODO: find the window for this HWND, and take into account
// MAXIMIZED flag in the dialog style by default and doing this // wxMAXIMIZE and wxCLOSE_BOX. For now, assume both are present.
// only if it is present... //
// Standard SDK doesn't have aygshell.dll: see // Standard SDK doesn't have aygshell.dll: see
// include/wx/msw/wince/libraries.h // include/wx/msw/wince/libraries.h
#if defined(__WXWINCE__) && !defined(__WINCE_STANDARDSDK__) && !defined(__HANDHELDPC__) #if defined(__WXWINCE__) && !defined(__WINCE_STANDARDSDK__) && !defined(__HANDHELDPC__)