diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-06-21 07:07:03 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2017-06-21 07:07:03 +0000 |
commit | 499966b53d5b2e811b18569a1e0c5c66f7301e83 (patch) | |
tree | 7c68c70e43b42b3c6ea86df956fe4e09cd0a7cb8 /packages/ptc/src/win32/base/win32window.inc | |
parent | 35944ee1860ae65f8cd8d3dc0f56c1ba208bcc3e (diff) | |
download | fpc-499966b53d5b2e811b18569a1e0c5c66f7301e83.tar.gz |
--- Merging r34598 into '.':
U compiler/COPYING.txt
U packages/gtk2/src/glib/gparamspecs.inc
U packages/gtk2/src/gtk+/gdk/gdki18n.inc
U packages/gtk2/src/gtk+/gdk/gdkprivate.inc
U packages/gtk2/src/gtk+/gtk/gtkhsv.inc
U packages/gtk2/src/gtk+/gtk/gtkkeyhash.inc
U packages/gtk2/src/gtkext/gtkstatusiconh.inc
U packages/sdl/LGPL
U packages/googleapi/src/googlediscoverytopas.pp
U packages/googleapi/src/googlebase.pp
U packages/hermes/src/hermes_palette.inc
U packages/hermes/src/hermconf.inc
U packages/hermes/src/factconv.inc
U packages/hermes/src/p_32.inc
U packages/hermes/src/p_24.inc
U packages/hermes/src/p_16.inc
U packages/hermes/src/p_cnv.inc
U packages/hermes/src/p_g.inc
U packages/hermes/src/hermes_utility.inc
U packages/hermes/src/p_ga.inc
U packages/hermes/src/p_gca.inc
U packages/hermes/src/p_gac.inc
U packages/hermes/src/p_muhmu.inc
U packages/hermes/src/p_cpy.inc
U packages/hermes/src/hermdef.inc
U packages/hermes/src/hermes_converter.inc
U packages/hermes/src/hermes_factory.inc
U packages/hermes/src/p_gcc.inc
U packages/hermes/src/hermes_list.inc
U packages/hermes/src/hermes_clearer.inc
U packages/hermes/src/headp.inc
U packages/hermes/src/i386/mmxp2_32.inc
U packages/hermes/src/i386/x86_main.inc
U packages/hermes/src/i386/x86p_32.inc
U packages/hermes/src/i386/headi386.inc
U packages/hermes/src/i386/x86p_16.inc
U packages/hermes/src/i386/x86p_s32.inc
U packages/hermes/src/i386/x86p_cpy.inc
U packages/hermes/src/i386/mmx_clr.inc
U packages/hermes/src/i386/x8616lut.inc
U packages/hermes/src/i386/headmmx.inc
U packages/hermes/src/i386/x86pscpy.inc
U packages/hermes/src/i386/mmx_main.inc
U packages/hermes/src/i386/mmxp_32.inc
U packages/hermes/src/i386/x86_clr.inc
U packages/hermes/src/i386/x86p_i8.inc
U packages/hermes/src/hermes_dither.inc
U packages/hermes/src/x86_64/x86_64_i8.inc
U packages/hermes/src/d_32.inc
U packages/hermes/src/hermes_debug.inc
U packages/hermes/src/hermes.pp
U packages/hermes/src/hermes_format.inc
U packages/hermes/src/p_clr.inc
U packages/hermes/src/p_i8.inc
U packages/fcl-db/src/sqlite/customsqliteds.pas
U packages/fcl-db/src/sqlite/sqliteds.pas
U packages/fcl-db/src/sqlite/sqlite3ds.pas
U packages/fcl-db/src/sqldb/sqlite/sqlite3backup.pas
U packages/fcl-db/src/sqldb/postgres/pqeventmonitor.pp
U packages/fcl-db/src/sqldb/interbase/fbeventmonitor.pp
U packages/fcl-db/src/sqldb/interbase/fbadmin.pp
U packages/matroska/src/matroska.pas
U packages/ptc/src/win32/directx/win32directxcheck.inc
U packages/ptc/src/win32/directx/win32directxtranslate.inc
U packages/ptc/src/win32/directx/win32directxhook.inc
U packages/ptc/src/win32/directx/win32directxprimary.inc
U packages/ptc/src/win32/directx/win32directxhookd.inc
U packages/ptc/src/win32/directx/win32directxlibrary.inc
U packages/ptc/src/win32/directx/win32directxdisplay.inc
U packages/ptc/src/win32/directx/win32directxconsoled.inc
U packages/ptc/src/win32/directx/win32directxprimaryd.inc
U packages/ptc/src/win32/directx/win32directxlibraryd.inc
U packages/ptc/src/win32/directx/win32directxdisplayd.inc
U packages/ptc/src/win32/directx/win32directxconsolei.inc
U packages/ptc/src/win32/gdi/win32gdiconsolei.inc
U packages/ptc/src/win32/gdi/win32modesetterd.inc
U packages/ptc/src/win32/gdi/win32openglwindowd.inc
U packages/ptc/src/win32/gdi/win32dibd.inc
U packages/ptc/src/win32/gdi/win32modesetteri.inc
U packages/ptc/src/win32/gdi/win32openglwindowi.inc
U packages/ptc/src/win32/gdi/win32dibi.inc
U packages/ptc/src/win32/gdi/win32gdihookd.inc
U packages/ptc/src/win32/gdi/win32gdiconsoled.inc
U packages/ptc/src/win32/gdi/win32gdihooki.inc
U packages/ptc/src/win32/base/win32hook.inc
U packages/ptc/src/win32/base/win32kbd.inc
U packages/ptc/src/win32/base/win32mousei.inc
U packages/ptc/src/win32/base/win32hookd.inc
U packages/ptc/src/win32/base/win32kbdd.inc
U packages/ptc/src/win32/base/win32resized.inc
U packages/ptc/src/win32/base/win32window.inc
U packages/ptc/src/win32/base/win32resizei.inc
U packages/ptc/src/win32/base/win32windowd.inc
U packages/ptc/src/win32/base/win32cursor.inc
U packages/ptc/src/win32/base/win32event.inc
U packages/ptc/src/win32/base/win32cursord.inc
U packages/ptc/src/win32/base/win32eventd.inc
U packages/ptc/src/win32/base/win32cursormoded.inc
U packages/ptc/src/win32/base/win32monitor.inc
U packages/ptc/src/win32/base/win32monitord.inc
U packages/ptc/src/win32/base/win32moused.inc
U packages/ptc/src/cocoa/cocoaconsolei.inc
U packages/ptc/src/cocoa/cocoaconsoled.inc
U packages/ptc/src/ptc.pp
U packages/ptc/src/dos/textfx2/textfx2consoled.inc
U packages/ptc/src/dos/textfx2/textfx2consolei.inc
U packages/ptc/src/dos/base/mousei.inc
U packages/ptc/src/dos/base/kbdd.inc
U packages/ptc/src/dos/base/mouse33h.pp
U packages/ptc/src/dos/base/moused.inc
U packages/ptc/src/dos/base/kbd.inc
U packages/ptc/src/dos/cga/cga.pp
U packages/ptc/src/dos/cga/cgaconsoled.inc
U packages/ptc/src/dos/cga/cgaconsolei.inc
U packages/ptc/src/dos/vga/vgaconsolei.inc
U packages/ptc/src/dos/vga/vga.pp
U packages/ptc/src/dos/vga/vgaconsoled.inc
U packages/ptc/src/dos/timeunit/timeunit.pp
U packages/ptc/src/dos/vesa/vesaconsolei.inc
U packages/ptc/src/dos/vesa/vesa.pp
U packages/ptc/src/dos/vesa/vesaconsoled.inc
U packages/ptc/src/wince/gapi/wincegapiconsolei.inc
U packages/ptc/src/wince/gapi/wincegapiconsoled.inc
U packages/ptc/src/wince/gdi/wincebitmapinfoi.inc
U packages/ptc/src/wince/gdi/wincegdiconsoled.inc
U packages/ptc/src/wince/gdi/wincebitmapinfod.inc
U packages/ptc/src/wince/gdi/wincegdiconsolei.inc
U packages/ptc/src/wince/base/wincekeyboardi.inc
U packages/ptc/src/wince/base/wincewindowd.inc
U packages/ptc/src/wince/base/wincemoused.inc
U packages/ptc/src/wince/base/wincewindowi.inc
U packages/ptc/src/wince/base/wincemousei.inc
U packages/ptc/src/wince/base/wincekeyboardd.inc
U packages/ptc/src/ptcwrapper/ptcwrapper.pp
U packages/ptc/src/ptcwrapper/ptceventqueue.pp
U packages/ptc/src/core/closeeventd.inc
U packages/ptc/src/core/consolei.inc
U packages/ptc/src/core/resizeeventi.inc
U packages/ptc/src/core/closeeventi.inc
U packages/ptc/src/core/eventd.inc
U packages/ptc/src/core/moded.inc
U packages/ptc/src/core/eventi.inc
U packages/ptc/src/core/modei.inc
U packages/ptc/src/core/openglattributesd.inc
U packages/ptc/src/core/clipperd.inc
U packages/ptc/src/core/openglattributesi.inc
U packages/ptc/src/core/clipperi.inc
U packages/ptc/src/core/aread.inc
U packages/ptc/src/core/copyd.inc
U packages/ptc/src/core/log.inc
U packages/ptc/src/core/areai.inc
U packages/ptc/src/core/colord.inc
U packages/ptc/src/core/copyi.inc
U packages/ptc/src/core/timerd.inc
U packages/ptc/src/core/basesurfaced.inc
U packages/ptc/src/core/colori.inc
U packages/ptc/src/core/timeri.inc
U packages/ptc/src/core/cleard.inc
U packages/ptc/src/core/surfaced.inc
U packages/ptc/src/core/basesurfacei.inc
U packages/ptc/src/core/formatd.inc
U packages/ptc/src/core/errord.inc
U packages/ptc/src/core/mouseeventd.inc
U packages/ptc/src/core/keyeventd.inc
U packages/ptc/src/core/cleari.inc
U packages/ptc/src/core/surfacei.inc
U packages/ptc/src/core/baseconsoled.inc
U packages/ptc/src/core/formati.inc
U packages/ptc/src/core/paletted.inc
U packages/ptc/src/core/errori.inc
U packages/ptc/src/core/keyeventi.inc
U packages/ptc/src/core/mouseeventi.inc
U packages/ptc/src/core/baseconsolei.inc
U packages/ptc/src/core/consoled.inc
U packages/ptc/src/core/palettei.inc
U packages/ptc/src/core/resizeeventd.inc
U packages/ptc/src/x11/x11glxfbconfigd.inc
U packages/ptc/src/x11/x11windowdisplayd.inc
U packages/ptc/src/x11/x11glxfbconfigi.inc
U packages/ptc/src/x11/x11unikey.inc
U packages/ptc/src/x11/x11windowdisplayi.inc
U packages/ptc/src/x11/x11consoled.inc
U packages/ptc/src/x11/x11dga1displayd.inc
U packages/ptc/src/x11/x11dga2displayd.inc
U packages/ptc/src/x11/x11displayd.inc
U packages/ptc/src/x11/x11consolei.inc
U packages/ptc/src/x11/x11dga1displayi.inc
U packages/ptc/src/x11/x11modesd.inc
U packages/ptc/src/x11/x11dga2displayi.inc
U packages/ptc/src/x11/x11check.inc
U packages/ptc/src/x11/x11displayi.inc
U packages/ptc/src/x11/x11modesi.inc
U packages/ptc/src/x11/x11imaged.inc
U packages/ptc/src/x11/x11imagei.inc
U packages/ptc/src/c_api/capi_copyd.inc
U packages/ptc/src/c_api/capi_color.inc
U packages/ptc/src/c_api/capi_timer.inc
U packages/ptc/src/c_api/capi_colord.inc
U packages/ptc/src/c_api/capi_mode.inc
U packages/ptc/src/c_api/capi_timerd.inc
U packages/ptc/src/c_api/capi_clear.inc
U packages/ptc/src/c_api/capi_except.inc
U packages/ptc/src/c_api/capi_format.inc
U packages/ptc/src/c_api/capi_key.inc
U packages/ptc/src/c_api/capi_moded.inc
U packages/ptc/src/c_api/capi_surface.inc
U packages/ptc/src/c_api/capi_error.inc
U packages/ptc/src/c_api/capi_cleard.inc
U packages/ptc/src/c_api/capi_surfaced.inc
U packages/ptc/src/c_api/capi_keyd.inc
U packages/ptc/src/c_api/capi_formatd.inc
U packages/ptc/src/c_api/capi_exceptd.inc
U packages/ptc/src/c_api/capi_errord.inc
U packages/ptc/src/c_api/capi_palette.inc
U packages/ptc/src/c_api/capi_clipper.inc
U packages/ptc/src/c_api/capi_paletted.inc
U packages/ptc/src/c_api/capi_clipperd.inc
U packages/ptc/src/c_api/capi_console.inc
U packages/ptc/src/c_api/capi_consoled.inc
U packages/ptc/src/c_api/capi_index.inc
U packages/ptc/src/c_api/capi_area.inc
U packages/ptc/src/c_api/capi_copy.inc
U packages/ptc/src/c_api/capi_aread.inc
U packages/ptc/docs/lgpl.txt
U packages/fcl-base/src/csvdocument.pp
U packages/fcl-base/src/csvreadwrite.pp
U packages/winunits-base/src/eventsink.pp
U packages/winunits-base/src/typelib.pas
U packages/mysql/src/mysql4_com.pp
U packages/mysql/src/mysql.inc
U packages/mysql/src/mysql4_comdyn.pp
U packages/mysql/src/mysql4dyn.pp
U packages/chm/src/paslzxcomp.pas
U packages/aspell/LICENSE
U packages/os2units/src/dive.pas
U packages/bfd/src/bfd.pas
U utils/instantfpc/instantfpc.pas
U utils/fpdoc/COPYING.txt
U utils/fpdoc/README.txt
U utils/fppkg/lnet/LICENSE.ADDON
U utils/fppkg/lnet/lmimetypes.pp
U utils/fppkg/lnet/lhttputil.pp
U utils/fppkg/lnet/lprocess.pp
U utils/fppkg/lnet/lhttp.pp
U utils/fppkg/lnet/ltimer.pp
U utils/fppkg/lnet/lfastcgi.pp
U utils/fppkg/lnet/lspawnfcgi.pp
U utils/fppkg/lnet/lsmtp.pp
U utils/fppkg/lnet/lnet.pp
U utils/fppkg/lnet/lmimestreams.pp
U utils/fppkg/lnet/lmimewrapper.pp
U utils/fppkg/lnet/lcommon.pp
U utils/fppkg/lnet/LICENSE
U utils/fppkg/lnet/lftp.pp
U utils/fppkg/lnet/ltelnet.pp
U utils/fppkg/lnet/lstrbuffer.pp
U utils/fppkg/lnet/lwebserver.pp
U utils/fppkg/lnet/levents.pp
U utils/fppkg/lnet/lcontrolstack.pp
U rtl/sparc/setjumph.inc
U rtl/win/wininc/struct.inc
U rtl/win/wininc/unifun.inc
U rtl/win/wininc/ascdef.inc
U rtl/win/wininc/messages.inc
U rtl/win/wininc/base.inc
U rtl/win/wininc/unidef.inc
U rtl/win/wininc/func.inc
U rtl/win/wininc/errors.inc
U rtl/win/wininc/defines.inc
U rtl/win/wininc/ascfun.inc
U rtl/linux/powerpc/cprt0.as
U rtl/linux/arm/ucprt0.as
U rtl/linux/powerpc64/cprt0.as
U rtl/linux/powerpc64/gprt0.as
U rtl/linux/mips/cprt0.as
U rtl/os2/moncalls.pas
U rtl/os2/viocalls.pas
U rtl/os2/pmgpi.pas
U rtl/os2/moucalls.pas
U rtl/os2/kbdcalls.pas
U rtl/inc/flt_conv.inc
U rtl/inc/flt_core.inc
U rtl/wince/wininc/struct.inc
U rtl/wince/wininc/messages.inc
U rtl/wince/wininc/base.inc
U rtl/wince/wininc/errors.inc
U rtl/wince/wininc/defines.inc
U rtl/java/jsystem.inc
U rtl/COPYING.txt
U tests/test/units/sysutils/twstrcmp.pp
U tests/test/units/sysutils/tstrcmp.pp
U tests/test/units/sysutils/tastrcmp.pp
U tests/utils/avx/avxtestgenerator.pp
U tests/utils/avx/baselist.pas
U tests/utils/avx/asmtestgenerator.pas
U tests/utils/avx/options.pas
--- Recording mergeinfo for merge of r34598 into '.':
U .
--- Merging r35481 into '.':
U packages/graph/src/inc/gtext.inc
--- Recording mergeinfo for merge of r35481 into '.':
G .
--- Merging r36507 into '.':
G packages/ptc/src/dos/timeunit/timeunit.pp
D packages/ptc/src/dos/base/go32fix.pp
G packages/ptc/src/core/keyeventd.inc
G packages/ptc/src/core/mouseeventd.inc
G packages/ptc/src/core/baseconsoled.inc
G packages/ptc/src/core/errori.inc
G packages/ptc/src/core/baseconsolei.inc
G packages/ptc/src/core/consolei.inc
U packages/ptc/src/ptcpas.cfg
A packages/ptc/src/ptclaz.lpr
G packages/ptc/src/x11/x11consolei.inc
G packages/ptc/src/x11/x11dga1displayi.inc
G packages/ptc/src/x11/x11dga2displayi.inc
G packages/ptc/src/x11/x11displayi.inc
U packages/ptc/src/x11/x11extensions.inc
G packages/ptc/src/x11/x11windowdisplayd.inc
G packages/ptc/src/x11/x11unikey.inc
G packages/ptc/src/x11/x11windowdisplayi.inc
G packages/ptc/src/x11/x11consoled.inc
G packages/ptc/src/x11/x11dga1displayd.inc
G packages/ptc/src/x11/x11dga2displayd.inc
G packages/ptc/src/x11/x11displayd.inc
A packages/ptc/src/ptclaz.lpi
G packages/ptc/src/win32/base/win32moused.inc
G packages/ptc/src/win32/base/win32kbd.inc
G packages/ptc/src/win32/base/win32hook.inc
G packages/ptc/src/win32/base/win32mousei.inc
G packages/ptc/src/win32/base/win32kbdd.inc
G packages/ptc/src/win32/base/win32window.inc
G packages/ptc/src/win32/base/win32windowd.inc
U packages/ptc/src/win32/directx/p_ddraw.pp
G packages/ptc/src/win32/directx/win32directxhook.inc
A packages/ptc/src/win32/directx/p_dinput.pp
G packages/ptc/src/win32/directx/win32directxdisplay.inc
G packages/ptc/src/win32/directx/win32directxconsoled.inc
G packages/ptc/src/win32/directx/win32directxconsolei.inc
G packages/ptc/src/win32/gdi/win32gdiconsoled.inc
G packages/ptc/src/win32/gdi/win32gdiconsolei.inc
G packages/ptc/src/win32/gdi/win32openglwindowd.inc
G packages/ptc/src/win32/gdi/win32openglwindowi.inc
G packages/ptc/src/ptc.pp
U packages/ptc/docs/INSTALL.txt
U packages/ptc/docs/CHANGES.txt
U packages/ptc/docs/README.txt
U packages/ptc/examples/keyboard3.pp
U packages/ptc/fpmake.pp
A packages/ptc/tests/event.pp
U packages/graph/src/ptcgraph/ptcgraph.pp
--- Recording mergeinfo for merge of r36507 into '.':
G .
--- Merging r36508 into '.':
G packages/ptc/fpmake.pp
--- Recording mergeinfo for merge of r36508 into '.':
G .
--- Merging r36509 into '.':
U packages/ptc/src/dos/textfx2/textfx2.pp
G packages/ptc/src/dos/base/mouse33h.pp
G packages/ptc/src/dos/cga/cga.pp
G packages/ptc/src/dos/vga/vga.pp
G packages/ptc/src/dos/vesa/vesa.pp
--- Recording mergeinfo for merge of r36509 into '.':
G .
--- Merging r36555 into '.':
U packages/graph/src/ptcgraph/ptccrt.pp
G packages/ptc/src/core/keyeventd.inc
G packages/ptc/src/x11/x11displayi.inc
G packages/ptc/src/win32/base/win32kbd.inc
G packages/ptc/docs/CHANGES.txt
A packages/ptc/tests/crtkeys
A packages/ptc/tests/crtkeys/crtkeys_go32v2.txt
A packages/ptc/tests/crtkeys/crtkeys.pas
A packages/ptc/tests/crtkeys/crtkeys_tp7.txt
A packages/ptc/tests/crtkeys/ptccrtkeys.pas
A packages/ptc/tests/crtkeys/crtkeys_fpwincrt.txt
--- Recording mergeinfo for merge of r36555 into '.':
G .
--- Merging r36556 into '.':
G packages/graph/src/ptcgraph/ptccrt.pp
G packages/ptc/src/win32/base/win32kbd.inc
--- Recording mergeinfo for merge of r36556 into '.':
G .
# revisions: 34598,35481,36507,36508,36509,36555,36556
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/fixes_3_0@36558 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/ptc/src/win32/base/win32window.inc')
-rw-r--r-- | packages/ptc/src/win32/base/win32window.inc | 214 |
1 files changed, 161 insertions, 53 deletions
diff --git a/packages/ptc/src/win32/base/win32window.inc b/packages/ptc/src/win32/base/win32window.inc index 2dc6401841..b65aabdb4b 100644 --- a/packages/ptc/src/win32/base/win32window.inc +++ b/packages/ptc/src/win32/base/win32window.inc @@ -1,6 +1,6 @@ { Free Pascal port of the OpenPTC C++ library. - Copyright (C) 2001-2003, 2006, 2007, 2009-2012 Nikolay Nikolov (nickysn@users.sourceforge.net) + Copyright (C) 2001-2003, 2006, 2007, 2009-2012, 2016, 2017 Nikolay Nikolov (nickysn@users.sourceforge.net) Original C++ version by Glenn Fiedler (ptc@gaffer.org) This library is free software; you can redistribute it and/or @@ -27,7 +27,7 @@ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } {$ifdef VER2_6} @@ -46,6 +46,8 @@ begin defaults; FWindow := window; FManaged := False; + FIsUnicode := IsWindowUnicode(window); + LOG('IsUnicode', IsUnicode); end; function WndProcSingleThreaded(hWnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; forward; @@ -59,33 +61,73 @@ var rectangle: RECT; display_width, display_height: Integer; wc: WNDCLASSEXA; + wcw: WNDCLASSEXW; + WinVer: OSVERSIONINFO; + AWndClassW, ATitleW: WideString; begin LOG('creating managed window'); Defaults; FMultithreaded := AMultithreaded; try + FillChar(WinVer, SizeOf(WinVer), 0); + WinVer.dwOSVersionInfoSize := SizeOf(WinVer); + if not GetVersionEx(WinVer) then + raise TPTCError.Create('GetVersionEx failed'); + { Win32s on Windows 3.1 and Win32 on Windows 95/98/ME don't support unicode } + FIsUnicode := (WinVer.dwPlatformId <> VER_PLATFORM_WIN32s) and + (WinVer.dwPlatformId <> VER_PLATFORM_WIN32_WINDOWS); + LOG('IsUnicode', IsUnicode); + FInterceptClose := AInterceptClose; program_instance := GetModuleHandle(nil); { library_instance := program_instance;} - wc.cbSize := SizeOf(wc); - wc.hInstance := program_instance; - wc.lpszClassName := PChar(AWndClass); - wc.style := AClassStyle; - wc.hIcon := 0{LoadIcon(library_instance, 'IDI_PTC_ICON')}; - wc.hIconSm := 0; - wc.lpszMenuName := nil; - wc.cbClsExtra := 0; - wc.cbWndExtra := 0; - wc.hbrBackground := 0;{(HBRUSH) GetStockObject(BLACK_BRUSH)} - if AMultithreaded then - wc.lpfnWndProc := @WndProcMultiThreaded - else - wc.lpfnWndProc := @WndProcSingleThreaded; - if ACursor then - wc.hCursor := LoadCursor(0, IDC_ARROW) + if IsUnicode then + begin + AWndClassW := AWndClass; + ATitleW := ATitle; + + wcw.cbSize := SizeOf(wcw); + wcw.hInstance := program_instance; + wcw.lpszClassName := PWideChar(AWndClassW); + wcw.style := AClassStyle; + wcw.hIcon := 0{LoadIcon(library_instance, 'IDI_PTC_ICON')}; + wcw.hIconSm := 0; + wcw.lpszMenuName := nil; + wcw.cbClsExtra := 0; + wcw.cbWndExtra := 0; + wcw.hbrBackground := 0;{(HBRUSH) GetStockObject(BLACK_BRUSH)} + if AMultithreaded then + wcw.lpfnWndProc := @WndProcMultiThreaded + else + wcw.lpfnWndProc := @WndProcSingleThreaded; + if ACursor then + wcw.hCursor := LoadCursorW(0, PWideChar(IDC_ARROW)) + else + wcw.hCursor := 0; + RegisterClassExW(wcw); + end else - wc.hCursor := 0; - RegisterClassExA(wc); + begin + wc.cbSize := SizeOf(wc); + wc.hInstance := program_instance; + wc.lpszClassName := PChar(AWndClass); + wc.style := AClassStyle; + wc.hIcon := 0{LoadIcon(library_instance, 'IDI_PTC_ICON')}; + wc.hIconSm := 0; + wc.lpszMenuName := nil; + wc.cbClsExtra := 0; + wc.cbWndExtra := 0; + wc.hbrBackground := 0;{(HBRUSH) GetStockObject(BLACK_BRUSH)} + if AMultithreaded then + wc.lpfnWndProc := @WndProcMultiThreaded + else + wc.lpfnWndProc := @WndProcSingleThreaded; + if ACursor then + wc.hCursor := LoadCursorA(0, IDC_ARROW) + else + wc.hCursor := 0; + RegisterClassExA(wc); + end; with rectangle do begin left := 0; @@ -117,7 +159,10 @@ begin end else begin - FWindow := CreateWindowExA(FExtra, PChar(FName), PChar(FTitle), FStyle, FX, FY, FWidth, FHeight, 0, 0, 0, Self); + if IsUnicode then + FWindow := CreateWindowExW(FExtra, PWideChar(AWndClassW), PWideChar(ATitleW), FStyle, FX, FY, FWidth, FHeight, 0, 0, 0, Self) + else + FWindow := CreateWindowExA(FExtra, PChar(FName), PChar(FTitle), FStyle, FX, FY, FWidth, FHeight, 0, 0, 0, Self); if not IsWindow(FWindow) then raise TPTCError.Create('could not create window'); ShowWindow(FWindow, FShow); @@ -140,16 +185,20 @@ end; procedure TWin32Window.Cursor(AFlag: Boolean); begin if AFlag then - begin -// SetClassLong(FWindow, GCL_HCURSOR, LoadCursor(0, IDC_ARROW)); - SetClassLongPtr(FWindow, GCLP_HCURSOR, LoadCursor(0, IDC_ARROW)); - end + if IsUnicode then + SetClassLongPtrW(FWindow, GCLP_HCURSOR, LoadCursorW(0, PWideChar(IDC_ARROW))) + else + SetClassLongPtrA(FWindow, GCLP_HCURSOR, LoadCursorA(0, IDC_ARROW)) else - begin -// SetClassLong(FWindow, GCL_HCURSOR, 0); - SetClassLongPtr(FWindow, GCLP_HCURSOR, 0); - end; - SendMessage(FWindow, WM_SETCURSOR, 0, 0); + if IsUnicode then + SetClassLongPtrW(FWindow, GCLP_HCURSOR, 0) + else + SetClassLongPtrA(FWindow, GCLP_HCURSOR, 0); + + if IsUnicode then + SendMessageW(FWindow, WM_SETCURSOR, 0, 0) + else + SendMessageA(FWindow, WM_SETCURSOR, 0, 0); end; procedure TWin32Window.ConfineCursor(AFlag: Boolean); @@ -216,18 +265,43 @@ begin { updated to pump all window messages, and not just for our FWindow; this fixes keyboard layout switching and maybe other bugs and side effects... Seems like Windows wants everything pumped :) } + + { TranslateMessage isn't called, because it's incompatible with the + ToAscii/ToUnicode functions, which we use for translating keys to + characters. Both ToAscii/ToUnicode and TranslateMessage modify the kernel + key state, in such a way, which assumes that only one of these functions + is called per key event, so when both are called, they kill the dead key + support (because the dead key pressed state is toggled twice or something + like that). TODO: maybe we should call TranslateMessage for windows, which + aren't managed by us? } if AWaitForMessage then begin - GetMessage(message, {FWindow}0, 0, 0); - TranslateMessage(message); - DispatchMessage(message); - end - else - while PeekMessage(message, {FWindow}0, 0, 0, PM_REMOVE) do + if IsUnicode then begin - TranslateMessage(message); - DispatchMessage(message); + GetMessageW(message, {FWindow}0, 0, 0); + //TranslateMessage(message); + DispatchMessageW(message); + end + else + begin + GetMessageA(message, {FWindow}0, 0, 0); + //TranslateMessage(message); + DispatchMessageA(message); end; + end + else + if IsUnicode then + while PeekMessageW(message, {FWindow}0, 0, 0, PM_REMOVE) do + begin + //TranslateMessage(message); + DispatchMessageW(message); + end + else + while PeekMessageA(message, {FWindow}0, 0, 0, PM_REMOVE) do + begin + //TranslateMessage(message); + DispatchMessageA(message); + end; end else Sleep(0); @@ -251,7 +325,10 @@ begin begin pCreate := PCREATESTRUCT(lParam); WindowObject := TWin32Window(pCreate^.lpCreateParams); - SetWindowLongPtr(hWnd, GWLP_USERDATA, LONG_PTR(WindowObject)); + if IsWindowUnicode(hWnd) then + SetWindowLongPtrW(hWnd, GWLP_USERDATA, LONG_PTR(WindowObject)) + else + SetWindowLongPtrA(hWnd, GWLP_USERDATA, LONG_PTR(WindowObject)); Result := WindowObject.WMCreate(hWnd, message, wParam, lParam); end; WM_DESTROY: @@ -259,22 +336,35 @@ begin WindowObject := TWin32Window(GetWindowLongPtr(hWnd, GWLP_USERDATA)); Result := WindowObject.WMDestroy(hWnd, message, wParam, lParam); end; + WM_MOUSEMOVE, + WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, + WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MBUTTONDBLCLK, + WM_RBUTTONDOWN, WM_RBUTTONUP, WM_RBUTTONDBLCLK, + WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, + WM_MOUSEWHEEL, WM_MOUSEHWHEEL: + Result := 0; WM_SYSCOMMAND: begin { this fixes the pausing of the application when the Alt or F10 key is pressed } if wParam = SC_KEYMENU then - Result := 0 - else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + Result := 0 + else + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; WM_SETCURSOR: begin if (LOWORD(lParam) = HTCLIENT) and (GetClassLongPtr(hWnd, GCLP_HCURSOR) = 0) then begin SetCursor(0); - Result := 1; + Result := 1; end else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; WM_CLOSE: begin LOG('TWin32Window WM_CLOSE'); @@ -285,7 +375,10 @@ begin Halt(0); end; else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; end; @@ -297,18 +390,24 @@ begin begin { this fixes the pausing of the application when the Alt or F10 key is pressed } if wParam = SC_KEYMENU then - Result := 0 - else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + Result := 0 + else + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; WM_SETCURSOR: begin if (LOWORD(lParam) = HTCLIENT) and (GetClassLongPtr(hWnd, GCLP_HCURSOR) = 0) then begin SetCursor(0); - Result := 1; + Result := 1; end else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; WM_DESTROY: begin LOG('TWin32Window WM_DESTROY'); @@ -319,7 +418,10 @@ begin Halt(0); end; else - Result := DefWindowProcA(hWnd, message, wParam, lParam); + if IsWindowUnicode(hWnd) then + Result := DefWindowProcW(hWnd, message, wParam, lParam) + else + Result := DefWindowProcA(hWnd, message, wParam, lParam); end; end; @@ -406,10 +508,16 @@ end; function TWin32Window.WMCreate(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; begin - Result := DefWindowProcA(hWnd, uMsg, wParam, lParam); + if IsUnicode then + Result := DefWindowProcW(hWnd, uMsg, wParam, lParam) + else + Result := DefWindowProcA(hWnd, uMsg, wParam, lParam); end; function TWin32Window.WMDestroy(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; begin - Result := DefWindowProcA(hWnd, uMsg, wParam, lParam); + if IsUnicode then + Result := DefWindowProcW(hWnd, uMsg, wParam, lParam) + else + Result := DefWindowProcA(hWnd, uMsg, wParam, lParam); end; |