]> git.saurik.com Git - wxWidgets.git/blame - docs/html/faqmsw.htm
changed to behave in same way as native win32 control and generic wxListCtrl when...
[wxWidgets.git] / docs / html / faqmsw.htm
CommitLineData
ce3ed50d
JS
1<HTML>
2
3<HEAD>
c140b7e7 4<TITLE>wxWidgets 2 for Windows FAQ</TITLE>
ce3ed50d
JS
5</HEAD>
6
4e4dc03d 7<BODY BGCOLOR=#FFFFFF TEXT=#000000 VLINK="#00376A" LINK="#00529C" ALINK="#313063">
ce3ed50d
JS
8
9<font face="Arial, Lucida Sans, Helvetica">
10
4e4dc03d 11<table width=100% border=0 cellpadding=3 cellspacing=0>
ce3ed50d 12<tr>
4e4dc03d
JS
13<td bgcolor="#004080" align=left height=24 background="images/bluetitlegradient.gif">
14<font size=+1 face="Arial, Lucida Sans, Helvetica" color="#FFFFFF">
c140b7e7 15<b>wxWidgets 2 for Windows FAQ</b>
ce3ed50d
JS
16</font>
17</td>
18</tr>
19</table>
20
21<P>
22
23See also <a href="faq.htm">top-level FAQ page</a>.
24<hr>
8b283bb8
JS
25<h3>List of questions in this category</h3>
26<ul>
27<li><a href="#platforms">Which Windows platforms are supported?</a></li>
28<li><a href="#wince">What about Windows CE?</a></li>
4e4dc03d 29<li><a href="#winxp">What do I need to do for Windows XP?</a></li>
8b283bb8 30<li><a href="#compilers">What compilers are supported?</a></li>
c140b7e7 31<li><a href="#bestcompiler">Which is the best compiler to use with wxWidgets 2?</a></li>
8b283bb8 32<li><a href="#unicode">Is Unicode supported?</a></li>
c140b7e7
JS
33<li><a href="#doublebyte">Does wxWidgets support double byte fonts (Chinese/Japanese/Korean etc.)?</a></li>
34<li><a href="#dll">Can you compile wxWidgets 2 as a DLL?</a></li>
8b283bb8 35<li><a href="#exesize">How can I reduce executable size?</a></li>
c140b7e7 36<li><a href="#mfc">Is wxWidgets compatible with MFC?</a></li>
eb269381 37<li><a href="#setuph">Why do I get errors about setup.h not being found?</a></li>
4f3b37fd 38<li><a href="#asuffix">Why do I get errors about FooBarA when I only use FooBar in my program?</a></li>
8b283bb8 39<li><a href="#newerrors">Why my code fails to compile with strange errors about new operator?</a></li>
c140b7e7 40<li><a href="#mfcport">How do I port MFC applications to wxWidgets?</a></li>
8b283bb8 41<li><a href="#crash">Why do I sometimes get bizarre crash problems using VC++ 5/6?</a></li>
c140b7e7
JS
42<li><a href="#makefiles">How are the wxWidgets makefiles edited under Windows?</a></li>
43<li><a href="#vcdebug">How do you use VC++&#39;s memory leak checking instead of that in wxWidgets?</a></li>
8b283bb8 44<li><a href="#shortcutproblem">Why are menu hotkeys or shortcuts not working in my application?</a></li>
4e4dc03d 45<li><a href="#regconfig">Why can I not write to the HKLM part of the registry with wxRegConfig?</a></li>
c2d48b36 46<li><a href="#access">Is MS Active Accessibility supported?</a></li>
6f92b0bb
JS
47<li><a href="#dspfmt">Why does Visual C++ complain about corrupted project files??</a></li>
48<li><a href="#crtmismatch">Visual C++ gives errors about multiply defined symbols, what can I do?</a></li>
8b283bb8
JS
49</ul>
50<hr>
ce3ed50d 51
8b283bb8 52<h3><a name="platforms">Which Windows platforms are supported?</a></h3>
ce3ed50d 53
c140b7e7 54wxWidgets 2 can be used to develop and deliver applications on Windows 3.1, Win32s,
4e4dc03d
JS
55Windows 95, Windows 98, Windows NT, Windows 2000, and Windows XP. A Windows CE
56version is being looked into (see below).<P>
b953bdc2 57
c140b7e7 58wxWidgets 2 is designed to make use of WIN32 features and controls. However, unlike Microsoft,
b953bdc2 59we have not forgotten users of 16-bit Windows. Most features
ce3ed50d 60work under Windows 3.1, including wxTreeCtrl and wxListCtrl using the generic implementation.
8b283bb8
JS
61However, don&#39;t expect very Windows-95-specific classes to work, such as wxTaskBarIcon. The wxRegConfig
62class doesn&#39;t work either because the Windows 3.1 registry is very simplistic. Check out the 16-bit
ce3ed50d
JS
63makefiles to see what other files have been left out.
64<P>
6516-bit compilation is supported under Visual C++ 1.5, and Borland BC++ 4 to 5.
66<P>
67
c140b7e7 68wxWidgets 2 for Windows will also compile on Unix with gcc using Wine from <a href="http://www.winehq.org" target=_top>WineHQ</a>.
b39dbf34 69The resulting executables are Unix binaries that work with the Wine Windows API emulator.<P>
b953bdc2 70
c140b7e7 71You can also compile wxWidgets 2 for Windows on Unix with Cygwin or Mingw32, resulting
b953bdc2 72in executables that will run on Windows. So in theory you could write your applications
c140b7e7 73using wxGTK or wxMotif, then check/debug your wxWidgets for Windows
b39dbf34 74programs with Wine, and finally produce an ix86 Windows executable using Cygwin/Mingw32,
b953bdc2
JS
75without ever needing a copy of Microsoft Windows. See the Technical Note on the Web site detailing cross-compilation.<P>
76
8b283bb8 77<h3><a name="wince">What about Windows CE?</a></h3>
b953bdc2 78
6f92b0bb 79This port is largely complete. For further information, see the <a href="http://www.wxwidgets.org/embedded.htm#wxwince">wxEmbedded</a> page.<P>
b953bdc2 80
4e4dc03d
JS
81<h3><a name="winxp">What do I need to do for Windows XP?</a></h3>
82
83In the same directory as you have your executable (e.g. foo.exe) you
84put a file called foo.exe.manifest in which you have something like
85the following:
86
87<pre>
88&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
89&lt;assembly
90 xmlns="urn:schemas-microsoft-com:asm.v1"
91 manifestVersion="1.0"&gt;
92&lt;assemblyIdentity
93 processorArchitecture="x86"
94 version="5.1.0.0"
95 type="win32"
96 name="foo.exe"/&gt;
97 &lt;description&gt;Foo program&lt;/description&gt;
98 &lt;dependency&gt;
99 &lt;dependentAssembly&gt;
100 &lt;assemblyIdentity
101 type="win32"
102 name="Microsoft.Windows.Common-Controls"
103 version="6.0.0.0"
104 publicKeyToken="6595b64144ccf1df"
105 language="*"
106 processorArchitecture="x86"/&gt;
107 &lt;/dependentAssembly&gt;
108 &lt;/dependency&gt;
109&lt;/assembly&gt;
110</pre>
111
c2d48b36
JS
112If you want to add it to your application permanently,
113you can also include it in your .rc file using this
114line:<P>
115
116<PRE>
117 1 24 "winxp.manifest"
118</PRE>
119
c140b7e7 120In wxWidgets 2.5, this will be in the wx/msw/wx.rc and
c2d48b36
JS
121so will happen automatically so long as you include wx.rc
122in your own .rc file.<P>
123
124For an explanation of this syntax, please see
125<a href="http://delphi.about.com/library/bluc/text/uc111601a.htm" target=_new>this
126article</a>.
127<P>
128
8b283bb8 129<h3><a name="compilers">What compilers are supported?</a></h3>
ce3ed50d 130
c140b7e7 131Please see the wxWidgets 2 for Windows install.txt file for up-to-date information, but
ce3ed50d
JS
132currently the following are known to work:<P>
133
134<ul>
d61c1a6f
JS
135<li>Visual C++ 1.5, 4.0, 5.0, 6.0, 7.0, 7.1
136<li>Borland C++ 4.5, 5.0, 5.5
137<li>Borland C++Builder 1.0, 3.0, X
138<li>Watcom C++ 10.6 (Win32), OpenWatcom 1.0
139<li>Cygwin (using configure)
ce3ed50d 140<li>Mingw32
d61c1a6f
JS
141<li>MetroWerks CodeWarrior (many versions)
142<li>Digital Mars 8.34+
ce3ed50d
JS
143</ul>
144<P>
145
ce3ed50d 146
c140b7e7 147<h3><a name="bestcompiler">Which is the best compiler to use with wxWidgets 2?</a></h3>
ce3ed50d 148
8b283bb8
JS
149It&#39;s partly a matter of taste, but I (JACS) prefer Visual C++ since the debugger is very
150good, it&#39;s very stable, the documentation is extensive, and it generates small executables.
151Since project files are plain text, it&#39;s easy for me to generate appropriate project files
c140b7e7 152for wxWidgets samples.<P>
ce3ed50d 153
8b283bb8
JS
154Borland C++ is fine - and very fast - but it&#39;s hard (impossible?) to use the debugger without using project files, and
155the debugger is nowhere near up to VC++&#39;s quality. The IDE isn&#39;t great.<P>
ce3ed50d 156
c140b7e7
JS
157C++Builder&#39;s power isn&#39;t really used with wxWidgets since it needs integration with its
158own class library (VCL). For wxWidgets, I&#39;ve only used it with makefiles, in which case
8b283bb8 159it&#39;s almost identical to BC++ 5.0 (the same makefiles can be used).<P>
ce3ed50d 160
8b283bb8 161You can&#39;t beat Cygwin&#39;s price (free), and you can debug adequately using gdb. However, it&#39;s
ce3ed50d
JS
162quite slow to compile since it does not use precompiled headers.<P>
163
164CodeWarrior is cross-platform - you can debug and generate Windows executables from a Mac, but not
165the other way around I think - but the IDE is, to my mind, a bit primitive.<P>
166
8b283bb8 167Watcom C++ is a little slow and the debugger is not really up to today&#39;s standards.<P>
ce3ed50d 168
8b283bb8
JS
169Among the free compilers the best choice seem to be Borland C++ command line
170tools and mingw32 (port of gcc to Win32). Both of them are supported by
c140b7e7 171wxWidgets.
ce3ed50d 172
8b283bb8 173<h3><a name="unicode">Is Unicode supported?</a></h3>
ce3ed50d 174
d61c1a6f
JS
175Yes, Unicode is fully supported under Windows NT/2000 and there is limited
176support for it under Windows 9x using <a
177href="http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx">MSLU</a>.
178<p>
ce3ed50d 179
c140b7e7 180<h3><a name="doublebyte">Does wxWidgets support double byte fonts (Chinese/Japanese/Korean etc.)?</a></h3>
4e4dc03d 181
c140b7e7 182For Japanese under Win2000, it seems that wxWidgets has no problems to work
d61c1a6f
JS
183with double byte char sets (meaning DBCS, not Unicode). First you have to
184install Japanese support on your Win2K system and choose for ANSI translation
185<tt>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage=932</tt>
186(default is 1252 for Western). Then you can see all the Japanese letters in
c140b7e7 187wxWidgets applications.
d61c1a6f 188<p>
4e4dc03d 189
c140b7e7 190<h3><a name="dll">Can you compile wxWidgets 2 as a DLL?</a></h3>
ce3ed50d 191
9838df2c 192Yes (using the Visual C++ or Borland C++ makefile), but be aware that distributing DLLs is a thorny issue
8b283bb8 193and you may be better off compiling statically-linked applications, unless you&#39;re
c140b7e7 194delivering a suite of separate programs, or you&#39;re compiling a lot of wxWidgets applications
b953bdc2
JS
195and have limited hard disk space.<P>
196
c140b7e7 197With a DLL approach, and with different versions and configurations of wxWidgets
b953bdc2
JS
198needing to be catered for, the end user may end up with a host of large DLLs in his or her Windows system directory,
199negating the point of using DLLs. Of course, this is not a problem just associated with
c140b7e7 200wxWidgets!
b953bdc2
JS
201<P>
202
8b283bb8 203<h3><a name="exesize">How can I reduce executable size?</a></h3>
9838df2c 204
c140b7e7 205You can compile wxWidgets as a DLL (see above, VC++/BC++ only at present). You should also
0bc9b25e
JS
206compile your programs for release using non-debugging and space-optimisation options, but
207take with VC++ 5/6 space optimisation: it can sometimes cause problems.<P>
9838df2c 208
9838df2c 209If you want to distribute really small executables, you can
4e4dc03d 210use <a href="http://www.un4seen.com/petite/" target=_top>Petite</a>
9838df2c
JS
211by Ian Luck. This nifty utility compresses Windows executables by around 50%, so your 500KB executable
212will shrink to a mere 250KB. With this sort of size, there is reduced incentive to
c2d48b36 213use DLLs. Another good compression tool (probably better than Petite) is <a href="http://upx.sourceforge.net/" target=_top>UPX</a>.
4e4dc03d 214<P>
9838df2c 215
2b5f62a0
VZ
216Please do not be surprised if MinGW produces a statically-linked minimal executable of 1 MB. Firstly, gcc
217produces larger executables than some compilers. Secondly, this figure will
c140b7e7 218include most of the overhead of wxWidgets, so as your application becomes more
c2d48b36 219complex, the overhead becomes proportionally less significant. And thirdly, trading executable compactness
c140b7e7 220for the enormous increase in productivity you get with wxWidgets is almost always well worth it.<P>
c2d48b36
JS
221
222If you have a really large executable compiled with MinGW (for example 20MB) then
c140b7e7 223you need to configure wxWidgets to compile without debugging information: see
c2d48b36
JS
224docs/msw/install.txt for details. You may find that using configure instead
225of makefile.g95 is easier, particularly since you can maintain debug and
226release versions of the library simultaneously, in different directories.
227Also, run 'strip' after linking to remove all traces of debug info.
228<P>
2b5f62a0 229
c140b7e7 230<H3><a name="mfc">Is wxWidgets compatible with MFC?</a></H3>
b953bdc2 231
c140b7e7
JS
232There is a sample which demonstrates MFC and wxWidgets code co-existing in the same
233application. However, don&#39;t expect to be able to enable wxWidgets windows with OLE-2
b953bdc2 234functionality using MFC.<P>
ce3ed50d 235
eb269381
JS
236<H3><a name="setuph">Why do I get errors about setup.h not being found?</a></H3>
237
c140b7e7 238When you build the wxWidgets library, setup.h is copied
eb269381 239from include/wx/msw/setup.h to e.g. lib/mswd/wx/setup.h (the path
d61c1a6f 240depends on the configuration you&#39;re building). So you need to add
eb269381
JS
241this include path if building using the static Debug library:<P>
242
243lib/mswd<P>
244
245or if building the static Release library, lib/msw.<P>
246
6f92b0bb 247See also the <a href="http://wiki.wxwidgets.org/wiki.pl?Table_Of_Contents">wxWiki Contents</a>
eb269381
JS
248for more information.<P>
249
250
4f3b37fd
JS
251<H3><a name="asuffix">Why do I get errors about FooBarA when I only use FooBar in my program?</H3>
252
253If you get errors like
254<p>
255<center>
256<tt>no matching function for call to &#39;wxDC::DrawTextA(const char[5], int,
257int)&#39;</tt>
258</center>
259<p>
260or similar ones for the other functions, i.e. the compiler error messages
261mention the function with the <tt>&#39;A&#39;</tt> suffix while you didn&#39;t
262use it in your code, the explanation is that you had included
263<tt>&#60;windows.h&#062;</tt> header which redefines many symbols to have such
264suffix (or <tt>&#39;W&#39;</tt> in the Unicode builds).
265
266<p>
267The fix is to either not include <tt>&#60;windows.h&#62;</tt> at all or include
268<tt>"wx/msw/winundef.h"</tt> immediately after it.
269
8b283bb8
JS
270<H3><a name="newerrors">Why my code fails to compile with strange errors about new operator?</a></H3>
271
272The most common cause of this problem is the memory debugging settings in
273<tt>wx/msw/setup.h</tt>. You have several choices:
274
275<ul>
276 <li> Either disable overloading the global operator new completely by
277 setting <tt>wxUSE_GLOBAL_MEMORY_OPERATORS</tt> and
278 <tt>wxUSE_DEBUG_NEW_ALWAYS</tt> to 0 in this file
279 <li> Or leave them on but do <tt>#undef new</tt> after including any
c140b7e7
JS
280 wxWidgets headers, like this the memory debugging will be still on
281 for wxWidgets sources but off for your own code
8b283bb8
JS
282</ul>
283
284Notice that IMHO the first solution is preferable for VC++ users who can use
285the <a href="#vcdebug">VC++ CRT memory debugging features</a> instead.
286
c140b7e7 287<H3><a name="mfcport">How do I port MFC applications to wxWidgets?</a></H3>
8b283bb8 288
c140b7e7 289Set up your interface from scratch using wxWidgets (especially <a href="http://www.robeling.de" target=_top>wxDesigner</a>
eb269381 290or <a href="http://www.anthemion.co.uk/dialogblocks/" target=_new>DialogBlocks</a> --
8b283bb8
JS
291it&#39;ll save you a <i>lot</i> of time) and when you have a shell prepared, you can start
292&#39;pouring in&#39; code from the MFC app, with appropriate
293modifications. This is the approach I have used, and I found
294it very satisfactory. A two-step process then - reproduce the bare
295interface first, then wire it up afterwards. That way you deal
296with each area of complexity separately. Don&#39;t try to think MFC
c140b7e7 297and wxWidgets simultaneously from the beginning - it is easier to
8b283bb8
JS
298reproduce the initial UI by looking at the behaviour of the MFC
299app, not its code.
300
301<H3><a name="crash">Why do I sometimes get bizarre crash problems using VC++ 5/6?</a></H3>
ad813b00
JS
302
303Some crash problems can be due to inconsistent compiler
c140b7e7 304options (and of course this isn&#39;t limited to wxWidgets).
ad813b00
JS
305If strange/weird/impossible things start to happen please
306check (dumping IDE project file as makefile and doing text comparison
307if necessary) that the project settings, especially the list of defined
308symbols, struct packing, etc. are exactly the same for all items in
309the project. After this, delete everything (including PCH) and recompile.<P>
310
8b283bb8 311VC++ 5&#39;s optimization code seems to be broken and can
ad813b00
JS
312cause problems: this can be seen when deleting an object Dialog
313Editor, in Release mode with optimizations on. If in doubt,
314switch off optimisations, although this will result in much
315larger executables. It seems possible that the library can be created with
316strong optimization, so long as the application is not strongly
c140b7e7 317optimized. For example, in wxWidgets project, set to &#39;Minimum
8b283bb8
JS
318Size&#39;. In Dialog Editor project, set to &#39;Customize: Favor Small
319Code&#39; (and no others). This will then work.<P>
ad813b00 320
c140b7e7 321<H3><a name="makefiles">How are the wxWidgets makefiles edited under Windows?</a></H3>
91c93c99 322
c140b7e7 323As of wxWidgets 2.1, there is a new system written by Vadim Zeitlin, that
91c93c99
JS
324generates the makefiles from templates using tmake.<P>
325
8b283bb8 326Here are Vadim&#39;s notes:<P>
91c93c99
JS
327
328<blockquote>
8b283bb8 329To use these new makefiles, you don&#39;t need anything (but see below).
91c93c99
JS
330However, you should NOT modify them because these files will be
331rewritten when I regenerate them using tmake the next time. So, if
332you find a problem with any of these makefiles (say, makefile.b32)
8b283bb8 333you&#39;ll need to modify the corresponding template (b32.t in this
91c93c99
JS
334example) and regenerate the makefile using tmake.<P>
335
336tmake can be found at
337<a href="http://www.troll.no/freebies/tmake.html" target=_new>www.troll.no/freebies/tmake.html</a>.
6f92b0bb 338It&#39;s a Perl5 program and so it needs Perl (doh). There is a binary for
8b283bb8
JS
339Windows (available from the same page), but I haven&#39;t used it, so
340I don&#39;t know if it works as flawlessly as "perl tmake" does (note
341for people knowing Perl: don&#39;t try to run tmake with -w, it won&#39;t
91c93c99
JS
342do you any good). Using it extremely simple: to regenerate makefile.b32
343just go to distrib/msw/tmake and type<P>
344
345<pre>tmake -t b32 wxwin.pro -o ../../src/msw/makefile.b32</pre><P>
346
6f92b0bb 347The makefiles are untested - I don&#39;t have any of Borland, Watcom or
8b283bb8 348Symantec and I don&#39;t have enough diskspace to recompile even with
91c93c99
JS
349VC6 using makefiles. The new makefiles are as close as possible to the
350old ones, but not closer: in fact, there has been many strange things
351(should I say bugs?) in some of makefiles, some files were not compiled
352without any reason etc. Please test them and notify me about any problems.
353Better yet, modify the template files to generate the correct makefiles
354and check them in.<P>
355
356The templates are described in tmake ref manual (1-2 pages of text)
357and are quite simple. They do contain some Perl code, but my Perl is
358primitive (very C like) so it should be possible for anybody to make
359trivial modifications to it (I hope that only trivial modifications
cd508246 360will be needed). I&#39;ve tagged the ol makefiles as MAKEFILES_WITHOUT_TMAKE
91c93c99
JS
361in the cvs, so you can always retrieve them and compare the new ones,
362this will make it easier to solve the problems you might have.<P>
363
364Another important file is filelist.txt: it contains the list of all
365files to be compiled. Some of them are only compiled in 16/32 bit mode.
8b283bb8 366Some other are only compiled with some compilers (others can&#39;t compile
91c93c99
JS
367them) - all this info is contained in this file.<P>
368
c140b7e7 369So now adding a new file to wxWidgets is as easy as modifying filelist.txt
91c93c99
JS
370(and Makefile.ams for Unix ports) and regenerating the makefiles - no
371need to modify all files manually any more.<P>
372
373 Finally, there is also a file vc6.t which I use myself: this one
8b283bb8
JS
374generates a project file for VC++ 6.0 (I didn&#39;t create vc5.t because
375I don&#39;t need it and can&#39;t test it, but it should be trivial to create
91c93c99 376one from vc6.t - probably the only things to change would be the
8b283bb8 377version number in the very beginning and the /Z option - VC5 doesn&#39;t
91c93c99 378support edit-and=continue). This is not an officially supported way
c140b7e7 379of building wxWidgets (that is, nobody guarantees that it will work),
91c93c99 380but it has been very useful to me and I hope it will be also for
c140b7e7 381others. To generate wxWidgets.dsp run<P>
91c93c99 382
c140b7e7 383<pre>tmake -t vc6 wxwin.pro -o ../../wxWidgets.dsp</pre><P>
91c93c99
JS
384
385Then just include this project in any workspace or open it from VC IDE
386and it will create a new workspace for you.<P>
387
8b283bb8 388If all goes well, I&#39;m planning to create a template file for Makefile.ams
91c93c99
JS
389under src/gtk and src/motif and also replace all makefiles in the samples
390subdirectories with the project files from which all the others will be
391generated. At least it will divide the number of files in samples
392directory by 10 (and the number of files to be maintained too).
393</blockquote>
ce3ed50d 394
f6081a04
JS
395<P>
396
c140b7e7 397<H3><a name="vcdebug">How do you use VC++&#39;s memory leak checking instead of that in wxWidgets?</a></H3>
f6081a04
JS
398
399Vadim Zeitlin:
400
401<pre>
8b283bb8 402On the VC++ level, it&#39;s just the matter of calling _CrtSetDbgFlag() in the very
c140b7e7 403beginning of the program. In wxWidgets, this is done automatically when
f6081a04
JS
404compiling with VC++ in debug mode unless wxUSE_GLOBAL_MEMORY_OPERATORS or
405__NO_VC_CRTDBG__ are defined - this check is done in wx/msw/msvcrt.h which
406is included from app.cpp which then calls wxCrtSetDbgFlag() without any
8b283bb8 407ifdefs.
f6081a04
JS
408
409This works quite well: at the end of the program, all leaked blocks with their
410malloc count are shown. This number (malloc count) can be used to determine
8b283bb8 411where exactly the object was allocated: for this it&#39;s enough to set the variable
f6081a04
JS
412_crtBreakAlloc (look in VC98\crt\srs\dbgheap.c line 326) to this number and
413a breakpoint will be triggered when the block with this number is allocated.
414
415For simple situations it works like a charm. For something more complicated
416like reading uninitialized memory a specialized tool is probably better...
417
418Regards,
419VZ
420</pre>
421
8b283bb8
JS
422<P>
423
424<H3><a name="shortcutproblem">Why are menu hotkeys or shortcuts not working in my application?</a></H3>
425
426This can happen if you have a child window intercepting EVT_CHAR events and swallowing
427all keyboard input. You should ensure that event.Skip() is called for all input that
2b5f62a0
VZ
428isn&#39;used by the event handler.<P>
429
430It can also happen if you append the submenu to the parent
431menu {\it before} you have added your menu items. Do the append {\it after} adding
432your items, or accelerators may not be registered properly.<P>
8b283bb8 433
4e4dc03d
JS
434<H3><a name="#regconfig">Why can I not write to the HKLM part of the registry with wxRegConfig?</a></H3>
435
436Currently this is not possible because the wxConfig family of classes is
437supposed to deal with per-user application configuration data, and HKLM is
438only supposed to be writeable by a user with Administrator privileges. In theory,
439only installers should write to HKLM. This is still a point debated by the
c140b7e7 440wxWidgets developers. There are at least two ways to work around it if you really
4e4dc03d
JS
441need to write to HKLM.<P>
442
443First, you can use wxRegKey directly, for example:
444
445<pre>
446 wxRegKey regKey;
447
448 wxString idName(wxT("HKEY_LOCAL_MACHINE\\SOFTWARE\\My Company\\My Product\\Stuff\\"));
449 idName += packid;
450
451 regKey.SetName(idName);
452
453 {
6f92b0bb 454 wxLogNull dummy;
4e4dc03d
JS
455 if (!regKey.Create())
456 {
457 idName = wxT("HKEY_CURRENT_USER\\SOFTWARE\\My Company\\My Product\\Stuff\\");
458 idName += packid;
459 regKey.SetName(idName);
460 if (!regKey.Create())
461 return FALSE;
462 }
463 }
464
465 if (!regKey.SetValue(wxT("THING"), (long) thing)) err += 1;
466
467 regKey.Close();
468
469</pre>
470
471Or, you can employ this trick suggested by Istvan Kovacs:
472
473<pre>
474class myGlobalConfig : public wxConfig
475{
476 myGlobalConfig() :
477 wxConfig ("myApp", "myCompany", "", "", wxCONFIG_USE_GLOBAL_FILE)
478{};
479 bool Write(const wxString& key, const wxString& value);
480}
481
482bool myGlobalConfig::Write (const wxString& key, const wxString& value)
483{
484 wxString path = wxString ("SOFTWARE\\myCompany\\myApp\\") + wxPathOnly(key);
485 wxString new_path = path.Replace ("/", "\\", true);
486 wxString new_key = wxFileNameFromPath (key);
487 LocalKey().SetName (wxRegKey::HKLM, path);
488 return wxConfig::Write (new_key, value);
489}
490</pre>
f6081a04 491
c2d48b36
JS
492<H3><a name="#access">Is MS Active Accessibility supported?</a></H3>
493
6f92b0bb 494This is being worked on. Please see <a href="http://www.wxwidgets.org/access.htm">this page</a>
c2d48b36
JS
495for the current status.
496
497<P>
498
d61c1a6f 499
6f92b0bb 500<h3><a name="#dspfmt">Why does Visual C++ complain about corrupted project files??</a></h3>
d61c1a6f 501
c140b7e7 502If you have downloaded the wxWidgets sources from the cvs using a Unix cvs
d61c1a6f
JS
503client or downloaded a daily snapshot in <tt>.tar.gz</tt> format, it is likely
504that the project files have Unix line endings (LF) instead of the DOS ones (CR
505LF). However all versions of Visual C++ up to and including 7.1 can only open
506the files with the DOS line endings, so you must transform the files to this
507format using any of the thousands ways to do it.
508<p>
509Of course, another possibility is to always use only the Windows cvs client
510and to avoid this problem completely.
511<p>
512
6f92b0bb
JS
513<h3><a name="#crtmismatch">Visual C++ gives errors about multiply defined symbols, what can I do?</a></h3>
514
515If you get errors like this
516
517<pre>
518MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _xxxxxx already defined in LIBCD.lib(yyyyy.obj)
519</pre>
520
521when linking your project, this means that you used different versions of CRT
522(C Run-Time) library for wxWindows (or possibly another library) and the main
523project. Visual C++ provides static or dynamic and multithread safe or not
524versions of CRT for each of debug and release builds, for a total of 8
525libraries. You can choose among them by going to the "Code generation"
526page/subitem of the "C++" tab/item in the project proprieties dialog in VC6/7.
527<p>
528To avoid problems, you <strong>must</strong> use the same one for all
529components of your project. wxWindows uses multithread safe DLL version of the
530CRT which is a good choice but may be problematic when distributing your
531applications if you don&#39;t include the CRT DLL in your installation -- in this
532case you may decide to switch to using a static CRT version. If you build with
533<tt>wxUSE_THREADS == 0</tt> you may also use the non MT-safe version as it is
534slightly smaller and faster.
535<p>
536But the most important thing is to use the <strong>same</strong> CRT setting for
537all components of your project.
538
ce3ed50d
JS
539</font>
540
541</BODY>
542
543</HTML>