]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/wxmsw.tex
Updated symbols
[wxWidgets.git] / docs / latex / wx / wxmsw.tex
CommitLineData
b75b6d4c
RR
1\section{wxMSW port}\label{wxmswport}
2
fc2171bd 3wxMSW is a port of wxWidgets for the Windows platforms
298fe32f 4including Windows 95, 98, ME, 2000, NT, XP in ANSI and
b75b6d4c
RR
5Unicode mode (for Windows 95 through the MSLU extension
6library). wxMSW ensures native look and feel for XP
fc2171bd 7as well when using wxWidgets version 2.3.3 or higher.
b75b6d4c
RR
8wxMSW can be compile with a great variety of compilers
9including MS VC++, Borland 5.5, MinGW32, Cygwin and
10Watcom as well as cross-compilation with a Linux hosted
11MinGW32 tool chain.
12
298fe32f
JS
13For further information, please see the files in docs/msw
14in the distribution.
15
9ceeecb9
JS
16\subsection{wxWinCE}\label{wxwince}
17
18wxWinCE is the name given to wxMSW when compiled on Windows CE devices;
19most of wxMSW is common to Win32 and Windows CE but there are
20some simplifications, enhancements, and differences in
21behaviour.
22
23For installation instructions, see docs/msw/wince in the
24distribution. The rest of this section documents issues you
25need to be aware of when programming for Windows CE devices.
26
27\subsubsection{General issues for wxWinCE programming}
28
29Mobile applications generally have fewer features and
30simpler user interfaces. Simply omit whole sizers, static
31lines and controls in your dialogs, and use comboboxes instead
32of listboxes where appropriate. You also need to reduce
33the amount of spacing used by sizers, for which you can
34use a macro such as this:
35
36\begin{verbatim}
37#if defined(__WXWINCE__
38 #define wxLARGESMALL(large,small) small
39#else
40 #define wxLARGESMALL(large,small) large
41#endif
42
43// Usage
44topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) );
45\end{verbatim}
46
47There is only ever one instance of a Windows CE application running,
48and wxWidgets will take care of showing the current instance and
49shutting down the second instance if necessary.
50
51You can test the return value of wxSystemSettings::GetScreenType()
52for a qualitative assessment of what kind of display is available,
53or use wxGetDisplaySize() if you need more information.
54
55See the "Life!" example (demos/life) for an example of
56an application that has been tailored for Windows CE use.
57
58\subsubsection{Testing for WinCE SDKs}
59
b669780b 60Use these preprocessor symbols to test for the different types of device or SDK:
9ceeecb9
JS
61
62\begin{twocollist}\itemsep=0pt
b669780b
JS
63\twocolitem{\_\_SMARTPHONE\_\_}{Generic mobile devices with phone buttons and a small display}
64\twocolitem{\_\_PDA\_\_}{Generic mobile devices with no phone}
65\twocolitem{\_\_HANDHELDPC\_\_}{Generic mobile device with a keyboard}
9ceeecb9 66\twocolitem{\_\_WXWINCE\_\_}{Microsoft-powered Windows CE devices, whether PocketPC, Smartphone or Standard SDK}
b669780b 67\twocolitem{WIN32\_PLATFORM\_WFSP}{Microsoft-powered smartphone}
9ceeecb9
JS
68\twocolitem{\_\_POCKETPC\_\_}{Microsoft-powered PocketPC devices with touch-screen}
69\twocolitem{\_\_WINCE\_STANDARDSDK\_\_}{Microsoft-powered Windows CE devices, for generic Windows CE applications}
70\twocolitem{\_\_WINCE\_NET\_\_}{Microsoft-powered Windows CE .NET devices (\_WIN32\_WCE is 400 or greater)}
71\end{twocollist}
72
73\subsubsection{Window sizing in wxWinCE}
74
75When creating frames and dialogs, create them with wxDefaultPosition and
76wxDefaultSize, which will tell WinCE to create them full-screen.
77
78Don't call Fit() and Centre(), so the content sizes to
79the window rather than fitting the window to the content. (We really need a single API call
80that will do the right thing on each platform.)
81
82If the screen orientation changes, the windows will automatically be resized
83so no further action needs to be taken (unless you want to change the layout
84according to the orientation, which you could detect in idle time, for example).
85However, if the input panel (SIP) is shown, windows do not yet resize accordingly. This will
86be implemented soon.
87
88\subsubsection{Dialogs in wxWinCE}
89
90PocketPC dialogs have an OK button on the caption, and so you should generally
91not repeat an OK button on the dialog. You can add a Cancel button if necessary, but some dialogs
92simply don't offer you the choice (the guidelines recommend you offer an Undo facility
93to make up for it). When the user clicks on the OK button, your dialog will receive
94a wxID\_OK event by default. If you wish to change this, call wxDialog::SetAffirmativeId
95with the required identifier to be used. Or, override wxDialog::DoOK (return false to
96have wxWidgets simply call Close to dismiss the dialog).
97
98Smartphone dialogs do {\it not} have an OK button on the caption, and are closed
99using one of the two menu buttons. You need to assign these using wxTopLevelWindow::SetLeftMenu
100and wxTopLevelWindow::SetRightMenu, for example:
101
102\begin{verbatim}
103#ifdef __SMARTPHONE__
104 SetLeftMenu(wxID_OK);
105 SetRightMenu(wxID_CANCEL, _("Cancel"));
106#elif defined(__POCKETPC__)
107 // No OK/Cancel buttons on PocketPC, OK on caption will close
108#else
109 topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxEXPAND | wxALL, 10 );
110#endif
111\end{verbatim}
112
113For implementing property sheets (flat tabs), use a wxNotebook with wxNB_FLAT|wxNB_BOTTOM
114and have the notebook left, top and right sides overlap the dialog by about 3 pixels
115to eliminate spurious borders. You can do this by using a negative spacing in your
116sizer Add() call. A cross-platform property sheet dialog will be implemented in the
117future, so you only need to provide the dialog's pages.
118
119Notifications (bubble HTML text with optional buttons and links) will also be
120implemented in the future for PocketPC.
121
122\subsubsection{Menubars and toolbars in wxWinCE}
123
124Menubars and toolbars can only be implemented using a combined control,
125but you can use the same syntax as before; wxWidgets will combine the menubar
126and toolbar. However, you cannot at present use arbitrary toolbar bitmaps
127(since they have to be loaded from a Windows resource), so only standard
128identifiers will work (wxID\_OPEN, wxID\_SAVE, wxID\_COPY and so on).
129
130The wxWidgets API doesn't currently provide us with a method of passing resource
131identifiers to AddTool, which is something that needs to be addressed.
132
133On PocketPC, a frame must always have a menubar, even if it's empty.
134
135On Smartphone, there are only two menu buttons, so a menubar is simulated
136using a nested menu on the right menu button.
137
138\subsubsection{Closing windows in wxWinCE}
139
140The guidelines state that applications should not have a Quit menu item,
141since the user should not have to know whether an application is in memory
142or not. The close button on a window does not call the window's
143close handler; it simply hides the window. However, the guidelines say that
144the Ctrl+Q accelerator can be used to quit the application, so wxWidgets
145defines this accelerator by default and if your application handles
146wxID\_EXIT, it will do the right thing.
147
148\subsubsection{Control differences on wxWinCE}
149
150This section is to be written.
151
152Can someone remind us why wxChoice was rewritten for Smartphone?
153
154\subsubsection{Online help in wxWinCE}
155
156You can use the help controller wxWinceHelpController which controls
157simple {\tt .htm} files, usually installed in the Windows directory.
158
159\subsubsection{Remaining issues}
160
161These are some of the remaining problems to be sorted out, and features
162to be supported.
163
164\itemsep=0pt
165\begin{itemize}
166\item {\bf Custom toolbar buttons.} The bitmaps could be loaded from a resource
167named using the string normally used for a tool caption. Currently only buttons with
168standard identifiers can be used.
169\item {\bf Font dialog.} The generic font dialog is currently used, which
170needs to be simplified (and speeded up).
171\item {\bf Sizer speed.} Particularly for dialogs containing notebooks,
172layout seems slow. Some analysis is required.
173\item {\bf Property sheets.} We should have a class for handling property sheets
174on WinCE and desktop platforms (see previous section on dialogs).
175\item {\bf Notification boxes.} The balloon-like notification messages, and their
176icons, should be implemented. This will be quite straightforward.
177\item {\bf WM\_SETTINGCHANGE.} This message needs to be handled by calling SHHandleWMSettingChange.
178\item {\bf WM\_ACTIVATE.} This message needs to be handled by calling SHHandleWMActivate.
179\item {\bf WM\_HIBERNATE.} We need to handle this message.
180\item {\bf SIP size.} We need to be able to get the area taken up by the SIP (input panel),
181and the remaining area, by calling SHSipInfo. We also may need to be able to show and hide
182the SIP programmatically, with SHSipPreference. See also the {\it Input Dialogs} topic in
183the {\it Programming Windows CE} guide for more on this, and how to have dialogs
184show the SIP automatically using the WC_SIPREF control.
185\item {\bf Drawing.} The "Life!" demo shows some droppings being left on the window,
186indicating that drawing works a bit differently between desktop and mobile versions of
187Win32.
188\item {\bf wxStaticBitmap.} The About box in the "Life!" demo shows a bitmap that is
189the correct size on the emulator, but too small on a VGA Pocket Loox device.
190\item {\bf OK button.} We should allow the OK button on a dialog to be optional, perhaps
191by using wxCLOSE\_BOX to indicate when the OK button should be displayed.
192\item {\bf Data storage.} Methods for saving data on Smartphone need to be supported and documented.
193\item {\bf Dynamic adaptation.} We should probably be using run-time tests more
194than preprocessor tests, so that the same WinCE application can run on different
195versions of the operating system.
196\item {\bf Home screen plugins.} Figure out how to make home screen plugins for use with wxWidgets
197applications (see {\tt http://www.codeproject.com/ce/CTodayWindow.asp} for inspiration).
198Although we can't use wxWidgets to create the plugin (too large), we could perhaps write
199a generic plugin that takes registry information from a given application, with
200options to display information in a particular way using icons and text from
201a specified location.
202\item {\bf Further abstraction.} We should be able to abstract away more of the differences
203between desktop and mobile applications, in particular for sizer layout.
204\end{itemize}
205