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