Mercurial > hg > xemacs-beta
annotate src/intl-encap-win32.c @ 4903:70089046adef
fix compile problems in intl-encap* under VS6
-------------------- ChangeLog entries follow: --------------------
lib-src/ChangeLog addition:
2010-01-30 Ben Wing <ben@xemacs.org>
* make-mswin-unicode.pl:
Make it possible to specify an overridden prototype in cases where
either Cygwin or Visual Studio has errors in their headers that
can be corrected by falling back to a less qualified type (typically
without const).
src/ChangeLog addition:
2010-01-30 Ben Wing <ben@xemacs.org>
* intl-auto-encap-win32.c:
* intl-auto-encap-win32.c (qxeExtractAssociatedIcon):
* intl-auto-encap-win32.c (qxeExtractIconEx):
* intl-auto-encap-win32.c (qxeCreateMDIWindow):
* intl-auto-encap-win32.c (qxeCreateWindowStation):
* intl-auto-encap-win32.c (qxeDdeCreateStringHandle):
* intl-auto-encap-win32.c (qxeAbortSystemShutdown):
* intl-auto-encap-win32.c (qxeRegConnectRegistry):
* intl-auto-encap-win32.c (qxeGetICMProfile):
* intl-auto-encap-win32.h:
Rebuild.
* intl-encap-win32.c:
* intl-encap-win32.c (qxeUpdateICMRegKey):
Delete manual definitions of functions with former errors in
Cygwin headers but no longer. Use "override" with some functions
where Cygwin or VS6 accidentally omits a const declaration or
includes an extra one. Use "no" on SendMessageTimeout, which
has an error in the VS6 prototype (you could manually fix this
with an ifdef to split the Cygwin vs. VS6 calls, if we ever
actually used this function).
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 30 Jan 2010 20:34:23 -0600 |
parents | 49de55c09f18 |
children | 7eec2a1f3412 |
rev | line source |
---|---|
771 | 1 /* Unicode-encapsulation of Win32 library functions. |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
2 Copyright (C) 2000, 2001, 2002, 2004, 2010 Ben Wing. |
771 | 3 |
4 This file is part of XEmacs. | |
5 | |
6 XEmacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any | |
9 later version. | |
10 | |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with XEmacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* Synched up with: Not in FSF. */ | |
22 | |
23 /* Authorship: | |
24 | |
25 Current primary author: Ben Wing <ben@xemacs.org> | |
26 | |
27 Created summer 2000 by Ben Wing. Completed August 2001. Completely | |
28 written by Ben Wing. | |
29 */ | |
30 | |
31 #define NEED_MSWINDOWS_COMMCTRL | |
32 #define NEED_MSWINDOWS_SHLOBJ | |
33 | |
34 #include <config.h> | |
35 #include "lisp.h" | |
36 | |
37 #include "console-msw.h" | |
38 | |
39 int no_mswin_unicode_lib_calls; | |
40 | |
41 | |
42 /************************************************************************/ | |
43 /* auto-generation */ | |
44 /************************************************************************/ | |
45 | |
46 /* we use a simple script to control the auto-generation. | |
47 | |
48 \(The following is copied from lib-src/make-mswin-unicode.pl.) | |
49 | |
50 file specifies a file to start reading from. | |
51 yes indicates a function to be automatically Unicode-encapsulated. | |
52 (All parameters either need no special processing or are LPTSTR or | |
53 LPCTSTR.) | |
54 soon indicates a function that should be automatically Unicode-encapsulated, | |
55 but we're not ready to process it yet. | |
56 no indicates a function we don't support (it will be #defined to cause | |
57 a compile error, with the text after the function included in the | |
58 erroneous definition to indicate why we don't support it). | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
59 review indicates a function that we still need to review to determine whether |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
60 or how to support it. This has the same effect as `no', with a comment |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
61 indicating that the function needs review. |
771 | 62 skip indicates a function we support manually; only a comment about this |
63 will be generated. | |
64 split indicates a function with a split structure (different versions | |
65 for Unicode and ANSI), but where the only difference is in pointer | |
66 types, and the actual size does not differ. The structure name | |
67 should follow the function name, and it will be automatically | |
68 Unicode-encapsulated with appropriate casts. | |
69 begin-bracket indicates a #if statement to be inserted here. | |
70 end-bracket indicates the corresponding #endif statement. | |
71 blank lines and lines beginning with // are ignored. | |
72 | |
73 The generated files go into intl-auto-encap-win32.[ch]. | |
74 | |
75 To regenerate, go to the nt/ subdirectory and type | |
76 | |
77 nmake -f xemacs.mak unicode-encapsulate | |
78 | |
79 This does the following: | |
80 | |
81 cd $(SRC) | |
82 perl ../lib-src/make-mswin-unicode.pl --c-output intl-auto-encap-win32.c --h-output intl-auto-encap-win32.h intl-encap-win32.c | |
83 | |
84 */ | |
85 | |
86 /* | |
87 | |
88 terminology used below: | |
89 | |
90 "split-simple" means a structure where the A and W versions are the same | |
91 size, and the only differences are string pointer arguments. (This does NOT | |
92 include structures with a pointer to a split-sized structure within them.) | |
93 This can also refer to a function pointer whose only split arguments are | |
94 string pointers or split-simple structures. | |
95 | |
96 "split-sized" means a structure where the A and W versions are different | |
97 sizes (typically because of an inline string argument), or where there's a | |
98 pointer to another split-sized structure. | |
99 | |
100 "split-complex" | |
101 | |
102 begin-unicode-encapsulation-script | |
103 | |
800 | 104 // dir c:\Program Files\Microsoft Visual Studio\VC98\Include\ |
105 | |
3728 | 106 file ACLAPI.h |
107 | |
108 yes GetNamedSecurityInfo | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
109 review BuildExplicitAccessWithName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
110 review BuildSecurityDescriptor |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
111 review BuildTrusteeWithName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
112 review BuildTrusteeWithObjectsAndName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
113 review BuildTrusteeWithObjectsAndSid |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
114 review BuildTrusteeWithSid |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
115 review GetAuditedPermissionsFromAcl |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
116 review GetEffectiveRightsFromAcl |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
117 review GetExplicitEntriesFromAcl |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
118 review GetTrusteeForm |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
119 review GetTrusteeName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
120 review GetTrusteeType |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
121 review LookupSecurityDescriptorParts |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
122 review SetEntriesInAcl |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
123 review SetNamedSecurityInfo |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
124 review BuildImpersonateExplicitAccessWithName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
125 review BuildImpersonateTrustee |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
126 review GetMultipleTrustee |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
127 review GetMultipleTrusteeOperation |
3728 | 128 |
771 | 129 file WINBASE.H |
130 | |
131 yes GetBinaryType | |
132 yes GetShortPathName | |
1684 | 133 no GetLongPathName Win98/2K+ only |
827 | 134 skip GetEnvironmentStrings misnamed ANSI version of the function |
771 | 135 yes FreeEnvironmentStrings |
136 yes FormatMessage | |
137 yes CreateMailslot | |
138 begin-bracket !defined (CYGWIN_HEADERS) | |
778 | 139 no EncryptFile Win2K+ only |
140 no DecryptFile Win2K+ only | |
771 | 141 end-bracket |
142 no OpenRaw error "The procedure entry point OpenRawW could not be located in the dynamic link library ADVAPI32.dll." | |
143 no QueryRecoveryAgents split-sized LPRECOVERY_AGENT_INFORMATION | |
144 yes lstrcmp | |
145 yes lstrcmpi | |
146 yes lstrcpyn | |
147 yes lstrcpy | |
148 yes lstrcat | |
149 yes lstrlen | |
150 yes CreateMutex | |
151 yes OpenMutex | |
152 yes CreateEvent | |
153 yes OpenEvent | |
154 yes CreateSemaphore | |
155 yes OpenSemaphore | |
156 yes CreateWaitableTimer | |
157 yes OpenWaitableTimer | |
158 yes CreateFileMapping | |
159 yes OpenFileMapping | |
160 yes GetLogicalDriveStrings | |
161 yes LoadLibrary | |
162 yes LoadLibraryEx | |
163 yes GetModuleFileName | |
164 yes GetModuleHandle | |
165 split CreateProcess LPSTARTUPINFO | |
166 yes FatalAppExit | |
167 split GetStartupInfo LPSTARTUPINFO | |
168 yes GetCommandLine | |
169 yes GetEnvironmentVariable | |
170 yes SetEnvironmentVariable | |
171 yes ExpandEnvironmentStrings | |
172 yes OutputDebugString | |
173 yes FindResource | |
174 yes FindResourceEx | |
2500 | 175 skip EnumResourceTypes different prototypes in VC6 and VC7 |
176 skip EnumResourceNames different prototypes in VC6 and VC7 | |
177 skip EnumResourceLanguages different prototypes in VC6 and VC7 | |
771 | 178 yes BeginUpdateResource |
179 yes UpdateResource | |
180 yes EndUpdateResource | |
181 yes GlobalAddAtom | |
182 yes GlobalFindAtom | |
183 yes GlobalGetAtomName | |
184 yes AddAtom | |
185 yes FindAtom | |
186 yes GetAtomName | |
187 yes GetProfileInt | |
188 yes GetProfileString | |
189 yes WriteProfileString | |
190 yes GetProfileSection | |
191 yes WriteProfileSection | |
192 yes GetPrivateProfileInt | |
193 yes GetPrivateProfileString | |
194 yes WritePrivateProfileString | |
195 yes GetPrivateProfileSection | |
196 yes WritePrivateProfileSection | |
197 yes GetPrivateProfileSectionNames | |
198 yes GetPrivateProfileStruct | |
199 yes WritePrivateProfileStruct | |
200 yes GetDriveType | |
201 yes GetSystemDirectory | |
202 yes GetTempPath | |
203 yes GetTempFileName | |
204 yes GetWindowsDirectory | |
205 yes SetCurrentDirectory | |
206 yes GetCurrentDirectory | |
207 yes GetDiskFreeSpace | |
208 yes GetDiskFreeSpaceEx | |
209 yes CreateDirectory | |
210 yes CreateDirectoryEx | |
211 yes RemoveDirectory | |
212 yes GetFullPathName | |
213 yes DefineDosDevice | |
214 yes QueryDosDevice | |
215 yes CreateFile | |
216 yes SetFileAttributes | |
217 yes GetFileAttributes | |
218 yes GetFileAttributesEx | |
219 yes GetCompressedFileSize | |
220 yes DeleteFile | |
221 no FindFirstFileEx split-sized LPWIN32_FIND_DATA; not used, NT 4.0+ only | |
222 skip FindFirstFile split-sized LPWIN32_FIND_DATA | |
223 skip FindNextFile split-sized LPWIN32_FIND_DATA | |
224 yes SearchPath | |
225 yes CopyFile | |
226 yes CopyFileEx NT 4.0+ only | |
227 yes MoveFile | |
228 yes MoveFileEx | |
229 no MoveFileWithProgress NT 5.0+ only | |
230 no CreateHardLink NT 5.0+ only | |
231 yes CreateNamedPipe | |
232 yes GetNamedPipeHandleState | |
233 yes CallNamedPipe | |
234 yes WaitNamedPipe | |
235 yes SetVolumeLabel | |
236 yes GetVolumeInformation | |
237 yes ClearEventLog | |
238 yes BackupEventLog | |
239 yes OpenEventLog | |
240 yes RegisterEventSource | |
241 yes OpenBackupEventLog | |
242 yes ReadEventLog | |
243 yes ReportEvent | |
244 yes AccessCheckAndAuditAlarm | |
245 no AccessCheckByTypeAndAuditAlarm NT 5.0+ only | |
246 no AccessCheckByTypeResultListAndAuditAlarm NT 5.0+ only | |
247 yes ObjectOpenAuditAlarm | |
248 yes ObjectPrivilegeAuditAlarm | |
249 yes ObjectCloseAuditAlarm | |
250 yes ObjectDeleteAuditAlarm | |
251 yes PrivilegedServiceAuditAlarm | |
252 yes SetFileSecurity | |
253 yes GetFileSecurity | |
254 yes FindFirstChangeNotification | |
255 no ReadDirectoryChanges Unicode-only | |
256 yes IsBadStringPtr | |
257 yes LookupAccountSid | |
258 yes LookupAccountName | |
259 yes LookupPrivilegeValue | |
260 yes LookupPrivilegeName | |
261 yes LookupPrivilegeDisplayName | |
262 yes BuildCommDCB | |
263 yes BuildCommDCBAndTimeouts | |
264 yes CommConfigDialog | |
265 yes GetDefaultCommConfig | |
266 yes SetDefaultCommConfig | |
267 yes GetComputerName | |
268 yes SetComputerName | |
269 yes GetUserName | |
270 yes LogonUser | |
271 split CreateProcessAsUser LPSTARTUPINFO | |
272 no GetCurrentHwProfile split-sized LPHW_PROFILE_INFO; NT 4.0+ only | |
273 no GetVersionEx split-sized LPOSVERSIONINFO | |
274 no CreateJobObject NT 5.0+ only | |
275 no OpenJobObject NT 5.0+ only | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
276 review CheckNameLegalDOS8Dot3 |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
277 review CreateActCtx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
278 review CreateProcessWithLogon |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
279 review DeleteVolumeMountPoint |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
280 review DnsHostnameToComputerName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
281 review FileEncryptionStatus |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
282 review FindActCtxSectionString |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
283 review FindFirstVolume |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
284 review FindFirstVolumeMountPoint |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
285 review FindNextVolume |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
286 review FindNextVolumeMountPoint |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
287 review GetFirmwareEnvironmentVariable |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
288 review GetComputerNameEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
289 review GetDllDirectory |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
290 review GetModuleHandleEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
291 review GetSystemWindowsDirectory |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
292 review GetSystemWow64Directory |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
293 review GetVolumeNameForVolumeMountPoint |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
294 review GetVolumePathName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
295 review GetVolumePathNamesForVolumeName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
296 review QueryActCtx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
297 review ReplaceFile |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
298 review SetComputerNameEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
299 review SetDllDirectory |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
300 review SetFileShortName |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
301 review SetFirmwareEnvironmentVariable |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
302 review SetVolumeMountPoint |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
303 review VerifyVersionInfo |
771 | 304 |
305 file WINUSER.H | |
306 | |
307 skip MAKEINTRESOURCE macro | |
308 yes wvsprintf | |
309 no wsprintf varargs | |
310 yes LoadKeyboardLayout | |
311 yes GetKeyboardLayoutName | |
312 no CreateDesktop split-sized LPDEVMODE | |
313 yes OpenDesktop | |
314 split EnumDesktops DESKTOPENUMPROC // callback fun differs only in string pointer type | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
315 override HWINSTA CreateWindowStationW(LPWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES); error arg 1, VS6 prototype, missing const |
771 | 316 yes OpenWindowStation |
317 split EnumWindowStations WINSTAENUMPROC // callback fun differs only in string pointer type | |
318 yes GetUserObjectInformation | |
319 yes SetUserObjectInformation | |
320 yes RegisterWindowMessage | |
321 yes GetMessage | |
322 yes DispatchMessage | |
323 yes PeekMessage | |
324 skip SendMessage split messages and structures | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
325 no SendMessageTimeout VS6 has erroneous seventh parameter DWORD_PTR instead of PDWORD_PTR |
771 | 326 yes SendNotifyMessage |
327 yes SendMessageCallback | |
328 no BroadcastSystemMessage win95 version not split; NT 4.0+ only | |
329 no RegisterDeviceNotification NT 5.0+ only | |
330 yes PostMessage | |
331 yes PostThreadMessage | |
332 no PostAppMessage macro | |
333 skip DefWindowProc return value is conditionalized on _MAC, messes up parser | |
334 no CallWindowProc two versions, STRICT and non-STRICT | |
335 skip RegisterClass need to intercept so we can provide our own window procedure and handle split notify messages; split-simple WNDCLASS | |
336 skip UnregisterClass need to intercept for reasons related to RegisterClass | |
337 split GetClassInfo LPWNDCLASS | |
338 skip RegisterClassEx need to intercept so we can provide our own window procedure and handle split notify messages; split-simple WNDCLASSEX; NT 4.0+ only | |
339 split GetClassInfoEx LPWNDCLASSEX NT 4.0+ only | |
340 yes CreateWindowEx | |
341 skip CreateWindow macro | |
342 yes CreateDialogParam | |
343 split CreateDialogIndirectParam LPCDLGTEMPLATE error in Cygwin prototype (no split) but fixable with typedef | |
344 no CreateDialog macro | |
345 no CreateDialogIndirect macro w/split LPCDLGTEMPLATE | |
346 yes DialogBoxParam | |
347 split DialogBoxIndirectParam LPCDLGTEMPLATE error in Cygwin prototype (no split) but fixable with typedef | |
348 no DialogBox macro | |
349 no DialogBoxIndirect macro w/split LPCDLGTEMPLATE | |
350 yes SetDlgItemText | |
351 yes GetDlgItemText | |
352 yes SendDlgItemMessage | |
353 no DefDlgProc return value is conditionalized on _MAC, messes up parser | |
354 begin-bracket !defined (CYGWIN_HEADERS) | |
355 yes CallMsgFilter | |
356 end-bracket | |
357 yes RegisterClipboardFormat | |
358 yes GetClipboardFormatName | |
359 yes CharToOem | |
360 yes OemToChar | |
361 yes CharToOemBuff | |
362 yes OemToCharBuff | |
363 yes CharUpper | |
364 yes CharUpperBuff | |
365 yes CharLower | |
366 yes CharLowerBuff | |
367 yes CharNext | |
368 yes CharPrev | |
369 no IsCharAlpha split CHAR | |
370 no IsCharAlphaNumeric split CHAR | |
371 no IsCharUpper split CHAR | |
372 no IsCharLower split CHAR | |
373 yes GetKeyNameText | |
374 skip VkKeyScan split CHAR | |
375 no VkKeyScanEx split CHAR; NT 4.0+ only | |
376 yes MapVirtualKey | |
377 yes MapVirtualKeyEx NT 4.0+ only | |
378 yes LoadAccelerators | |
379 yes CreateAcceleratorTable | |
380 yes CopyAcceleratorTable | |
381 yes TranslateAccelerator | |
382 yes LoadMenu | |
383 split LoadMenuIndirect MENUTEMPLATE | |
384 yes ChangeMenu | |
385 yes GetMenuString | |
386 yes InsertMenu | |
387 yes AppendMenu | |
388 yes ModifyMenu | |
389 split InsertMenuItem LPCMENUITEMINFO NT 4.0+ only | |
390 split GetMenuItemInfo LPMENUITEMINFO NT 4.0+ only | |
391 split SetMenuItemInfo LPCMENUITEMINFO NT 4.0+ only | |
392 yes DrawText | |
393 yes DrawTextEx NT 4.0+ only | |
394 yes GrayString | |
395 yes DrawState NT 4.0+ only | |
396 yes TabbedTextOut | |
397 yes GetTabbedTextExtent | |
398 yes SetProp | |
399 yes GetProp | |
400 yes RemoveProp | |
401 split EnumPropsEx PROPENUMPROCEX // callback fun differs only in string pointer type | |
402 split EnumProps PROPENUMPROC // callback fun differs only in string pointer type | |
403 yes SetWindowText | |
404 yes GetWindowText | |
405 yes GetWindowTextLength | |
406 yes MessageBox | |
407 yes MessageBoxEx | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
408 // split MessageBoxIndirect LPMSGBOXPARAMS NT 4.0+ only |
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
409 no MessageBoxIndirect Cygwin has split MSGBOXPARAMS* instead of LPMSGBOXPARAMS |
771 | 410 yes GetWindowLong |
411 yes SetWindowLong | |
412 yes GetClassLong | |
413 yes SetClassLong | |
414 yes FindWindow | |
415 yes FindWindowEx NT 4.0+ only | |
416 yes GetClassName | |
417 no SetWindowsHook obsolete; two versions, STRICT and non-STRICT | |
418 yes SetWindowsHookEx | |
419 yes LoadBitmap | |
420 yes LoadCursor | |
421 yes LoadCursorFromFile | |
422 yes LoadIcon | |
423 yes LoadImage NT 4.0+ only | |
424 yes LoadString | |
425 yes IsDialogMessage | |
426 yes DlgDirList | |
427 yes DlgDirSelectEx | |
428 yes DlgDirListComboBox | |
429 yes DlgDirSelectComboBoxEx | |
430 yes DefFrameProc | |
431 no DefMDIChildProc return value is conditionalized on _MAC, messes up parser | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
432 override HWND CreateMDIWindowW(LPWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HINSTANCE,LPARAM); error arg 1, VS6 prototype, missing const |
771 | 433 yes WinHelp |
434 no ChangeDisplaySettings split-sized LPDEVMODE | |
435 no ChangeDisplaySettingsEx split-sized LPDEVMODE; NT 5.0/Win98+ only | |
436 no EnumDisplaySettings split-sized LPDEVMODE | |
437 no EnumDisplayDevices split-sized PDISPLAY_DEVICE; NT 5.0+ only, no Win98 | |
438 yes SystemParametersInfo probs w/ICONMETRICS, NONCLIENTMETRICS | |
439 no GetMonitorInfo NT 5.0/Win98+ only | |
440 no GetWindowModuleFileName NT 5.0+ only | |
441 no RealGetWindowClass NT 5.0+ only | |
442 no GetAltTabInfo NT 5.0+ only | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
443 review BroadcastSystemMessageEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
444 review EnumDisplaySettingsEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
445 review GetClassLongPtr |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
446 review GetRawInputDeviceInfo |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
447 review GetWindowLongPtr |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
448 review SetClassLongPtr |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
449 review SetWindowLongPtr |
771 | 450 |
451 file WINGDI.H | |
452 | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
453 begin-bracket defined (HAVE_MS_WINDOWS) |
771 | 454 // split-sized LOGCOLORSPACE |
455 // split-sized TEXTMETRIC | |
456 // split-sized NEWTEXTMETRIC | |
457 // split-sized NEWTEXTMETRICEX | |
458 // split-sized LOGFONT | |
459 // split-sized ENUMLOGFONT | |
460 // split-sized ENUMLOGFONTEX | |
461 // split-sized EXTLOGFONT, used in EMREXTCREATEFONTINDIRECTW (Unicode-only) and (???) in DEVINFO (DDK structure) | |
462 // split-sized DEVMODE | |
463 // split-sized DISPLAY_DEVICE, used in EnumDisplayDevices | |
464 // split-sized OUTLINETEXTMETRIC | |
465 // split-simple POLYTEXT | |
466 // split-simple GCP_RESULTS | |
467 // split-sized function pointer OLDFONTENUMPROC, same as FONTENUMPROC | |
468 // split-sized function pointer FONTENUMPROC | |
469 yes AddFontResource | |
470 yes CopyMetaFile | |
471 skip CreateDC split-sized DEVMODE | |
472 skip CreateFontIndirect split-sized LOGFONT | |
473 yes CreateFont | |
474 skip CreateIC split-sized DEVMODE | |
475 yes CreateMetaFile | |
476 yes CreateScalableFontResource | |
477 skip DeviceCapabilities split-sized DEVMODE | |
478 skip EnumFontFamiliesEx split-complex FONTENUMPROC; NT 4.0+ only | |
479 no EnumFontFamilies split-complex FONTENUMPROC | |
480 no EnumFonts split-complex FONTENUMPROC | |
481 yes GetCharWidth | |
482 yes GetCharWidth32 | |
483 yes GetCharWidthFloat | |
484 yes GetCharABCWidths | |
485 yes GetCharABCWidthsFloat | |
486 yes GetGlyphOutline | |
487 yes GetMetaFile | |
488 no GetOutlineTextMetrics split-sized LPOUTLINETEXTMETRIC | |
489 yes GetTextExtentPoint | |
490 yes GetTextExtentPoint32 | |
491 yes GetTextExtentExPoint | |
492 split GetCharacterPlacement LPGCP_RESULTS NT 4.0+ only | |
493 no GetGlyphIndices NT 5.0+ only | |
494 no AddFontResourceEx NT 5.0+ only | |
495 no RemoveFontResourceEx NT 5.0+ only | |
496 // split-sized AXISINFO, used in AXESLIST; NT 5.0+ only | |
497 // split-sized AXESLIST, used in ENUMLOGFONTEXDV; NT 5.0+ only | |
498 // split-sized ENUMLOGFONTEXDV; NT 5.0+ only | |
499 no CreateFontIndirectEx split-sized ENUMLOGFONTEXDV; NT 5.0+ only | |
500 // split-sized ENUMTEXTMETRIC, returned in EnumFontFamExProc, on NT 5.0+; NT 5.0+ only | |
501 skip ResetDC split-sized DEVMODE | |
502 yes RemoveFontResource | |
503 yes CopyEnhMetaFile | |
504 yes CreateEnhMetaFile | |
505 yes GetEnhMetaFile | |
506 yes GetEnhMetaFileDescription | |
507 skip GetTextMetrics split-sized LPTEXTMETRIC | |
508 // split-simple DOCINFO | |
509 split StartDoc DOCINFO | |
510 skip GetObject split-sized LOGFONT | |
511 yes TextOut | |
512 yes ExtTextOut | |
513 split PolyTextOut POLYTEXT | |
514 yes GetTextFace | |
515 yes GetKerningPairs | |
516 // split-simple function pointer ICMENUMPROC | |
517 no GetLogColorSpace split-sized LPLOGCOLORSPACE; NT 4.0+ only | |
518 no CreateColorSpace split-sized LPLOGCOLORSPACE; NT 4.0+ only | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
519 yes GetICMProfile NT 4.0+ only, former error in Cygwin prototype but no more (Cygwin 1.7, 1-30-10) |
771 | 520 yes SetICMProfile NT 4.0+ only |
521 split EnumICMProfiles ICMENUMPROC NT 4.0+ only | |
522 skip UpdateICMRegKey NT 4.0+ only, error in Cygwin prototype | |
523 // non-split EMREXTTEXTOUT (A and W versions identical) | |
524 // non-split EMRPOLYTEXTOUT (A and W versions identical) | |
525 // Unicode-only EMREXTCREATEFONTINDIRECTW | |
526 no wglUseFontBitmaps causes link error | |
527 no wglUseFontOutlines causes link error | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
528 end-bracket |
771 | 529 |
530 file WINSPOOL.H | |
531 | |
532 begin-bracket defined (HAVE_MS_WINDOWS) | |
533 yes EnumPrinters #### problems with DEVMODE pointer in PRINTER_INFO_2 | |
534 skip OpenPrinter split-sized DEVMODE pointer in split PRINTER_DEFAULTS | |
535 no ResetPrinter split-sized DEVMODE pointer in split PRINTER_DEFAULTS | |
536 no SetJob split-sized DEVMODE pointer in split JOB_INFO_2 | |
537 no GetJob split-sized DEVMODE pointer in split JOB_INFO_2 | |
538 no EnumJobs split-sized DEVMODE pointer in split JOB_INFO_2 | |
539 no AddPrinter split-sized DEVMODE pointer in split PRINTER_INFO_2 | |
540 no SetPrinter split-sized DEVMODE pointer in split PRINTER_INFO_2 | |
541 no GetPrinter split-sized DEVMODE pointer in split PRINTER_INFO_2 | |
542 // other than DocumentProperties below, we don't use any of the others, | |
543 // and they all pretty much have complicated interfaces with lots of | |
544 // split structures, etc. | |
545 no AddPrinterDriver not used, complicated interface with split structures | |
546 no AddPrinterDriverEx not used, complicated interface with split structures | |
547 no EnumPrinterDrivers not used, complicated interface with split structures | |
548 no GetPrinterDriver not used, complicated interface with split structures | |
549 no GetPrinterDriverDirectory not used, complicated interface with split structures | |
550 no DeletePrinterDriver not used, complicated interface with split structures | |
551 no DeletePrinterDriverEx not used, complicated interface with split structures | |
552 no AddPerMachineConnection not used, complicated interface with split structures | |
553 no DeletePerMachineConnection not used, complicated interface with split structures | |
554 no EnumPerMachineConnections not used, complicated interface with split structures | |
555 no AddPrintProcessor not used, complicated interface with split structures | |
556 no EnumPrintProcessors not used, complicated interface with split structures | |
557 no GetPrintProcessorDirectory not used, complicated interface with split structures | |
558 no EnumPrintProcessorDatatypes not used, complicated interface with split structures | |
559 no DeletePrintProcessor not used, complicated interface with split structures | |
560 no StartDocPrinter not used, complicated interface with split structures | |
561 no AddJob not used, complicated interface with split structures | |
562 skip DocumentProperties split-sized DEVMODE, error in Cygwin prototype | |
563 no AdvancedDocumentProperties not used, complicated interface with split structures | |
564 no GetPrinterData not used, complicated interface with split structures | |
565 no GetPrinterDataEx not used, complicated interface with split structures | |
566 no EnumPrinterData not used, complicated interface with split structures | |
567 no EnumPrinterDataEx not used, complicated interface with split structures | |
568 no EnumPrinterKey not used, complicated interface with split structures | |
569 no SetPrinterData not used, complicated interface with split structures | |
570 no SetPrinterDataEx not used, complicated interface with split structures | |
571 no DeletePrinterData not used, complicated interface with split structures | |
572 no DeletePrinterDataEx not used, complicated interface with split structures | |
573 no DeletePrinterKey not used, complicated interface with split structures | |
574 no PrinterMessageBox not used, complicated interface with split structures | |
575 no AddForm not used, complicated interface with split structures | |
576 no DeleteForm not used, complicated interface with split structures | |
577 no GetForm not used, complicated interface with split structures | |
578 no SetForm not used, complicated interface with split structures | |
579 no EnumForms not used, complicated interface with split structures | |
580 no EnumMonitors not used, complicated interface with split structures | |
581 no AddMonitor not used, complicated interface with split structures | |
582 no DeleteMonitor not used, complicated interface with split structures | |
583 no EnumPorts not used, complicated interface with split structures | |
584 no AddPort not used, complicated interface with split structures | |
585 no ConfigurePort not used, complicated interface with split structures | |
586 no DeletePort not used, complicated interface with split structures | |
587 no XcvData not used, complicated interface with split structures | |
588 no SetPort not used, complicated interface with split structures | |
589 no AddPrinterConnection not used, complicated interface with split structures | |
590 no DeletePrinterConnection not used, complicated interface with split structures | |
591 no AddPrintProvidor not used, complicated interface with split structures | |
592 no DeletePrintProvidor not used, complicated interface with split structures | |
593 no SetPrinterHTMLView not used, complicated interface with split structures | |
594 no GetPrinterHTMLView not used, complicated interface with split structures | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
595 review GetDefaultPrinter |
771 | 596 end-bracket |
597 | |
598 file SHELLAPI.H | |
599 | |
600 yes DragQueryFile | |
601 yes ShellExecute | |
602 yes FindExecutable | |
603 no CommandLineToArgv Unicode-only | |
604 yes ShellAbout | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
605 override HICON ExtractAssociatedIconW(HINSTANCE, LPWSTR, LPWORD); error arg2, Cygwin prototype, extra const |
771 | 606 yes ExtractIcon |
607 // split-simple DRAGINFO, used ??? (docs say "Not currently supported") | |
608 begin-bracket !defined (CYGWIN_HEADERS) | |
609 yes DoEnvironmentSubst NT 4.0+ only | |
610 end-bracket | |
611 no FindEnvironmentString causes link error; NT 4.0+ only | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
612 yes ExtractIconEx NT 4.0+ only, former error in Cygwin prototype but no more (Cygwin 1.7, 1-30-10) |
771 | 613 // split-simple SHFILEOPSTRUCT, used in SHFileOperation |
614 // split-simple SHNAMEMAPPING, used in SHFileOperation | |
615 split SHFileOperation LPSHFILEOPSTRUCT NT 4.0+ only | |
616 // split-simple SHELLEXECUTEINFO, used in ShellExecuteEx | |
617 split ShellExecuteEx LPSHELLEXECUTEINFO NT 4.0+ only | |
618 no WinExecError causes link error; NT 4.0+ only | |
619 begin-bracket !defined (CYGWIN_HEADERS) | |
620 yes SHQueryRecycleBin NT 4.0+ only | |
621 yes SHEmptyRecycleBin NT 4.0+ only | |
622 end-bracket | |
623 // split-sized NOTIFYICONDATA, used in Shell_NotifyIcon | |
624 no Shell_NotifyIcon split-sized NOTIFYICONDATA, NT 4.0+ only | |
625 // split-sized SHFILEINFO, used in SHGetFileInfo | |
626 skip SHGetFileInfo split-sized SHFILEINFO, NT 4.0+ only | |
627 no SHGetDiskFreeSpace causes link error; NT 4.0+ only | |
628 begin-bracket !defined (CYGWIN_HEADERS) | |
629 yes SHGetNewLinkInfo NT 4.0+ only | |
630 yes SHInvokePrinterCommand NT 4.0+ only | |
631 end-bracket | |
632 | |
633 end-unicode-encapsulation-script | |
634 | |
635 file COMMCTRL.H | |
636 | |
637 yes ImageList_LoadImage | |
638 WC_HEADER | |
639 HDITEM | |
640 LPHDITEM | |
641 HDM_INSERTITEM | |
642 HDM_GETITEM | |
643 HDM_SETITEM | |
644 HDN_ITEMCHANGING | |
645 HDN_ITEMCHANGED | |
646 HDN_ITEMCLICK | |
647 HDN_ITEMDBLCLICK | |
648 HDN_DIVIDERDBLCLICK | |
649 HDN_BEGINTRACK | |
650 HDN_ENDTRACK | |
651 HDN_TRACK | |
652 HDN_GETDISPINFO | |
653 NMHEADER | |
654 LPNMHEADER | |
655 NMHDDISPINFO | |
656 LPNMHDDISPINFO | |
657 TOOLBARCLASSNAME | |
658 TBSAVEPARAMS | |
659 LPTBSAVEPARAMS | |
660 TB_GETBUTTONTEXT | |
661 TB_SAVERESTORE | |
662 TB_ADDSTRING | |
663 TBBUTTONINFO | |
664 LPTBBUTTONINFO | |
665 TB_GETBUTTONINFO | |
666 TB_SETBUTTONINFO | |
667 TB_INSERTBUTTON | |
668 TB_ADDBUTTONS | |
669 TBN_GETINFOTIP | |
670 NMTBGETINFOTIP | |
671 LPNMTBGETINFOTIP | |
672 TBN_GETDISPINFO | |
673 LPNMTBDISPINFO | |
674 TBN_GETBUTTONINFO | |
675 NMTOOLBAR | |
676 LPNMTOOLBAR | |
677 REBARCLASSNAME | |
678 REBARBANDINFO | |
679 LPREBARBANDINFO | |
680 LPCREBARBANDINFO | |
681 RB_INSERTBAND | |
682 RB_SETBANDINFO | |
683 RB_GETBANDINFO | |
684 TOOLTIPS_CLASS | |
685 TTTOOLINFO | |
686 PTOOLINFO | |
687 LPTTTOOLINFO | |
688 TTM_ADDTOOL | |
689 TTM_DELTOOL | |
690 TTM_NEWTOOLRECT | |
691 TTM_GETTOOLINFO | |
692 TTM_SETTOOLINFO | |
693 TTM_HITTEST | |
694 TTM_GETTEXT | |
695 TTM_UPDATETIPTEXT | |
696 TTM_ENUMTOOLS | |
697 TTM_GETCURRENTTOOL | |
698 TTHITTESTINFO | |
699 LPTTHITTESTINFO | |
700 TTN_GETDISPINFO | |
701 NMTTDISPINFO | |
702 LPNMTTDISPINFO | |
703 CreateStatusWindow | |
704 DrawStatusText | |
705 STATUSCLASSNAME | |
706 SB_GETTEXT | |
707 SB_SETTEXT | |
708 SB_GETTEXTLENGTH | |
709 SB_SETTIPTEXT | |
710 SB_GETTIPTEXT | |
711 TRACKBAR_CLASS | |
712 UPDOWN_CLASS | |
713 PROGRESS_CLASS | |
714 HOTKEY_CLASS | |
715 WC_LISTVIEW | |
716 LVITEM | |
717 LPLVITEM | |
718 LPSTR_TEXTCALLBACK | |
719 LVM_GETITEM | |
720 LVM_SETITEM | |
721 LVM_INSERTITEM | |
722 LVFINDINFO | |
723 LVM_FINDITEM | |
724 LVM_GETSTRINGWIDTH | |
725 LVM_EDITLABEL | |
726 LVCOLUMN | |
727 LPLVCOLUMN | |
728 LVM_GETCOLUMN | |
729 LVM_SETCOLUMN | |
730 LVM_GETITEMTEXT | |
731 LVM_SETITEMTEXT | |
732 LVM_GETISEARCHSTRING | |
733 LVBKIMAGE | |
734 LPLVBKIMAGE | |
735 LVM_SETBKIMAGE | |
736 LVM_GETBKIMAGE | |
737 LVN_ODFINDITEM | |
738 LVN_BEGINLABELEDIT | |
739 LVN_ENDLABELEDIT | |
740 LVN_GETDISPINFO | |
741 LVN_SETDISPINFO | |
742 NMLVDISPINFO | |
743 LVN_GETINFOTIP | |
744 NMLVGETINFOTIP | |
745 LPNMLVGETINFOTIP | |
746 WC_TREEVIEW | |
747 TVITEM | |
748 LPTVITEM | |
749 TVINSERTSTRUCT | |
750 LPTVINSERTSTRUCT | |
751 TVM_INSERTITEM | |
752 TVM_GETITEM | |
753 TVM_SETITEM | |
754 TVM_EDITLABEL | |
755 TVM_GETISEARCHSTRING | |
756 NMTREEVIEW | |
757 LPNMTREEVIEW | |
758 NMTVDISPINFO | |
759 LPNMTVDISPINFO | |
760 TVN_SELCHANGING | |
761 TVN_SELCHANGED | |
762 TVN_GETDISPINFO | |
763 TVN_SETDISPINFO | |
764 TVN_ITEMEXPANDING | |
765 TVN_ITEMEXPANDED | |
766 TVN_BEGINDRAG | |
767 TVN_BEGINRDRAG | |
768 TVN_DELETEITEM | |
769 TVN_BEGINLABELEDIT | |
770 TVN_ENDLABELEDIT | |
771 TVN_GETINFOTIP | |
772 NMTVGETINFOTIP | |
773 LPNMTVGETINFOTIP | |
774 WC_COMBOBOXEX | |
775 COMBOBOXEXITEM | |
776 PCOMBOBOXEXITEM | |
777 PCCOMBOBOXEXITEM | |
778 CBEM_INSERTITEM | |
779 CBEM_SETITEM | |
780 CBEM_GETITEM | |
781 NMCOMBOBOXEX | |
782 PNMCOMBOBOXEX | |
783 CBEN_GETDISPINFO | |
784 CBEN_DRAGBEGIN | |
785 CBEN_ENDEDIT | |
786 NMCBEDRAGBEGIN | |
787 LPNMCBEDRAGBEGIN | |
788 PNMCBEDRAGBEGIN | |
789 NMCBEENDEDIT | |
790 LPNMCBEENDEDIT | |
791 PNMCBEENDEDIT | |
792 WC_TABCONTROL | |
793 TCITEMHEADER | |
794 LPTCITEMHEADER | |
795 TCITEM | |
796 LPTCITEM | |
797 TCM_GETITEM | |
798 TCM_SETITEM | |
799 TCM_INSERTITEM | |
800 ANIMATE_CLASS | |
801 ACM_OPEN | |
802 MONTHCAL_CLASS | |
803 DATETIMEPICK_CLASS | |
804 DTM_SETFORMAT | |
805 DTN_USERSTRING | |
806 NMDATETIMESTRING | |
807 LPNMDATETIMESTRING | |
808 DTN_WMKEYDOWN | |
809 NMDATETIMEWMKEYDOWN | |
810 LPNMDATETIMEWMKEYDOWN | |
811 DTN_FORMAT | |
812 NMDATETIMEFORMAT | |
813 LPNMDATETIMEFORMAT | |
814 DTN_FORMATQUERY | |
815 NMDATETIMEFORMATQUERY | |
816 LPNMDATETIMEFORMATQUERY | |
817 WC_IPADDRESS | |
818 WC_PAGESCROLLER | |
819 WC_NATIVEFONTCTL | |
820 | |
821 begin-unicode-encapsulation-script | |
822 | |
823 file COMMDLG.H | |
824 | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
825 begin-bracket defined (HAVE_MS_WINDOWS) |
771 | 826 split GetOpenFileName LPOPENFILENAME |
827 split GetSaveFileName LPOPENFILENAME | |
828 yes GetFileTitle | |
829 no CommDlg_OpenSave_GetSpec macro | |
830 no CommDlg_OpenSave_GetFilePath macro | |
831 no CommDlg_OpenSave_GetFolderPath macro | |
832 split ChooseColor LPCHOOSECOLOR | |
833 split FindText LPFINDREPLACE | |
834 split ReplaceText LPFINDREPLACE | |
835 no AfxReplaceText mac only | |
836 no ChooseFont split-sized LPLOGFONT in LPCHOOSEFONT | |
837 // LBSELCHSTRING | |
838 // SHAREVISTRING | |
839 // FILEOKSTRING | |
840 // COLOROKSTRING | |
841 // SETRGBSTRING | |
842 // HELPMSGSTRING | |
843 // FINDMSGSTRING | |
844 skip PrintDlg LPPRINTDLG with split-sized DEVMODE handle | |
845 skip PageSetupDlg LPPAGESETUPDLG with split-sized DEVMODE handle | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
846 review PrintDlgEx |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
847 end-bracket |
771 | 848 |
849 file DDE.H | |
850 | |
851 // nothing | |
852 | |
853 file DDEML.H | |
854 | |
855 yes DdeInitialize | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
856 yes DdeCreateStringHandle former error in Cygwin prototype, but no more (Cygwin 1.7, 1-30-10) |
771 | 857 yes DdeQueryString |
858 // #### split-sized (or split-simple??? not completely obvious) structure MONHSZSTRUCT, used when DDE event MF_HSZ_INFO is sent as part of the XTYP_MONITOR transaction sent to a DDE callback; not yet handled | |
859 | |
860 file IMM.H | |
861 | |
862 begin-bracket defined (HAVE_MS_WINDOWS) | |
863 yes ImmInstallIME | |
864 yes ImmGetDescription | |
865 yes ImmGetIMEFileName | |
866 yes ImmGetCompositionString | |
2500 | 867 skip ImmSetCompositionString different prototypes in VC6 and VC7 |
771 | 868 yes ImmGetCandidateListCount |
869 yes ImmGetCandidateList | |
870 yes ImmGetGuideLine | |
871 skip ImmGetCompositionFont split-sized LOGFONT | |
872 skip ImmSetCompositionFont split-sized LOGFONT | |
873 yes ImmConfigureIME // split-simple REGISTERWORD | |
874 yes ImmEscape // strings of various sorts | |
875 yes ImmGetConversionList | |
876 yes ImmIsUIMessage | |
877 yes ImmRegisterWord | |
878 yes ImmUnregisterWord | |
879 no ImmGetRegisterWordStyle split-sized STYLEBUF | |
880 split ImmEnumRegisterWord REGISTERWORDENUMPROC | |
881 no ImmGetImeMenuItems split-sized IMEMENUITEMINFO | |
882 end-bracket | |
883 | |
884 file MMSYSTEM.H | |
885 | |
886 yes sndPlaySound | |
887 yes PlaySound | |
888 no waveOutGetDevCaps split-sized LPWAVEOUTCAPS | |
889 yes waveOutGetErrorText | |
890 no waveInGetDevCaps split-sized LPWAVEINCAPS | |
891 yes waveInGetErrorText | |
892 no midiOutGetDevCaps split-sized LPMIDIOUTCAPS | |
893 yes midiOutGetErrorText | |
894 no midiInGetDevCaps split-sized LPMIDIOUTCAPS | |
895 yes midiInGetErrorText | |
896 no auxGetDevCaps split-sized LPAUXCAPS | |
897 no mixerGetDevCaps split-sized LPMIXERCAPS | |
898 no mixerGetLineInfo split-sized LPMIXERLINE | |
899 no mixerGetLineControls split-sized LPMIXERCONTROL | |
900 no mixerGetControlDetails split-sized LPMIXERCONTROL in LPMIXERLINECONTROLS in LPMIXERCONTROLDETAILS | |
901 no joyGetDevCaps split-sized LPJOYCAPS | |
902 yes mmioStringToFOURCC | |
903 yes mmioInstallIOProc | |
904 yes mmioOpen | |
905 yes mmioRename | |
906 yes mciSendCommand | |
907 yes mciSendString | |
908 yes mciGetDeviceID | |
909 begin-bracket !defined (MINGW) | |
778 | 910 no mciGetDeviceIDFromElementID missing from Win98se version of ADVAPI32.dll |
771 | 911 end-bracket |
912 yes mciGetErrorString | |
913 | |
914 file WINNETWK.H | |
915 | |
916 begin-bracket defined (HAVE_MS_WINDOWS) | |
917 yes WNetAddConnection | |
918 split WNetAddConnection2 LPNETRESOURCE | |
919 split WNetAddConnection3 LPNETRESOURCE | |
920 yes WNetCancelConnection | |
921 yes WNetCancelConnection2 | |
922 yes WNetGetConnection | |
923 split WNetUseConnection LPNETRESOURCE | |
924 split WNetConnectionDialog1 LPCONNECTDLGSTRUCT contains split-simple LPNETRESOURCE | |
925 split WNetDisconnectDialog1 LPDISCDLGSTRUCT | |
926 split WNetOpenEnum LPNETRESOURCE | |
927 yes WNetEnumResource | |
928 yes WNetGetUniversalName | |
929 yes WNetGetUser | |
930 yes WNetGetProviderName | |
931 yes WNetGetNetworkInformation | |
932 // split-simple function pointer PFNGETPROFILEPATH | |
933 // split-simple function pointer PFNRECONCILEPROFILE | |
934 // split-simple function pointer PFNPROCESSPOLICIES | |
935 yes WNetGetLastError | |
936 split MultinetGetConnectionPerformance LPNETRESOURCE | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
937 review WNetSetConnection |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
938 review WNetGetResourceInformation |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
939 review WNetGetResourceParent |
771 | 940 end-bracket |
941 | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
942 // file IME.H -- doesn't exist under Cygwin |
771 | 943 |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
944 no SendIMEMessageEx obsolete, no docs available |
771 | 945 |
946 file OBJBASE.H | |
947 | |
948 // nothing | |
949 | |
950 file SHLOBJ.H | |
951 | |
952 // #### split code for IContextMenu not yet written | |
953 // split flag constant GCS_VERB of IContextMenu::GetCommandString | |
954 // split flag constant GCS_HELPTEXT of IContextMenu::GetCommandString | |
955 // split flag constant GCS_VALIDATE of IContextMenu::GetCommandString | |
956 // split string constant CMDSTR_NEWFOLDER of CMINVOKECOMMANDINFO.lpVerb or CMINVOKECOMMANDINFOEX.lpVerbW of IContextMenu::InvokeCommand | |
957 // split string constant CMDSTR_VIEWLIST of same | |
958 // split string constant CMDSTR_VIEWDETAILS of same | |
959 // #### split code for IExtractIcon, IShellLink, IShellExecuteHook, INewShortcutHook, ICopyHook, IFileViewer not yet written | |
960 // split interface IExtractIcon | |
961 // split interface IShellLink | |
962 // split interface IShellExecuteHook | |
963 // split interface INewShortcutHook | |
964 // split interface ICopyHook | |
965 // split interface IFileViewer | |
966 yes SHGetPathFromIDList | |
967 skip SHGetSpecialFolderPath error in Cygwin prototype, missing from Cygwin libraries | |
968 // split-simple structure BROWSEINFO used in SHBrowseForFolder | |
969 skip SHBrowseForFolder need to intercept callback for SendMessage | |
970 // split message BFFM_SETSTATUSTEXT handled in qxeSendMessage | |
971 // split message BFFM_SETSELECTION handled in qxeSendMessage | |
972 // split message BFFM_VALIDATEFAILED handled in qxeSHBrowseForFolder intercept proc | |
973 // #### code to handle split clipboard formats not yet written. this will | |
974 // #### be tricky -- all functions that use such clipboard formats need to | |
975 // #### be split, and the data itself munged. this may be too much effort, | |
976 // #### and we may just need to require that the app itself does the | |
977 // #### splitting. | |
978 // split clipboard format CFSTR_FILEDESCRIPTOR | |
979 // split clipboard format CFSTR_FILENAME | |
980 // split clipboard format CFSTR_FILENAMEMAP | |
981 // split-sized structure FILEDESCRIPTOR | |
982 // split-sized structure FILEGROUPDESCRIPTOR | |
983 // split flag SHCNF_PATH; we intercept SHChangeNotify | |
984 // split flag SHCNF_PRINTER; we intercept SHChangeNotify | |
985 // split flag SHARD_PATH; we intercept SHAddToRecentDocs | |
986 skip SHGetDataFromIDList split-sized WIN32_FIND_DATA or split-simple NETRESOURCE, missing from Cygwin libraries | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
987 review SHGetFolderPath |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
988 review SHGetIconOverlayIndex |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
989 review SHCreateDirectoryEx |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
990 review SHGetFolderPathAndSubDir |
771 | 991 |
992 file WINNLS.H | |
993 | |
798 | 994 no LOCALE_ENUMPROC not used, not examined yet |
995 no CODEPAGE_ENUMPROC not used, not examined yet | |
996 no DATEFMT_ENUMPROC not used, not examined yet | |
997 no DATEFMT_ENUMPROCEX not used, not examined yet | |
998 no TIMEFMT_ENUMPROC not used, not examined yet | |
999 no CALINFO_ENUMPROC not used, not examined yet | |
1000 no CALINFO_ENUMPROCEX not used, not examined yet | |
1001 no GetCPInfoEx not used, not examined yet | |
1002 no CompareString not used, not examined yet | |
1003 no LCMapString not used, not examined yet | |
1004 yes GetLocaleInfo | |
1005 yes SetLocaleInfo | |
1006 no GetTimeFormat not used, not examined yet | |
1007 no GetDateFormat not used, not examined yet | |
1008 no GetNumberFormat not used, not examined yet | |
1009 no GetCurrencyFormat not used, not examined yet | |
1010 no EnumCalendarInfo not used, not examined yet | |
1011 no EnumCalendarInfoEx not used, not examined yet | |
1012 no EnumTimeFormats not used, not examined yet | |
1013 no EnumDateFormats not used, not examined yet | |
1014 no EnumDateFormatsEx not used, not examined yet | |
1015 no GetStringTypeEx not used, not examined yet | |
800 | 1016 no GetStringType no such fun; A and W versions have different nos. of args |
798 | 1017 no FoldString not used, not examined yet |
1018 no EnumSystemLocales not used, not examined yet | |
1019 no EnumSystemCodePages not used, not examined yet | |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1020 review GetCalendarInfo |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1021 review GetGeoInfo |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1022 review SetCalendarInfo |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1023 review EnumSystemLanguageGroups |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1024 review EnumLanguageGroupLocales |
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1025 review EnumUILanguages |
798 | 1026 |
1027 end-unicode-encapsulation-script | |
771 | 1028 |
1029 file WINVER.H | |
1030 | |
1031 VerFindFile | |
1032 VerInstallFile | |
1033 GetFileVersionInfoSize | |
1034 GetFileVersionInfo | |
1035 VerLanguageName | |
1036 VerQueryValue | |
1037 | |
1038 begin-unicode-encapsulation-script | |
1039 | |
1040 file WINCON.H | |
1041 | |
1042 yes PeekConsoleInput | |
1043 yes ReadConsoleInput | |
1044 yes WriteConsoleInput | |
1045 yes ReadConsoleOutput | |
1046 yes WriteConsoleOutput | |
1047 yes ReadConsoleOutputCharacter | |
1048 yes WriteConsoleOutputCharacter | |
1049 no FillConsoleOutputCharacter split CHAR | |
1050 yes ScrollConsoleScreenBuffer | |
1051 yes GetConsoleTitle | |
1052 yes SetConsoleTitle | |
1053 yes ReadConsole | |
1054 yes WriteConsole | |
1055 | |
1056 file WINREG.H | |
1057 | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
1058 yes RegConnectRegistry former error in Cygwin prototype, but no more (Cygwin 1.7, 1-30-10) |
771 | 1059 yes RegCreateKey |
1060 yes RegCreateKeyEx | |
1061 yes RegDeleteKey | |
1062 yes RegDeleteValue | |
1063 yes RegEnumKey | |
1064 yes RegEnumKeyEx | |
1065 yes RegEnumValue | |
1066 yes RegLoadKey | |
1067 yes RegOpenKey | |
1068 yes RegOpenKeyEx | |
1069 yes RegQueryInfoKey | |
1070 yes RegQueryValue | |
1071 split RegQueryMultipleValues PVALENT | |
1072 yes RegQueryValueEx | |
1073 yes RegReplaceKey | |
1074 yes RegRestoreKey | |
1075 yes RegSaveKey | |
1076 yes RegSetValue | |
1077 yes RegSetValueEx | |
1078 yes RegUnLoadKey | |
1079 yes InitiateSystemShutdown | |
4903
70089046adef
fix compile problems in intl-encap* under VS6
Ben Wing <ben@xemacs.org>
parents:
4875
diff
changeset
|
1080 override BOOL AbortSystemShutdownW(LPWSTR); error arg 1, Cygwin prototype, extra const |
4875
49de55c09f18
add "review" lines in intl-encap-win32.c for all unseen functions in processed headers
Ben Wing <ben@xemacs.org>
parents:
4873
diff
changeset
|
1081 review RegDeleteKeyEx |
771 | 1082 |
1083 file EXCPT.H | |
1084 | |
1085 // nothing | |
1086 | |
1087 file STDARG.H | |
1088 | |
1089 // nothing | |
1090 | |
1091 file CDERR.H | |
1092 | |
1093 // nothing | |
1094 | |
1095 file WINPERF.H | |
1096 | |
1097 // nothing | |
1098 | |
1099 file RPC.H | |
1100 | |
1101 // nothing | |
1102 | |
1103 file NB30.H | |
1104 | |
1105 // nothing | |
1106 | |
800 | 1107 end-unicode-encapsulation-script |
1108 | |
771 | 1109 file WINSOCK2.H |
1110 | |
1111 SO_PROTOCOL_INFO | |
1112 SERVICE_TYPE_VALUE_SAPID | |
1113 SERVICE_TYPE_VALUE_TCPPORT | |
1114 SERVICE_TYPE_VALUE_UDPPORT | |
1115 SERVICE_TYPE_VALUE_OBJECTID | |
1116 WSADuplicateSocket | |
1117 LPFN_WSADUPLICATESOCKET | |
1118 WSAEnumProtocols | |
1119 LPFN_WSAENUMPROTOCOLS | |
1120 WSASocket | |
1121 LPFN_WSASOCKET | |
1122 WSAAddressToString | |
1123 LPFN_WSAADDRESSTOSTRING | |
1124 WSAStringToAddress | |
1125 LPFN_WSASTRINGTOADDRESS | |
1126 WSALookupServiceBegin | |
1127 LPFN_WSALOOKUPSERVICEBEGIN | |
1128 WSALookupServiceNext | |
1129 LPFN_WSALOOKUPSERVICENEXT | |
1130 WSAInstallServiceClass | |
1131 LPFN_WSAINSTALLSERVICECLASS | |
1132 WSAGetServiceClassInfo | |
1133 LPFN_WSAGETSERVICECLASSINFO | |
1134 WSAEnumNameSpaceProviders | |
1135 LPFN_WSAENUMNAMESPACEPROVIDERS | |
1136 WSAGetServiceClassNameByClassId | |
1137 LPFN_WSAGETSERVICECLASSNAMEBYCLASSID | |
1138 WSASetService | |
1139 LPFN_WSASETSERVICE | |
1140 | |
1141 file WINCRYPT.H | |
1142 | |
1143 MS_DEF_PROV_ | |
1144 MS_ENHANCED_PROV_ | |
1145 MS_DEF_RSA_SIG_PROV_ | |
1146 MS_DEF_RSA_SCHANNEL_PROV_ | |
1147 MS_ENHANCED_RSA_SCHANNEL_PROV_ | |
1148 MS_DEF_DSS_PROV_ | |
1149 MS_DEF_DSS_DH_PROV_ | |
1150 CryptAcquireContext | |
1151 CryptSignHash | |
1152 CryptVerifySignature | |
1153 CryptSetProvider | |
1154 CryptSetProviderEx | |
1155 CryptGetDefaultProvider | |
1156 CryptEnumProviderTypes | |
1157 CryptEnumProviders | |
1158 CERT_STORE_PROV_FILENAME_ | |
1159 CERT_STORE_PROV_SYSTEM_ | |
1160 sz_CERT_STORE_PROV_FILENAME_ | |
1161 sz_CERT_STORE_PROV_SYSTEM_ | |
1162 CERT_STORE_SAVE_TO_FILENAME_ | |
1163 CERT_FIND_SUBJECT_STR_ | |
1164 CERT_FIND_ISSUER_STR_ | |
1165 CertRDNValueToStr | |
1166 CertNameToStr | |
1167 CertStrToName | |
1168 CertOpenSystemStore | |
1169 CertAddEncodedCertificateToSystemStore | |
1170 | |
1171 */ | |
1172 | |
1173 /* the functions below are examples of hand-written Unicode-splitting | |
1174 code. note that it needs to be written very carefully and with | |
1175 intimate knowledge of the structures involved, and can sometimes be | |
1176 very hairy (EnumFontFamiliesEx is the most extreme example). it can | |
1177 be argued with some justification that this behind-the-scenes magic | |
1178 is confusing and potentially dangerous, and shouldn't be done. but | |
1179 making the calling code deal with the results in extremely hard-to- | |
1180 read code and is very error-prone. */ | |
1181 | |
1182 | |
1183 /************************************************************************/ | |
1184 /* would be encapsulatable but for parsing problems */ | |
1185 /************************************************************************/ | |
1186 | |
1187 /* NOTE: return value is conditionalized on _MAC, messes up parser */ | |
1188 LRESULT | |
1189 qxeDefWindowProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) | |
1190 { | |
1191 if (XEUNICODE_P) | |
1192 return DefWindowProcW (hWnd, Msg, wParam, lParam); | |
1193 else | |
1194 return DefWindowProcA (hWnd, Msg, wParam, lParam); | |
1195 } | |
1196 | |
1197 | |
1198 /* NOTE: two versions, STRICT and non-STRICT */ | |
1199 LRESULT | |
1200 qxeCallWindowProc (WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) | |
1201 { | |
1202 if (XEUNICODE_P) | |
1203 return CallWindowProcW (lpPrevWndFunc, hWnd, Msg, wParam, lParam); | |
1204 else | |
1205 return CallWindowProcA (lpPrevWndFunc, hWnd, Msg, wParam, lParam); | |
1206 } | |
1207 | |
1208 /* NOTE: return value is conditionalized on _MAC, messes up parser */ | |
1209 LRESULT | |
1210 qxeDefDlgProc (HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) | |
1211 { | |
1212 if (XEUNICODE_P) | |
1213 return DefDlgProcW (hDlg, Msg, wParam, lParam); | |
1214 else | |
1215 return DefDlgProcA (hDlg, Msg, wParam, lParam); | |
1216 } | |
1217 | |
1218 /* NOTE: return value is conditionalized on _MAC, messes up parser */ | |
1219 LRESULT | |
1220 qxeDefMDIChildProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | |
1221 { | |
1222 if (XEUNICODE_P) | |
1223 return DefMDIChildProcW (hWnd, uMsg, wParam, lParam); | |
1224 else | |
1225 return DefMDIChildProcA (hWnd, uMsg, wParam, lParam); | |
1226 } | |
1227 | |
800 | 1228 /* This one has two entry points called GetEnvironmentStringsW and |
1229 GetEnvironmentStrings. (misnamed A version) */ | |
1230 Extbyte * | |
1231 qxeGetEnvironmentStrings (void) | |
1232 { | |
1233 if (XEUNICODE_P) | |
1234 return (Extbyte *) GetEnvironmentStringsW (); | |
1235 else | |
1236 return (Extbyte *) GetEnvironmentStrings (); | |
1237 } | |
1238 | |
771 | 1239 |
1240 /************************************************************************/ | |
1241 /* would be encapsulatable but for Cygwin problems */ | |
1242 /************************************************************************/ | |
1243 | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
1244 #ifdef HAVE_MS_WINDOWS |
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
1245 |
771 | 1246 /* NOTE: NT 4.0+ only */ |
1247 BOOL | |
1248 qxeUpdateICMRegKey (DWORD arg1, Extbyte * arg2, Extbyte * arg3, UINT arg4) | |
1249 { | |
4837
493e2aa349fd
imported patch cygwin-headers-cosmetic-1-11-10
Ben Wing <ben@xemacs.org>
parents:
4824
diff
changeset
|
1250 #ifdef CYGWIN_HEADERS |
771 | 1251 /* Cygwin mistakenly declares the second argument as DWORD. */ |
1252 if (XEUNICODE_P) | |
1253 return UpdateICMRegKeyW (arg1, (DWORD) arg2, (LPWSTR) arg3, arg4); | |
1254 else | |
1255 return UpdateICMRegKeyA (arg1, (DWORD) arg2, (LPSTR) arg3, arg4); | |
1256 #else | |
1257 if (XEUNICODE_P) | |
1258 return UpdateICMRegKeyW (arg1, (LPWSTR) arg2, (LPWSTR) arg3, arg4); | |
1259 else | |
1260 return UpdateICMRegKeyA (arg1, (LPSTR) arg2, (LPSTR) arg3, arg4); | |
1261 #endif /* CYGWIN_HEADERS */ | |
1262 } | |
1263 | |
4873
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
1264 #endif /* HAVE_MS_WINDOWS */ |
50861fea97f6
regenerate intl-auto-encap-win32.c, now possible from Cygwin /usr/include/w32api headers
Ben Wing <ben@xemacs.org>
parents:
4837
diff
changeset
|
1265 |
771 | 1266 #ifndef CYGWIN /* present in headers but missing in shell32.a */ |
1267 | |
1268 BOOL | |
1269 qxeSHGetSpecialFolderPath (HWND hwndOwner, Extbyte * lpszPath, int nFolder, BOOL fCreate) | |
1270 { | |
1271 #ifdef CYGWIN_HEADERS | |
1272 /* Cygwin mistakenly declares the second argument as LPSTR in both | |
1273 versions. */ | |
1274 if (XEUNICODE_P) | |
1275 return SHGetSpecialFolderPathW (hwndOwner, (LPSTR) lpszPath, nFolder, fCreate); | |
1276 else | |
1277 return SHGetSpecialFolderPathA (hwndOwner, (LPSTR) lpszPath, nFolder, fCreate); | |
1278 #else | |
1279 if (XEUNICODE_P) | |
1280 return SHGetSpecialFolderPathW (hwndOwner, (LPWSTR) lpszPath, nFolder, fCreate); | |
1281 else | |
1282 return SHGetSpecialFolderPathA (hwndOwner, (LPSTR) lpszPath, nFolder, fCreate); | |
1283 #endif | |
1284 } | |
1285 | |
1286 #endif /* not CYGWIN */ | |
1287 | |
2500 | 1288 /********************************************************************************/ |
1289 /* would be encapsulatable but for header changes in different versions of VC++ */ | |
1290 /********************************************************************************/ | |
1291 | |
1292 #if MSC_VERSION >= 1300 | |
1293 | |
1294 BOOL | |
1295 qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROCW lpEnumFunc, LONG lParam) | |
1296 { | |
1297 if (XEUNICODE_P) | |
1298 return EnumResourceTypesW (hModule, lpEnumFunc, lParam); | |
1299 else | |
1300 return EnumResourceTypesA (hModule, (ENUMRESTYPEPROCA) lpEnumFunc, lParam); | |
1301 } | |
1302 | |
1303 BOOL | |
1304 qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROCW lpEnumFunc, LONG lParam) | |
1305 { | |
1306 if (XEUNICODE_P) | |
1307 return EnumResourceNamesW (hModule, (LPCWSTR) lpType, lpEnumFunc, lParam); | |
1308 else | |
1309 return EnumResourceNamesA (hModule, (LPCSTR) lpType, (ENUMRESNAMEPROCA) lpEnumFunc, lParam); | |
1310 } | |
1311 | |
1312 BOOL | |
1313 qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte * lpName, ENUMRESLANGPROCW lpEnumFunc, LONG lParam) | |
1314 { | |
1315 if (XEUNICODE_P) | |
1316 return EnumResourceLanguagesW (hModule, (LPCWSTR) lpType, (LPCWSTR) lpName, lpEnumFunc, lParam); | |
1317 else | |
1318 return EnumResourceLanguagesA (hModule, (LPCSTR) lpType, (LPCSTR) lpName, (ENUMRESLANGPROCA) lpEnumFunc, lParam); | |
1319 } | |
1320 | |
1321 #else | |
1322 | |
1323 BOOL | |
1324 qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG lParam) | |
1325 { | |
1326 if (XEUNICODE_P) | |
1327 return EnumResourceTypesW (hModule, lpEnumFunc, lParam); | |
1328 else | |
1329 return EnumResourceTypesA (hModule, lpEnumFunc, lParam); | |
1330 } | |
1331 | |
1332 BOOL | |
1333 qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROC lpEnumFunc, LONG lParam) | |
1334 { | |
1335 if (XEUNICODE_P) | |
1336 return EnumResourceNamesW (hModule, (LPCWSTR) lpType, lpEnumFunc, lParam); | |
1337 else | |
1338 return EnumResourceNamesA (hModule, (LPCSTR) lpType, lpEnumFunc, lParam); | |
1339 } | |
1340 | |
1341 BOOL | |
1342 qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte * lpName, ENUMRESLANGPROC lpEnumFunc, LONG lParam) | |
1343 { | |
1344 if (XEUNICODE_P) | |
1345 return EnumResourceLanguagesW (hModule, (LPCWSTR) lpType, (LPCWSTR) lpName, lpEnumFunc, lParam); | |
1346 else | |
1347 return EnumResourceLanguagesA (hModule, (LPCSTR) lpType, (LPCSTR) lpName, lpEnumFunc, lParam); | |
1348 } | |
1349 | |
1350 #endif /* MSC_VERSION >= 1300 */ | |
771 | 1351 |
1352 /************************************************************************/ | |
1353 /* files */ | |
1354 /************************************************************************/ | |
1355 | |
1356 static void | |
1357 copy_win32_find_dataa_to_win32_find_dataw (const WIN32_FIND_DATAA *pa, | |
1358 WIN32_FIND_DATAW *pw) | |
1359 { | |
1360 /* the layout of WIN32_FIND_DATA is | |
1361 | |
1362 non-split fields; | |
1363 TCHAR cFileName[...]; | |
1364 TCHAR cAlternateFileName[...]; | |
1365 */ | |
1366 | |
1367 xzero (*pw); | |
1368 memcpy (pw, pa, offsetof (WIN32_FIND_DATAA, cFileName)); | |
1369 memcpy (pw->cFileName, pa->cFileName, sizeof (pa->cFileName)); | |
1370 memcpy (pw->cAlternateFileName, pa->cAlternateFileName, | |
1371 sizeof (pa->cAlternateFileName)); | |
1372 } | |
1373 | |
1374 HANDLE | |
1375 qxeFindFirstFile (const Extbyte *lpFileName, | |
1376 WIN32_FIND_DATAW *lpFindFileData) | |
1377 { | |
1378 if (XEUNICODE_P) | |
1379 return FindFirstFileW ((LPCWSTR) lpFileName, lpFindFileData); | |
1380 else | |
1381 { | |
1382 WIN32_FIND_DATAA ansidat; | |
1383 HANDLE retval; | |
1384 | |
1385 retval = FindFirstFileA ((LPCSTR) lpFileName, &ansidat); | |
1386 if (retval != INVALID_HANDLE_VALUE) | |
1387 copy_win32_find_dataa_to_win32_find_dataw (&ansidat, lpFindFileData); | |
1388 return retval; | |
1389 } | |
1390 } | |
1391 | |
1392 BOOL | |
1393 qxeFindNextFile (HANDLE hFindFile, WIN32_FIND_DATAW *lpFindFileData) | |
1394 { | |
1395 if (XEUNICODE_P) | |
1396 return FindNextFileW (hFindFile, lpFindFileData); | |
1397 else | |
1398 { | |
1399 WIN32_FIND_DATAA ansidat; | |
1400 BOOL retval; | |
1401 | |
1402 retval = FindNextFileA (hFindFile, &ansidat); | |
1403 if (retval) | |
1404 copy_win32_find_dataa_to_win32_find_dataw (&ansidat, lpFindFileData); | |
1405 return retval; | |
1406 } | |
1407 } | |
1408 | |
1409 | |
1410 /************************************************************************/ | |
1411 /* shell */ | |
1412 /************************************************************************/ | |
1413 | |
1414 static void | |
1415 copy_shfileinfoa_to_shfileinfow (const SHFILEINFOA *pa, | |
778 | 1416 SHFILEINFOW *pw, UINT sz) |
771 | 1417 { |
1418 /* the layout of SHFILEINFO is | |
1419 | |
1420 non-split fields; | |
1421 TCHAR szDisplayName[...]; | |
1422 TCHAR szTypeName[...]; | |
1423 */ | |
1424 | |
778 | 1425 assert (sz >= sizeof (SHFILEINFOW)); |
771 | 1426 xzero (*pw); |
1427 memcpy (pw, pa, offsetof (SHFILEINFOA, szDisplayName)); | |
1428 memcpy (pw->szDisplayName, pa->szDisplayName, sizeof (pa->szDisplayName)); | |
1429 memcpy (pw->szTypeName, pa->szTypeName, sizeof (pa->szTypeName)); | |
1430 } | |
1431 | |
1432 DWORD | |
1433 qxeSHGetFileInfo (const Extbyte *pszPath, DWORD dwFileAttributes, | |
1434 SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags) | |
1435 { | |
1436 if (XEUNICODE_P) | |
1437 return SHGetFileInfoW ((LPCWSTR) pszPath, dwFileAttributes, | |
1438 psfi, cbFileInfo, uFlags); | |
1439 else | |
1440 { | |
1441 SHFILEINFOA ansidat; | |
1442 BOOL retval; | |
1443 | |
1444 retval = SHGetFileInfoA ((LPCSTR) pszPath, dwFileAttributes, | |
778 | 1445 (SHFILEINFOA FAR *) &ansidat, |
1446 cbFileInfo ? sizeof (ansidat) : 0, uFlags); | |
1447 if (retval && cbFileInfo) | |
1448 copy_shfileinfoa_to_shfileinfow (&ansidat, psfi, cbFileInfo); | |
771 | 1449 return retval; |
1450 } | |
1451 } | |
1452 | |
1453 struct intercepted_SHBrowseForFolder | |
1454 { | |
1455 BFFCALLBACK lpfn; | |
1456 LPARAM lParam; | |
1457 HWND hwnd; | |
1458 struct intercepted_SHBrowseForFolder *next; | |
1459 }; | |
1460 | |
1461 static struct intercepted_SHBrowseForFolder *SHBrowseForFolder_list; | |
1462 | |
1463 static int | |
1464 CALLBACK intercepted_SHBrowseForFolder_proc (HWND hwnd, UINT msg, | |
1465 LPARAM lParam, LPARAM lpData) | |
1466 { | |
1467 struct intercepted_SHBrowseForFolder *s = | |
1468 (struct intercepted_SHBrowseForFolder *) lpData; | |
1469 | |
1470 if (s->hwnd == 0) | |
1471 s->hwnd = hwnd; | |
1472 if (s->lpfn) | |
1473 { | |
1474 /* see below */ | |
1475 if (XEUNICODE_P && msg == BFFM_VALIDATEFAILEDW) | |
1476 msg = BFFM_VALIDATEFAILEDA; | |
1477 else if (!XEUNICODE_P && msg == BFFM_VALIDATEFAILEDA) | |
1478 msg = BFFM_VALIDATEFAILEDW; | |
1479 return (s->lpfn) (hwnd, msg, lParam, s->lParam); | |
1480 } | |
1481 else | |
1482 return 0; | |
1483 } | |
1484 | |
1204 | 1485 #ifdef HAVE_MS_WINDOWS |
1486 | |
771 | 1487 static int |
1488 is_SHBrowseForFolder (HWND hwnd) | |
1489 { | |
1490 struct intercepted_SHBrowseForFolder *s; | |
1491 | |
1492 for (s = SHBrowseForFolder_list; s; s = s->next) | |
1493 if (s->hwnd == hwnd) | |
1494 return 1; | |
1495 return 0; | |
1496 } | |
1497 | |
1204 | 1498 #endif /* HAVE_MS_WINDOWS */ |
1499 | |
771 | 1500 LPITEMIDLIST |
1501 qxeSHBrowseForFolder (LPBROWSEINFOW lpbi) | |
1502 { | |
1503 struct intercepted_SHBrowseForFolder s; | |
1504 LPITEMIDLIST retval; | |
1505 | |
1506 /* There are two outgoing Unicode-split messages: | |
1507 | |
1508 BFFM_SETSELECTION | |
1509 BFFM_SETSTATUSTEXT | |
1510 | |
1511 and one incoming: | |
1512 | |
1513 BFFM_VALIDATEFAILED | |
1514 | |
1515 To handle this, we need to intercept the callback. We handle the | |
1516 incoming message in the callback, and record the window; when | |
1517 qxeSendMessage() is called, we handle the outgoing messages. None of | |
1518 the messages have split-sized structures so we don't need to do | |
1519 anything complicated there. */ | |
1520 | |
1521 s.lParam = lpbi->lParam; | |
1522 s.lpfn = lpbi->lpfn; | |
1523 s.next = SHBrowseForFolder_list; | |
1524 s.hwnd = 0; | |
1525 SHBrowseForFolder_list = &s; | |
1526 | |
1527 lpbi->lpfn = intercepted_SHBrowseForFolder_proc; | |
1528 lpbi->lParam = (LPARAM) &s; | |
1529 | |
1530 if (XEUNICODE_P) | |
1531 retval = SHBrowseForFolderW (lpbi); | |
1532 else | |
1533 retval = SHBrowseForFolderA ((LPBROWSEINFOA) lpbi); | |
1534 SHBrowseForFolder_list = SHBrowseForFolder_list->next; | |
1535 return retval; | |
1536 } | |
1537 | |
1538 VOID | |
1539 qxeSHAddToRecentDocs (UINT uFlags, LPCVOID pv) | |
1540 { | |
1541 /* pv can be a string pointer; this is handled by Unicode-splitting the | |
1542 flag SHARD_PATH rather than the function itself. Fix up the flag to | |
1543 be correct. We write it symmetrically so it doesn't matter whether | |
1544 UNICODE is defined. */ | |
1545 if (XEUNICODE_P) | |
1546 { | |
1547 if (uFlags & SHARD_PATHA) | |
1548 { | |
1549 uFlags |= SHARD_PATHW; | |
1550 uFlags &= ~SHARD_PATHA; | |
1551 } | |
1552 } | |
1553 else | |
1554 { | |
1555 if (uFlags & SHARD_PATHW) | |
1556 { | |
1557 uFlags |= SHARD_PATHA; | |
1558 uFlags &= ~SHARD_PATHW; | |
1559 } | |
1560 } | |
1561 SHAddToRecentDocs (uFlags, pv); | |
1562 } | |
1563 | |
1564 VOID | |
1565 qxeSHChangeNotify (LONG wEventId, UINT uFlags, LPCVOID dwItem1, | |
1566 LPCVOID dwItem2) | |
1567 { | |
1568 /* works like SHAddToRecentDocs */ | |
1569 if (XEUNICODE_P) | |
1570 { | |
1571 if (uFlags & SHCNF_PATHA) | |
1572 { | |
1573 uFlags |= SHCNF_PATHW; | |
1574 uFlags &= ~SHCNF_PATHA; | |
1575 } | |
1576 if (uFlags & SHCNF_PRINTERA) | |
1577 { | |
1578 uFlags |= SHCNF_PRINTERW; | |
1579 uFlags &= ~SHCNF_PRINTERA; | |
1580 } | |
1581 } | |
1582 else | |
1583 { | |
1584 if (uFlags & SHCNF_PATHW) | |
1585 { | |
1586 uFlags |= SHCNF_PATHA; | |
1587 uFlags &= ~SHCNF_PATHW; | |
1588 } | |
1589 if (uFlags & SHCNF_PRINTERW) | |
1590 { | |
1591 uFlags |= SHCNF_PRINTERA; | |
1592 uFlags &= ~SHCNF_PRINTERW; | |
1593 } | |
1594 } | |
1595 SHChangeNotify (wEventId, uFlags, dwItem1, dwItem2); | |
1596 } | |
1597 | |
1598 #ifndef CYGWIN /* present in headers but missing in shell32.a */ | |
1599 | |
1600 HRESULT | |
1601 qxeSHGetDataFromIDList (IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat, | |
1602 PVOID pv, int cb) | |
1603 { | |
1604 if (XEUNICODE_P) | |
1605 return SHGetDataFromIDListW (psf, pidl, nFormat, pv, cb); | |
1606 else if (nFormat == SHGDFIL_FINDDATA) | |
1607 { | |
1608 WIN32_FIND_DATAA ansidat; | |
1609 BOOL retval; | |
1610 | |
1611 retval = SHGetDataFromIDListA (psf, pidl, nFormat, &ansidat, cb); | |
1612 if (retval == NOERROR) | |
1204 | 1613 copy_win32_find_dataa_to_win32_find_dataw (&ansidat, |
1614 (WIN32_FIND_DATAW *) pv); | |
771 | 1615 return retval; |
1616 } | |
1617 else | |
1618 /* nFormat == SHGDFIL_NETRESOURCE, and pv is split-simple NETRESOURCE | |
1619 structure, but we don't need to worry about that currently since we | |
1620 don't translate strings */ | |
1621 return SHGetDataFromIDListA (psf, pidl, nFormat, pv, cb); | |
1622 } | |
1623 | |
1624 #endif /* not CYGWIN */ | |
1625 | |
1626 | |
1627 | |
1628 #ifdef HAVE_MS_WINDOWS | |
1629 | |
1630 /************************************************************************/ | |
1631 /* devmode */ | |
1632 /************************************************************************/ | |
1633 | |
1634 /* These functions return globally allocated blocks because some | |
1635 callers (e.g. qxePrintDlg) want this. */ | |
1636 | |
1637 static HGLOBAL | |
1638 copy_devmodew_to_devmodea (const DEVMODEW *src, DEVMODEA *dst) | |
1639 { | |
1640 /* the layout of DEVMODE is | |
1641 | |
1642 TCHAR dmDeviceName[...]; | |
1643 non-split fields, including dmSize (size of structure; differs between | |
1644 Unicode and ANSI) and dmDriverExtra; | |
1645 TCHAR dmFormName[...]; | |
1646 non-split fields; | |
1647 extra data, of size DEVMODE->dmDriverExtra | |
1648 */ | |
1649 HGLOBAL hdst = NULL; | |
1650 | |
1651 if (!dst) | |
1652 { | |
1653 hdst = GlobalAlloc (GHND, src->dmSize + src->dmDriverExtra - | |
1654 (sizeof (DEVMODEW) - sizeof (DEVMODEA))); | |
1655 dst = (DEVMODEA *) GlobalLock (hdst); | |
1656 } | |
1657 | |
1658 memcpy (dst->dmDeviceName, src->dmDeviceName, sizeof (dst->dmDeviceName)); | |
1659 memcpy ((char *) dst + sizeof (dst->dmDeviceName), | |
1660 (char *) src + sizeof (src->dmDeviceName), | |
1661 offsetof (DEVMODEA, dmFormName) - sizeof (dst->dmDeviceName)); | |
1662 dst->dmSize -= sizeof (DEVMODEW) - sizeof (DEVMODEA); | |
1663 memcpy (dst->dmFormName, src->dmFormName, sizeof (dst->dmFormName)); | |
1664 memcpy ((char *) dst + offsetof (DEVMODEA, dmFormName) + | |
1665 sizeof (dst->dmFormName), | |
1666 (char *) src + offsetof (DEVMODEW, dmFormName) + | |
1667 sizeof (src->dmFormName), | |
1668 dst->dmSize + dst->dmDriverExtra - | |
1669 (offsetof (DEVMODEA, dmFormName) + sizeof (dst->dmFormName))); | |
1670 | |
1671 if (hdst) | |
1672 GlobalUnlock (hdst); | |
1673 return hdst; | |
1674 } | |
1675 | |
1676 static HGLOBAL | |
1677 copy_devmodea_to_devmodew (const DEVMODEA *src, DEVMODEW *dst) | |
1678 { | |
1679 HGLOBAL hdst = NULL; | |
1680 | |
1681 if (!dst) | |
1682 { | |
1683 hdst = GlobalAlloc (GHND, src->dmSize + src->dmDriverExtra + | |
1684 (sizeof (DEVMODEW) - sizeof (DEVMODEA))); | |
1685 dst = (DEVMODEW *) GlobalLock (hdst); | |
1686 } | |
1687 | |
1688 memcpy (dst->dmDeviceName, src->dmDeviceName, sizeof (src->dmDeviceName)); | |
1689 memcpy ((char *) dst + sizeof (dst->dmDeviceName), | |
1690 (char *) src + sizeof (src->dmDeviceName), | |
1691 offsetof (DEVMODEA, dmFormName) - sizeof (src->dmDeviceName)); | |
1692 dst->dmSize += sizeof (DEVMODEW) - sizeof (DEVMODEA); | |
1693 memcpy (dst->dmFormName, src->dmFormName, sizeof (src->dmFormName)); | |
1694 memcpy ((char *) dst + offsetof (DEVMODEW, dmFormName) + | |
1695 sizeof (dst->dmFormName), | |
1696 (char *) src + offsetof (DEVMODEA, dmFormName) + | |
1697 sizeof (src->dmFormName), | |
1698 src->dmSize + src->dmDriverExtra - | |
1699 (offsetof (DEVMODEA, dmFormName) + sizeof (src->dmFormName))); | |
1700 | |
1701 if (hdst) | |
1702 GlobalUnlock (hdst); | |
1703 return hdst; | |
1704 } | |
1705 | |
1706 HDC | |
1707 qxeCreateDC (const Extbyte *lpszDriver, const Extbyte *lpszDevice, | |
1708 const Extbyte *lpszOutput, CONST DEVMODEW *lpInitData) | |
1709 { | |
1710 if (XEUNICODE_P) | |
1711 return CreateDCW ((LPCWSTR) lpszDriver, (LPCWSTR) lpszDevice, | |
1712 (LPCWSTR) lpszOutput, lpInitData); | |
1713 else | |
1714 { | |
1715 HGLOBAL hInitData = NULL; | |
1716 DEVMODEA *lpInitDataa = NULL; | |
1717 HDC retval; | |
1718 | |
1719 if (lpInitData) | |
1720 { | |
1721 hInitData = copy_devmodew_to_devmodea (lpInitData, NULL); | |
1722 lpInitDataa = (DEVMODEA *) GlobalLock (hInitData); | |
1723 } | |
1724 retval = CreateDCA ((LPCSTR) lpszDriver, (LPCSTR) lpszDevice, | |
1725 (LPCSTR) lpszOutput, lpInitDataa); | |
1726 | |
1727 if (hInitData) | |
1728 { | |
1729 GlobalUnlock (hInitData); | |
1730 GlobalFree (hInitData); | |
1731 } | |
1732 | |
1733 return retval; | |
1734 } | |
1735 } | |
1736 | |
1737 HDC | |
1738 qxeResetDC (HDC hdc, CONST DEVMODEW *lpInitData) | |
1739 { | |
1740 if (XEUNICODE_P) | |
1741 return ResetDCW (hdc, lpInitData); | |
1742 else | |
1743 { | |
1744 HGLOBAL hInitData = NULL; | |
1745 DEVMODEA *lpInitDataa = NULL; | |
1746 HDC retval; | |
1747 | |
1748 if (lpInitData) | |
1749 { | |
1750 hInitData = copy_devmodew_to_devmodea (lpInitData, NULL); | |
1751 lpInitDataa = (DEVMODEA *) GlobalLock (hInitData); | |
1752 } | |
1753 retval = ResetDCA (hdc, lpInitDataa); | |
1754 | |
1755 if (hInitData) | |
1756 { | |
1757 GlobalUnlock (hInitData); | |
1758 GlobalFree (hInitData); | |
1759 } | |
1760 | |
1761 return retval; | |
1762 } | |
1763 } | |
1764 | |
1765 DWORD | |
1766 qxeOpenPrinter (Extbyte *pPrinterName, LPHANDLE phPrinter, | |
1767 LPPRINTER_DEFAULTSW pDefaultconst) | |
1768 { | |
1769 assert (!pDefaultconst); /* we don't split it, so let's make sure we | |
1770 don't try. */ | |
1771 if (XEUNICODE_P) | |
1772 return OpenPrinterW ((LPWSTR) pPrinterName, phPrinter, | |
1773 pDefaultconst); | |
1774 else | |
1775 return OpenPrinterA ((LPSTR) pPrinterName, phPrinter, | |
1776 (LPPRINTER_DEFAULTSA) pDefaultconst); | |
1777 } | |
1778 | |
1779 LONG | |
1780 qxeDocumentProperties (HWND hWnd, HANDLE hPrinter, Extbyte *pDeviceName, | |
1781 DEVMODEW *pDevModeOutput, DEVMODEW *pDevModeInput, | |
1782 DWORD fMode) | |
1783 { | |
1784 if (XEUNICODE_P) | |
2262 | 1785 #if defined (CYGWIN_HEADERS) && W32API_INSTALLED_VER < W32API_VER(3,1) |
1786 /* Cygwin used to mistakenly declare the fourth and fifth arguments as | |
771 | 1787 PDEVMODEA. */ |
1788 return DocumentPropertiesW (hWnd, hPrinter, (LPWSTR) pDeviceName, | |
1789 (DEVMODEA *) pDevModeOutput, | |
1790 (DEVMODEA *) pDevModeInput, fMode); | |
1791 #else | |
1792 return DocumentPropertiesW (hWnd, hPrinter, (LPWSTR) pDeviceName, | |
1793 pDevModeOutput, pDevModeInput, fMode); | |
1794 #endif /* CYGWIN_HEADERS */ | |
1795 else | |
1796 { | |
1797 HGLOBAL hDevModeInput = NULL; | |
1798 DEVMODEA *pDevModeInputa = NULL; | |
1799 LONG retval; | |
1800 | |
1801 if (pDevModeInput) | |
1802 { | |
1803 hDevModeInput = copy_devmodew_to_devmodea (pDevModeInput, NULL); | |
1804 pDevModeInputa = (DEVMODEA *) GlobalLock (hDevModeInput); | |
1805 } | |
1806 | |
1807 /* Here we cheat a bit to avoid a problem: If the output | |
1808 structure is given but not the input one, how do we know how | |
1809 big to allocate our shadow output structure? Since the | |
1810 shadow structure is ANSI and the original Unicode, we know | |
1811 the shadow structure is smaller than what's given, so we just | |
1812 write into the given structure and then fix. */ | |
1813 retval = DocumentPropertiesA (hWnd, hPrinter, (LPSTR) pDeviceName, | |
1814 pDevModeOutput ? | |
1815 (DEVMODEA *) pDevModeOutput : 0, | |
1816 pDevModeInput ? pDevModeInputa : 0, | |
1817 fMode); | |
1818 | |
1819 if (hDevModeInput) | |
1820 { | |
1821 GlobalUnlock (hDevModeInput); | |
1822 GlobalFree (hDevModeInput); | |
1823 } | |
1824 | |
1825 if (retval >= 0 && pDevModeOutput) | |
1826 { | |
1827 /* copy the shadow structure out of the way and then put the | |
1828 right contents back. */ | |
1829 DEVMODEA *shadow = (DEVMODEA *) pDevModeOutput; | |
1830 DEVMODEA *newshadow = alloca_array (DEVMODEA, shadow->dmSize + | |
1831 shadow->dmDriverExtra); | |
1832 | |
1833 memcpy (newshadow, shadow, shadow->dmSize + shadow->dmDriverExtra); | |
1834 copy_devmodea_to_devmodew (newshadow, pDevModeOutput); | |
1835 } | |
1836 | |
1837 if (fMode == 0) | |
1838 retval += (sizeof (DEVMODEW) - sizeof (DEVMODEA)); | |
1839 return retval; | |
1840 } | |
1841 } | |
1842 | |
1843 static BOOL | |
1844 ansi_printer_dialog_1 (void *strucked, HGLOBAL *devmode_inout, int do_PrintDlg) | |
1845 { | |
1846 HGLOBAL hdma = NULL; | |
1847 HGLOBAL hdmw = *devmode_inout; | |
1848 DEVMODEW *dmw = NULL; | |
1849 BOOL retval; | |
1850 | |
1851 if (hdmw != NULL) | |
1852 { | |
1853 /* copy to shadow in structure if needed */ | |
1854 dmw = (DEVMODEW *) GlobalLock (hdmw); | |
1855 hdma = copy_devmodew_to_devmodea (dmw, NULL); | |
1856 *devmode_inout = hdma; | |
1857 } | |
1858 | |
1859 if (do_PrintDlg) | |
1860 retval = PrintDlgA ((PRINTDLGA *) strucked); | |
1861 else | |
1862 retval = PageSetupDlgA ((PAGESETUPDLGA *) strucked); | |
1863 | |
1864 if (retval) | |
1865 { | |
1866 /* copy the shadow output structure back to original, or | |
1867 allocate new one. */ | |
1868 if (*devmode_inout) | |
1869 { | |
1870 DEVMODEA *newdma = (DEVMODEA *) GlobalLock (*devmode_inout); | |
1871 if (dmw) | |
1872 { | |
1873 copy_devmodea_to_devmodew (newdma, dmw); | |
1874 GlobalUnlock (hdmw); | |
1875 } | |
1876 else | |
1877 hdmw = copy_devmodea_to_devmodew (newdma, NULL); | |
1878 GlobalUnlock (*devmode_inout); | |
1879 GlobalFree (*devmode_inout); | |
1880 *devmode_inout = hdmw; | |
1881 } | |
1882 else if (hdma) | |
1883 /* #### can this happen? */ | |
1884 GlobalFree (hdma); | |
1885 } | |
1886 | |
1887 return retval; | |
1888 } | |
1889 | |
1890 BOOL | |
1891 qxePrintDlg (PRINTDLGW *lppd) | |
1892 { | |
1893 if (XEUNICODE_P) | |
1894 return PrintDlgW (lppd); | |
1895 else | |
1896 return ansi_printer_dialog_1 (lppd, &lppd->hDevMode, 1); | |
1897 } | |
1898 | |
1899 BOOL | |
1900 qxePageSetupDlg (PAGESETUPDLGW *lppd) | |
1901 { | |
1902 if (XEUNICODE_P) | |
1903 return PageSetupDlgW (lppd); | |
1904 else | |
1905 return ansi_printer_dialog_1 (lppd, &lppd->hDevMode, 0); | |
1906 } | |
1907 | |
1908 | |
1909 /************************************************************************/ | |
1910 /* fonts */ | |
1911 /************************************************************************/ | |
1912 | |
1913 static void | |
1914 copy_logfonta_to_logfontw (const LOGFONTA *src, LOGFONTW *dst) | |
1915 { | |
1916 /* the layout of LOGFONT is | |
1917 | |
1918 non-split fields; | |
1919 TCHAR lfFaceName[...]; | |
1920 */ | |
1921 memcpy (dst, src, sizeof (LOGFONTA)); | |
1922 } | |
1923 | |
1924 static void | |
1925 copy_logfontw_to_logfonta (const LOGFONTW *src, LOGFONTA *dst) | |
1926 { | |
1927 memcpy (dst, src, sizeof (LOGFONTA)); | |
1928 } | |
1929 | |
872 | 1930 #if 0 /* unused */ |
1931 | |
771 | 1932 static void |
1933 copy_enumlogfonta_to_enumlogfontw (const ENUMLOGFONTA *src, ENUMLOGFONTW *dst) | |
1934 { | |
1935 /* the layout of ENUMLOGFONT is | |
1936 | |
1937 LOGFONT elfLogFont; | |
1938 TCHAR elfFullName[...]; | |
1939 TCHAR elfStyle[...]; | |
1940 */ | |
1941 xzero (*dst); | |
1942 copy_logfonta_to_logfontw (&src->elfLogFont, &dst->elfLogFont); | |
1943 memcpy (dst->elfFullName, src->elfFullName, sizeof (src->elfFullName)); | |
1944 memcpy (dst->elfStyle, src->elfStyle, sizeof (src->elfStyle)); | |
1945 } | |
1946 | |
872 | 1947 #endif /* 0 */ |
1948 | |
771 | 1949 static void |
1950 copy_enumlogfontexa_to_enumlogfontexw (const ENUMLOGFONTEXA *src, | |
1951 ENUMLOGFONTEXW *dst) | |
1952 { | |
1953 /* the layout of ENUMLOGFONT is | |
1954 | |
1955 LOGFONT elfLogFont; | |
1956 TCHAR elfFullName[...]; | |
1957 TCHAR elfStyle[...]; | |
1958 TCHAR elfScript[...]; | |
1959 */ | |
1960 xzero (*dst); | |
1961 copy_logfonta_to_logfontw (&src->elfLogFont, &dst->elfLogFont); | |
1962 memcpy (dst->elfFullName, src->elfFullName, sizeof (src->elfFullName)); | |
1963 memcpy (dst->elfStyle, src->elfStyle, sizeof (src->elfStyle)); | |
1964 memcpy (dst->elfScript, src->elfScript, sizeof (src->elfScript)); | |
1965 } | |
1966 | |
1967 static void | |
1968 copy_newtextmetrica_to_newtextmetricw (const NEWTEXTMETRICA *src, | |
1969 NEWTEXTMETRICW *dst) | |
1970 { | |
1971 /* the layout of NEWTEXTMETRIC is | |
1972 | |
1973 non-split fields; | |
1974 WCHAR/BYTE tmFirstChar; | |
1975 WCHAR/BYTE tmLastChar; | |
1976 WCHAR/BYTE tmDefaultChar; | |
1977 WCHAR/BYTE tmBreakChar; | |
1978 BYTE tmItalic; | |
1979 non-split fields; | |
1980 */ | |
1981 xzero (*dst); | |
1982 memcpy ((char *) dst, (char *) src, | |
1983 offsetof (NEWTEXTMETRICA, tmFirstChar)); | |
1984 memcpy ((char *) dst + offsetof (NEWTEXTMETRICW, tmItalic), | |
1985 (char *) src + offsetof (NEWTEXTMETRICA, tmItalic), | |
1986 sizeof (NEWTEXTMETRICA) - offsetof (NEWTEXTMETRICA, tmItalic)); | |
1987 dst->tmFirstChar = (WCHAR) src->tmFirstChar; | |
1988 dst->tmLastChar = (WCHAR) src->tmLastChar; | |
1989 dst->tmDefaultChar = (WCHAR) src->tmDefaultChar; | |
1990 dst->tmBreakChar = (WCHAR) src->tmBreakChar; | |
1991 } | |
1992 | |
1993 static void | |
1994 copy_newtextmetricexa_to_newtextmetricexw (const NEWTEXTMETRICEXA *src, | |
1995 NEWTEXTMETRICEXW *dst) | |
1996 { | |
1997 /* the layout of NEWTEXTMETRICEX is | |
1998 | |
1999 NEWTEXTMETRICA/W ntmTm; | |
2000 FONTSIGNATURE ntmFontSig; | |
2001 */ | |
2002 copy_newtextmetrica_to_newtextmetricw (&src->ntmTm, &dst->ntmTm); | |
2003 dst->ntmFontSig = src->ntmFontSig; | |
2004 } | |
2005 | |
872 | 2006 #if 0 /* unused */ |
2007 | |
771 | 2008 static void |
2009 copy_textmetricw_to_textmetrica (const TEXTMETRICW *src, | |
2010 TEXTMETRICA *dst) | |
2011 { | |
2012 /* the layout of TEXTMETRIC is like NEWTEXTMETRIC; see above. */ | |
2013 xzero (*dst); | |
2014 memcpy ((char *) dst, (char *) src, | |
2015 offsetof (TEXTMETRICA, tmFirstChar)); | |
2016 memcpy ((char *) dst + offsetof (TEXTMETRICA, tmItalic), | |
2017 (char *) src + offsetof (TEXTMETRICW, tmItalic), | |
2018 sizeof (TEXTMETRICA) - offsetof (TEXTMETRICA, tmItalic)); | |
2019 dst->tmFirstChar = (BYTE) src->tmFirstChar; | |
2020 dst->tmLastChar = (BYTE) src->tmLastChar; | |
2021 dst->tmDefaultChar = (BYTE) src->tmDefaultChar; | |
2022 dst->tmBreakChar = (BYTE) src->tmBreakChar; | |
2023 } | |
2024 | |
872 | 2025 #endif /* 0 */ |
2026 | |
771 | 2027 static void |
2028 copy_textmetrica_to_textmetricw (const TEXTMETRICA *src, | |
2029 TEXTMETRICW *dst) | |
2030 { | |
2031 /* the layout of TEXTMETRIC is like NEWTEXTMETRIC; see above. */ | |
2032 xzero (*dst); | |
2033 memcpy ((char *) dst, (char *) src, | |
2034 offsetof (TEXTMETRICA, tmFirstChar)); | |
2035 memcpy ((char *) dst + offsetof (TEXTMETRICW, tmItalic), | |
2036 (char *) src + offsetof (TEXTMETRICA, tmItalic), | |
2037 sizeof (TEXTMETRICA) - offsetof (TEXTMETRICA, tmItalic)); | |
2038 dst->tmFirstChar = (WCHAR) src->tmFirstChar; | |
2039 dst->tmLastChar = (WCHAR) src->tmLastChar; | |
2040 dst->tmDefaultChar = (WCHAR) src->tmDefaultChar; | |
2041 dst->tmBreakChar = (WCHAR) src->tmBreakChar; | |
2042 } | |
2043 | |
2044 typedef int (CALLBACK *qxeEnumFontFamExProcW) (ENUMLOGFONTEXW *lpelfe, | |
2045 NEWTEXTMETRICEXW *lpntme, | |
2046 DWORD FontType, | |
2047 LPARAM lParam); | |
2048 | |
2049 struct qxeEnumFontFamExProcA_wrapper_t | |
2050 { | |
2051 qxeEnumFontFamExProcW orig_proc; | |
2052 LPARAM orig_lparam; | |
2053 }; | |
2054 | |
2055 static int CALLBACK | |
2056 qxeEnumFontFamExProcA_wrapper (ENUMLOGFONTEXA *lpelfe, | |
2057 NEWTEXTMETRICEXA *lpntme, | |
2058 DWORD fontType, | |
2059 struct qxeEnumFontFamExProcA_wrapper_t | |
2060 *closure) | |
2061 { | |
2062 ENUMLOGFONTEXW lpelfew; | |
2063 NEWTEXTMETRICEXW lpntmew; | |
2064 | |
2065 /* #### if we're on Windows 2000 or above, lpelfe is actually an | |
2066 ENUMLOGFONTEXDV structure, and lpntme is an ENUMTEXTMETRIC structure | |
2067 when TRUETYPE_FONTTYPE. both are split-sized and need their own copy | |
2068 functions. need to handle. */ | |
2069 copy_enumlogfontexa_to_enumlogfontexw (lpelfe, &lpelfew); | |
2070 if (fontType & TRUETYPE_FONTTYPE) | |
2071 copy_newtextmetricexa_to_newtextmetricexw (lpntme, &lpntmew); | |
2072 else | |
2073 { | |
2074 /* see docs of EnumFontFamExProc */ | |
2075 xzero (lpntmew); | |
2076 copy_textmetrica_to_textmetricw ((TEXTMETRICA *) lpntme, | |
2077 (TEXTMETRICW *) &lpntmew); | |
2078 } | |
2079 return (closure->orig_proc) (&lpelfew, &lpntmew, fontType, | |
2080 closure->orig_lparam); | |
2081 } | |
2082 | |
2083 int | |
2084 qxeEnumFontFamiliesEx (HDC hdc, LOGFONTW *lpLogfont, | |
2085 FONTENUMPROCW lpEnumFontFamProc, LPARAM lParam, | |
2086 DWORD dwFlags) | |
2087 { | |
2088 if (XEUNICODE_P) | |
2089 return EnumFontFamiliesExW (hdc, lpLogfont, lpEnumFontFamProc, lParam, | |
2090 dwFlags); | |
2091 else | |
2092 { | |
2093 struct qxeEnumFontFamExProcA_wrapper_t closure; | |
2094 LOGFONTA lfa; | |
2095 | |
2096 closure.orig_proc = (qxeEnumFontFamExProcW) lpEnumFontFamProc; | |
2097 closure.orig_lparam = lParam; | |
2098 copy_logfontw_to_logfonta (lpLogfont, &lfa); | |
2099 return EnumFontFamiliesExA (hdc, &lfa, | |
2100 (FONTENUMPROCA) | |
2101 qxeEnumFontFamExProcA_wrapper, | |
2102 (LPARAM) &closure, dwFlags); | |
2103 } | |
2104 } | |
2105 | |
2106 HFONT | |
2107 qxeCreateFontIndirect (CONST LOGFONTW *lplf) | |
2108 { | |
2109 if (XEUNICODE_P) | |
2110 return CreateFontIndirectW (lplf); | |
2111 else | |
2112 { | |
2113 LOGFONTA lfa; | |
2114 | |
2115 copy_logfontw_to_logfonta (lplf, &lfa); | |
2116 return CreateFontIndirectA (&lfa); | |
2117 } | |
2118 } | |
2119 | |
2120 BOOL | |
2121 qxeImmSetCompositionFont (HIMC imc, LOGFONTW *lplf) | |
2122 { | |
2123 if (XEUNICODE_P) | |
2124 return ImmSetCompositionFontW (imc, lplf); | |
2125 else | |
2126 { | |
2127 LOGFONTA lfa; | |
2128 | |
2129 copy_logfontw_to_logfonta (lplf, &lfa); | |
2130 return ImmSetCompositionFontA (imc, &lfa); | |
2131 } | |
2132 } | |
2133 | |
2134 BOOL | |
2135 qxeImmGetCompositionFont (HIMC imc, LOGFONTW *lplf) | |
2136 { | |
2137 if (XEUNICODE_P) | |
2138 return ImmGetCompositionFontW (imc, lplf); | |
2139 else | |
2140 { | |
2141 LOGFONTA lfa; | |
2142 BOOL retval = ImmGetCompositionFontA (imc, &lfa); | |
2143 | |
2144 if (retval) | |
2145 copy_logfonta_to_logfontw (&lfa, lplf); | |
2146 return retval; | |
2147 } | |
2148 } | |
2500 | 2149 |
2150 #if MSC_VERSION >= 1300 | |
2151 | |
2152 BOOL | |
2153 qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPVOID lpComp, DWORD arg4, LPVOID lpRead, DWORD arg6) | |
2154 { | |
2155 if (XEUNICODE_P) | |
2156 return ImmSetCompositionStringW (arg1, dwIndex, lpComp, arg4, lpRead, arg6); | |
2157 else | |
2158 return ImmSetCompositionStringA (arg1, dwIndex, lpComp, arg4, lpRead, arg6); | |
2159 } | |
2160 | |
2161 #else | |
2162 | |
2163 BOOL | |
2164 qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPCVOID lpComp, DWORD arg4, LPCVOID lpRead, DWORD arg6) | |
2165 { | |
2166 if (XEUNICODE_P) | |
2167 return ImmSetCompositionStringW (arg1, dwIndex, lpComp, arg4, lpRead, arg6); | |
2168 else | |
2169 return ImmSetCompositionStringA (arg1, dwIndex, lpComp, arg4, lpRead, arg6); | |
2170 } | |
2171 | |
2172 #endif /* MSC_VERSION >= 1300 */ | |
2173 | |
771 | 2174 int |
2175 qxeGetObject (HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject) | |
2176 { | |
2177 if (XEUNICODE_P) | |
2178 return GetObjectW (hgdiobj, cbBuffer, lpvObject); | |
2179 else | |
2180 { | |
2181 if (cbBuffer == sizeof (LOGFONTW)) | |
2182 { | |
2183 LOGFONTA lfa; | |
2184 int retval = GetObjectA (hgdiobj, sizeof (LOGFONTA), &lfa); | |
2185 | |
2186 if (!retval) | |
2187 return retval; | |
2188 copy_logfonta_to_logfontw (&lfa, (LOGFONTW *) lpvObject); | |
2189 return retval; | |
2190 } | |
2191 else | |
2192 return GetObjectA (hgdiobj, cbBuffer, lpvObject); | |
2193 } | |
2194 } | |
2195 | |
2196 BOOL | |
2197 qxeGetTextMetrics (HDC hdc, LPTEXTMETRICW lptm) | |
2198 { | |
2199 if (XEUNICODE_P) | |
2200 return GetTextMetricsW (hdc, lptm); | |
2201 else | |
2202 { | |
2203 TEXTMETRICA tma; | |
2204 BOOL retval = GetTextMetricsA (hdc, &tma); | |
2205 | |
2206 if (retval) | |
2207 copy_textmetrica_to_textmetricw (&tma, lptm); | |
2208 return retval; | |
2209 } | |
2210 } | |
2211 | |
2212 | |
2213 /************************************************************************/ | |
2214 /* windows */ | |
2215 /************************************************************************/ | |
2216 | |
2217 typedef struct Intercepted_wnd_proc | |
2218 { | |
2219 WNDPROC proc; | |
2220 Extbyte *name; | |
2221 int is_ansi; | |
2222 } Intercepted_wnd_proc; | |
2223 | |
2224 typedef struct | |
2225 { | |
2226 Dynarr_declare (Intercepted_wnd_proc); | |
2227 } Intercepted_wnd_proc_dynarr; | |
2228 | |
2229 static Intercepted_wnd_proc_dynarr *intercepted_wnd_procs; | |
2230 | |
2231 static Intercepted_wnd_proc * | |
2232 find_window_class (const Extbyte *name, int is_ansi) | |
2233 { | |
2234 int i; | |
2235 | |
2236 if (!intercepted_wnd_procs) | |
2237 intercepted_wnd_procs = Dynarr_new (Intercepted_wnd_proc); | |
2238 | |
2239 for (i = 0; i < Dynarr_length (intercepted_wnd_procs); i++) | |
2240 { | |
2241 Intercepted_wnd_proc *s = Dynarr_atp (intercepted_wnd_procs, i); | |
2242 | |
2243 if (s->is_ansi == is_ansi && (is_ansi ? !strcmp (s->name, name) : | |
2244 !wcscmp ((wchar_t *) s->name, | |
2245 (wchar_t *) name))) | |
2246 return s; | |
2247 } | |
2248 | |
2249 return 0; | |
2250 } | |
2251 | |
2252 /* #### | |
2253 | |
2254 check problem with cutting and pasting in my current mule -- if i cut, | |
2255 then go to another application, then switch back to this one and | |
2256 paste, it seems to get confused -- loses the size or something? | |
2257 | |
2258 other things: split flags on CreateProcess and DDE stuff should be | |
2259 handled by us. | |
2260 */ | |
2261 | |
2262 static LRESULT WINAPI | |
2263 intercepted_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) | |
2264 { | |
2265 Intercepted_wnd_proc *s; | |
2266 int is_ansi = XEUNICODE_P ? !IsWindowUnicode (hwnd) : 1; | |
2267 Extbyte *classname; | |
2268 int size = 100; | |
2269 | |
2270 /* Just in case XEUNICODE_P changes during the execution of the program | |
2271 (admittedly, unlikely), check whether the window is Unicode and keep | |
2272 track of this in the list of classes. */ | |
2273 while (1) | |
2274 { | |
2275 classname = alloca_extbytes (size * XETCHAR_SIZE); | |
2276 if ((is_ansi ? GetClassNameA (hwnd, (LPSTR) classname, size) : | |
2277 GetClassNameW (hwnd, (LPWSTR) classname, size)) < size - 1) | |
2278 break; | |
2279 size *= 2; | |
2280 } | |
2281 | |
2282 s = find_window_class (classname, is_ansi); | |
2283 | |
2284 assert (s); | |
2285 | |
2286 if (message_ == WM_NOTIFY) | |
2287 { | |
2288 LPNMHDR nmhdr = (LPNMHDR) lParam; | |
2289 int putback = nmhdr->code; | |
2290 int do_putback = 0; | |
2291 | |
2292 #define FROB(msg) \ | |
2293 case msg##W: \ | |
2294 /* split structures are the same size, so no conversion necessary */ \ | |
2295 nmhdr->code = (UINT) msg##A; \ | |
2296 do_putback = 1; \ | |
2297 break; | |
2298 switch (nmhdr->code) | |
2299 { | |
2300 /* NMHEADER */ | |
2301 FROB (HDN_ITEMCHANGING); | |
2302 FROB (HDN_ITEMCHANGED); | |
2303 FROB (HDN_ITEMCLICK); | |
2304 FROB (HDN_ITEMDBLCLICK); | |
2305 FROB (HDN_DIVIDERDBLCLICK); | |
2306 FROB (HDN_BEGINTRACK); | |
2307 FROB (HDN_ENDTRACK); | |
2308 FROB (HDN_TRACK); | |
2309 /* NMDISPINFO */ | |
2310 FROB (HDN_GETDISPINFO); | |
2311 /* NMTBGETINFOTIP */ | |
2312 FROB (TBN_GETINFOTIP); | |
2313 /* NMTBDISPINFO */ | |
2314 FROB (TBN_GETDISPINFO); | |
2315 /* NMTOOLBAR */ | |
2316 FROB (TBN_GETBUTTONINFO); | |
2317 | |
2318 /* split-sized NMTTDISPINFO */ | |
2319 FROB (TTN_GETDISPINFO); /* handle the ...W case; then handle the | |
2320 ...A case specially, since we need to | |
2321 mess with the structure */ | |
2322 case TTN_GETDISPINFOA: /* same as TTN_NEEDTEXTA */ | |
2323 { | |
2324 NMTTDISPINFOW *nmw = alloca_new (NMTTDISPINFOW); | |
2325 NMTTDISPINFOA *nma = (NMTTDISPINFOA *) lParam; | |
2326 LRESULT retval; | |
2327 /* the layout of NMTTDISPINFO is | |
2328 | |
2329 non-split fields; | |
2330 TCHAR szText[...]; | |
2331 non-split fields; | |
2332 */ | |
2333 | |
2334 xzero (*nmw); | |
2335 /* copy to ...W struct for Unicode code */ | |
2336 memcpy ((char *) nmw, (char *) nma, | |
2337 offsetof (NMTTDISPINFOA, szText)); | |
2338 memcpy ((char *) nmw + offsetof (NMTTDISPINFOW, szText) + | |
2339 sizeof (nmw->szText), | |
2340 (char *) nma + offsetof (NMTTDISPINFOA, szText) + | |
2341 sizeof (nma->szText), | |
2342 sizeof (NMTTDISPINFOA) - | |
2343 (offsetof (NMTTDISPINFOA, szText) + sizeof (nma->szText))); | |
2344 memcpy (nmw->szText, nma->szText, sizeof (nma->szText)); | |
2345 retval = (s->proc) (hwnd, message_, wParam, lParam); | |
2346 /* copy back to ...A struct */ | |
2347 xzero (*nma); | |
2348 memcpy ((char *) nma, (char *) nmw, | |
2349 offsetof (NMTTDISPINFOA, szText)); | |
2350 memcpy ((char *) nma + offsetof (NMTTDISPINFOA, szText) + | |
2351 sizeof (nma->szText), | |
2352 (char *) nmw + offsetof (NMTTDISPINFOW, szText) + | |
2353 sizeof (nmw->szText), | |
2354 sizeof (NMTTDISPINFOA) - | |
2355 (offsetof (NMTTDISPINFOA, szText) + sizeof (nma->szText))); | |
2356 memcpy (nma->szText, nmw->szText, sizeof (nma->szText)); | |
2357 return retval; | |
2358 } | |
2359 | |
2360 /* NMLVFINDITEM */ | |
2361 FROB (LVN_ODFINDITEM); | |
2362 /* NMLVDISPINFO */ | |
2363 FROB (LVN_BEGINLABELEDIT); | |
2364 FROB (LVN_ENDLABELEDIT); | |
2365 FROB (LVN_GETDISPINFO); | |
2366 FROB (LVN_SETDISPINFO); | |
2367 /* NMLVGETINFOTIP */ | |
2368 FROB (LVN_GETINFOTIP); | |
2369 /* NMTREEVIEW */ | |
2370 FROB (TVN_SELCHANGING); | |
2371 FROB (TVN_SELCHANGED); | |
2372 FROB (TVN_ITEMEXPANDING); | |
2373 FROB (TVN_ITEMEXPANDED); | |
2374 FROB (TVN_BEGINDRAG); | |
2375 FROB (TVN_BEGINRDRAG); | |
2376 FROB (TVN_DELETEITEM); | |
2377 /* NMTVDISPINFO */ | |
2378 FROB (TVN_GETDISPINFO); | |
2379 FROB (TVN_SETDISPINFO); | |
2380 FROB (TVN_BEGINLABELEDIT); | |
2381 FROB (TVN_ENDLABELEDIT); | |
2382 /* NMTVGETINFOTIP */ | |
2383 FROB (TVN_GETINFOTIP); | |
2384 /* NMCOMBOBOXEX */ | |
2385 FROB (CBEN_GETDISPINFO); | |
2386 | |
2387 /* split-sized NMCBEDRAGBEGIN */ | |
2388 FROB (CBEN_DRAGBEGIN); /* handle the ...W case; then handle the | |
2389 ...A case specially, since we need to | |
2390 mess with the structure */ | |
2391 { | |
2392 NMCBEDRAGBEGINW *nmw = alloca_new (NMCBEDRAGBEGINW); | |
2393 NMCBEDRAGBEGINA *nma = (NMCBEDRAGBEGINA *) lParam; | |
2394 LRESULT retval; | |
2395 /* the layout of NNMCBEDRAGBEGIN is | |
2396 | |
2397 non-split fields; | |
2398 TCHAR szText[...]; | |
2399 */ | |
2400 | |
2401 xzero (*nmw); | |
2402 /* copy to ...W struct for Unicode code */ | |
2403 memcpy ((char *) nmw, (char *) nma, | |
2404 sizeof (*nma)); | |
2405 retval = (s->proc) (hwnd, message_, wParam, lParam); | |
2406 /* copy back to ...A struct */ | |
2407 xzero (*nma); | |
2408 memcpy ((char *) nma, (char *) nmw, | |
2409 sizeof (*nma)); | |
2410 return retval; | |
2411 } | |
2412 | |
2413 /* split-sized NMCBEENDEDIT */ | |
2414 FROB (CBEN_ENDEDIT); /* handle the ...W case; then handle the | |
2415 ...A case specially, since we need to | |
2416 mess with the structure */ | |
2417 { | |
2418 NMCBEENDEDITW *nmw = alloca_new (NMCBEENDEDITW); | |
2419 NMCBEENDEDITA *nma = (NMCBEENDEDITA *) lParam; | |
2420 LRESULT retval; | |
2421 /* the layout of NMCBEENDEDIT is | |
2422 | |
2423 non-split fields; | |
2424 TCHAR szText[...]; | |
2425 non-split fields; | |
2426 */ | |
2427 | |
2428 xzero (*nmw); | |
2429 /* copy to ...W struct for Unicode code */ | |
2430 memcpy ((char *) nmw, (char *) nma, | |
2431 offsetof (NMCBEENDEDITA, szText)); | |
2432 memcpy ((char *) nmw + offsetof (NMCBEENDEDITW, szText) + | |
2433 sizeof (nmw->szText), | |
2434 (char *) nma + offsetof (NMCBEENDEDITA, szText) + | |
2435 sizeof (nma->szText), | |
2436 sizeof (NMCBEENDEDITA) - | |
2437 (offsetof (NMCBEENDEDITA, szText) + sizeof (nma->szText))); | |
2438 memcpy (nmw->szText, nma->szText, sizeof (nma->szText)); | |
2439 retval = (s->proc) (hwnd, message_, wParam, lParam); | |
2440 /* copy back to ...A struct */ | |
2441 xzero (*nma); | |
2442 memcpy ((char *) nma, (char *) nmw, | |
2443 offsetof (NMCBEENDEDITA, szText)); | |
2444 memcpy ((char *) nma + offsetof (NMCBEENDEDITA, szText) + | |
2445 sizeof (nma->szText), | |
2446 (char *) nmw + offsetof (NMCBEENDEDITW, szText) + | |
2447 sizeof (nmw->szText), | |
2448 sizeof (NMCBEENDEDITA) - | |
2449 (offsetof (NMCBEENDEDITA, szText) + sizeof (nma->szText))); | |
2450 memcpy (nma->szText, nmw->szText, sizeof (nma->szText)); | |
2451 return retval; | |
2452 } | |
2453 | |
2454 /* NMDATETIMESTRING */ | |
2455 FROB (DTN_USERSTRING); | |
2456 /* NMDATETIMEWMKEYDOWN */ | |
2457 FROB (DTN_WMKEYDOWN); | |
2458 | |
2459 /* split-sized NMDATETIMEFORMAT */ | |
2460 FROB (DTN_FORMAT); /* handle the ...W case; then handle the | |
2461 ...A case specially, since we need to | |
2462 mess with the structure */ | |
2463 { | |
2464 NMDATETIMEFORMATW *nmw = alloca_new (NMDATETIMEFORMATW); | |
2465 NMDATETIMEFORMATA *nma = (NMDATETIMEFORMATA *) lParam; | |
2466 LRESULT retval; | |
2467 /* the layout of NMDATETIMEFORMAT is | |
2468 | |
2469 non-split fields; | |
2470 TCHAR szText[...]; | |
2471 */ | |
2472 | |
2473 xzero (*nmw); | |
2474 /* copy to ...W struct for Unicode code */ | |
2475 memcpy ((char *) nmw, (char *) nma, | |
2476 sizeof (*nma)); | |
2477 retval = (s->proc) (hwnd, message_, wParam, lParam); | |
2478 /* copy back to ...A struct */ | |
2479 xzero (*nma); | |
2480 memcpy ((char *) nma, (char *) nmw, | |
2481 sizeof (*nma)); | |
2482 return retval; | |
2483 } | |
2484 | |
2485 /* NMDATETIMEFORMATQUERY */ | |
2486 FROB (DTN_FORMATQUERY); | |
2487 default: break; | |
2488 } | |
2489 #undef FROB | |
2490 if (do_putback) | |
2491 { | |
2492 LRESULT retval = (s->proc) (hwnd, message_, wParam, lParam); | |
2493 ((LPNMHDR) lParam)->code = putback; | |
2494 return retval; | |
2495 } | |
2496 } | |
2497 | |
2498 return (s->proc) (hwnd, message_, wParam, lParam); | |
2499 } | |
2500 | |
2501 ATOM | |
2502 qxeRegisterClass (CONST WNDCLASSW * lpWndClass) | |
2503 { | |
2504 Intercepted_wnd_proc *s = | |
2505 find_window_class ((Extbyte *) lpWndClass->lpszClassName, !XEUNICODE_P); | |
2506 WNDCLASSW classnew; | |
2507 | |
2508 if (s) | |
2509 { | |
2510 s->proc = lpWndClass->lpfnWndProc; | |
2511 s->name = (Extbyte *) lpWndClass->lpszClassName; | |
2512 s->is_ansi = !XEUNICODE_P; | |
2513 } | |
2514 else | |
2515 { | |
2516 Intercepted_wnd_proc news; | |
2517 news.proc = lpWndClass->lpfnWndProc; | |
2518 news.name = (Extbyte *) lpWndClass->lpszClassName; | |
2519 news.is_ansi = !XEUNICODE_P; | |
2520 Dynarr_add (intercepted_wnd_procs, news); | |
2521 } | |
2522 classnew = *lpWndClass; | |
2523 classnew.lpfnWndProc = intercepted_wnd_proc; | |
2524 if (XEUNICODE_P) | |
2525 return RegisterClassW (&classnew); | |
2526 else | |
2367 | 2527 /* The intermediate cast fools gcc into not outputting strict-aliasing |
2528 complaints */ | |
2529 return RegisterClassA ((CONST WNDCLASSA *) (void *) &classnew); | |
771 | 2530 } |
2531 | |
2532 BOOL | |
2533 qxeUnregisterClass (const Extbyte * lpClassName, HINSTANCE hInstance) | |
2534 { | |
2535 Intercepted_wnd_proc *s = | |
2536 find_window_class (lpClassName, !XEUNICODE_P); | |
2537 | |
2538 if (s) | |
2539 Dynarr_delete_by_pointer (intercepted_wnd_procs, s); | |
2540 if (XEUNICODE_P) | |
2541 return UnregisterClassW ((LPCWSTR) lpClassName, hInstance); | |
2542 else | |
2543 return UnregisterClassA ((LPCSTR) lpClassName, hInstance); | |
2544 } | |
2545 | |
2546 /* NOTE: NT 4.0+ only */ | |
2547 ATOM | |
2548 qxeRegisterClassEx (CONST WNDCLASSEXW *lpWndClass) | |
2549 { | |
2550 Intercepted_wnd_proc *s = | |
2551 find_window_class ((Extbyte *) lpWndClass->lpszClassName, !XEUNICODE_P); | |
2552 WNDCLASSEXW classnew; | |
2553 | |
2554 if (s) | |
2555 { | |
2556 s->proc = lpWndClass->lpfnWndProc; | |
2557 s->name = (Extbyte *) lpWndClass->lpszClassName; | |
2558 s->is_ansi = !XEUNICODE_P; | |
2559 } | |
2560 else | |
2561 { | |
2562 Intercepted_wnd_proc news; | |
2563 news.proc = lpWndClass->lpfnWndProc; | |
2564 news.name = (Extbyte *) lpWndClass->lpszClassName; | |
2565 news.is_ansi = !XEUNICODE_P; | |
2566 Dynarr_add (intercepted_wnd_procs, news); | |
2567 } | |
2568 classnew = *lpWndClass; | |
2569 classnew.lpfnWndProc = intercepted_wnd_proc; | |
2570 if (XEUNICODE_P) | |
2571 return RegisterClassExW (&classnew); | |
2572 else | |
2367 | 2573 /* The intermediate cast fools gcc into not outputting strict-aliasing |
2574 complaints */ | |
2575 return RegisterClassExA ((CONST WNDCLASSEXA *) (void *) &classnew); | |
771 | 2576 } |
2577 | |
2578 | |
2579 /************************************************************************/ | |
2580 /* COMMCTRL.H */ | |
2581 /************************************************************************/ | |
2582 | |
2583 /* there are only four structures in commctrl.h that cannot be cast | |
2584 between Unicode/ANSI versions: | |
2585 | |
2586 NMTTDISPINFO aka TOOLTIPTEXT | |
2587 NMCBEDRAGBEGIN | |
2588 NMCBEENDEDIT | |
2589 NMDATETIMEFORMAT | |
2590 | |
2591 these are all notify structures, and we handle them above in | |
2592 intercepted_wnd_proc(). | |
2593 | |
2594 in addition, this constant is weird, being a struct size of one of these: | |
2595 | |
2596 NMTTDISPINFO_V1_SIZE | |
2597 */ | |
2598 | |
2599 /* | |
2600 split class names: | |
2601 | |
2602 WC_HEADER | |
2603 TOOLBARCLASSNAME | |
2604 REBARCLASSNAME | |
2605 TOOLTIPS_CLASS | |
2606 STATUSCLASSNAME | |
2607 TRACKBAR_CLASS | |
2608 UPDOWN_CLASS | |
2609 PROGRESS_CLASS | |
2610 HOTKEY_CLASS | |
2611 WC_LISTVIEW | |
2612 WC_TREEVIEW | |
2613 WC_COMBOBOXEX | |
2614 WC_TABCONTROL | |
2615 ANIMATE_CLASS | |
2616 MONTHCAL_CLASS | |
2617 DATETIMEPICK_CLASS | |
2618 WC_IPADDRESS | |
2619 WC_PAGESCROLLER | |
2620 WC_NATIVEFONTCTL | |
2621 */ | |
2622 | |
2623 /* | |
2624 SendMessage split messages: | |
2625 | |
2626 HDM_INSERTITEM | |
2627 HDM_GETITEM | |
2628 HDM_SETITEM | |
2629 TB_GETBUTTONTEXT | |
2630 TB_SAVERESTORE | |
2631 TB_ADDSTRING | |
2632 TB_GETBUTTONINFO | |
2633 TB_SETBUTTONINFO | |
2634 TB_INSERTBUTTON | |
2635 TB_ADDBUTTONS | |
2636 RB_INSERTBAND | |
2637 RB_SETBANDINFO | |
2638 RB_GETBANDINFO | |
2639 TTM_ADDTOOL | |
2640 TTM_DELTOOL | |
2641 TTM_NEWTOOLRECT | |
2642 TTM_GETTOOLINFO | |
2643 TTM_SETTOOLINFO | |
2644 TTM_HITTEST | |
2645 TTM_GETTEXT | |
2646 TTM_UPDATETIPTEXT | |
2647 TTM_ENUMTOOLS | |
2648 TTM_GETCURRENTTOOL | |
2649 SB_GETTEXT | |
2650 SB_SETTEXT | |
2651 SB_GETTEXTLENGTH | |
2652 SB_SETTIPTEXT | |
2653 SB_GETTIPTEXT | |
2654 LVM_GETITEM | |
2655 LVM_SETITEM | |
2656 LVM_INSERTITEM | |
2657 LVM_FINDITEM | |
2658 LVM_GETSTRINGWIDTH | |
2659 LVM_EDITLABEL | |
2660 LVM_GETCOLUMN | |
2661 LVM_SETCOLUMN | |
2662 LVM_GETITEMTEXT | |
2663 LVM_SETITEMTEXT | |
2664 LVM_GETISEARCHSTRING | |
2665 LVM_SETBKIMAGE | |
2666 LVM_GETBKIMAGE | |
2667 TVM_INSERTITEM | |
2668 TVM_GETITEM | |
2669 TVM_SETITEM | |
2670 TVM_EDITLABEL | |
2671 TVM_GETISEARCHSTRING | |
2672 CBEM_INSERTITEM | |
2673 CBEM_SETITEM | |
2674 CBEM_GETITEM | |
2675 TCM_GETITEM | |
2676 TCM_SETITEM | |
2677 TCM_INSERTITEM | |
2678 ACM_OPEN | |
2679 DTM_SETFORMAT | |
2680 BFFM_SETSTATUSTEXT | |
2681 BFFM_SETSELECTION | |
2682 */ | |
2683 | |
2684 /* | |
2685 split notify messages: | |
2686 | |
2687 HDN_ITEMCHANGING | |
2688 HDN_ITEMCHANGED | |
2689 HDN_ITEMCLICK | |
2690 HDN_ITEMDBLCLICK | |
2691 HDN_DIVIDERDBLCLICK | |
2692 HDN_BEGINTRACK | |
2693 HDN_ENDTRACK | |
2694 HDN_TRACK | |
2695 HDN_GETDISPINFO | |
2696 TBN_GETINFOTIP | |
2697 TBN_GETDISPINFO | |
2698 TBN_GETBUTTONINFO | |
2699 TTN_GETDISPINFO | |
2700 TTN_NEEDTEXTW | |
2701 LVN_ODFINDITEM | |
2702 LVN_BEGINLABELEDIT | |
2703 LVN_ENDLABELEDIT | |
2704 LVN_GETDISPINFO | |
2705 LVN_SETDISPINFO | |
2706 LVN_GETINFOTIP | |
2707 TVN_SELCHANGING | |
2708 TVN_SELCHANGED | |
2709 TVN_GETDISPINFO | |
2710 TVN_SETDISPINFO | |
2711 TVN_ITEMEXPANDING | |
2712 TVN_ITEMEXPANDED | |
2713 TVN_BEGINDRAG | |
2714 TVN_BEGINRDRAG | |
2715 TVN_DELETEITEM | |
2716 TVN_BEGINLABELEDIT | |
2717 TVN_ENDLABELEDIT | |
2718 TVN_GETINFOTIP | |
2719 CBEN_GETDISPINFO | |
2720 CBEN_DRAGBEGIN | |
2721 CBEN_ENDEDIT | |
2722 DTN_USERSTRING | |
2723 DTN_WMKEYDOWN | |
2724 DTN_FORMAT | |
2725 DTN_FORMATQUERY | |
2726 BFFM_VALIDATEFAILED (send to SHBrowseForFolder procedure) | |
2727 */ | |
2728 | |
2729 /* | |
2730 split structures: | |
2731 | |
2732 TV_INSERTSTRUCT (simple-split, though -- just cast) | |
2733 TC_ITEM (simple-split, though -- just cast) | |
2734 | |
2735 #### | |
2736 */ | |
2737 | |
2738 /* | |
2739 split macros or macros needing splitting: | |
2740 | |
2741 #### | |
2742 */ | |
2743 | |
2744 LRESULT | |
2745 qxeSendMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) | |
2746 { | |
2747 #define FROB(msg) \ | |
2748 case msg##A: \ | |
2749 /* split structures are the same size, so no conversion necessary */ \ | |
2750 Msg = msg##W; \ | |
2751 break; | |
2752 | |
2753 if (XEUNICODE_P) | |
2754 { | |
2755 WCHAR classname[100]; | |
2756 /* the name for SHBrowseForFolder windows is non-obvious so we have | |
2757 to intercept the callback */ | |
2758 if (is_SHBrowseForFolder (hWnd)) | |
2759 { | |
2760 switch (Msg) | |
2761 { | |
2762 FROB (BFFM_SETSELECTION); | |
2763 FROB (BFFM_SETSTATUSTEXT); | |
2764 default: break; | |
2765 } | |
2766 } | |
2767 else if (!GetClassNameW (hWnd, classname, 100)) | |
2768 ; | |
2769 /* luckily, subclassing leaves the name alone, so we can still | |
2770 determine fairly easily the correct class to switch on */ | |
2771 else if (!wcscmp (classname, WC_HEADERW)) | |
2772 { | |
2773 switch (Msg) | |
2774 { | |
2775 FROB (HDM_INSERTITEM); | |
2776 FROB (HDM_GETITEM); | |
2777 FROB (HDM_SETITEM); | |
2778 default: break; | |
2779 } | |
2780 } | |
2781 else if (!wcscmp (classname, TOOLBARCLASSNAMEW)) | |
2782 { | |
2783 switch (Msg) | |
2784 { | |
2785 FROB (TB_GETBUTTONTEXT); | |
2786 FROB (TB_SAVERESTORE); | |
2787 FROB (TB_ADDSTRING); | |
2788 FROB (TB_GETBUTTONINFO); | |
2789 FROB (TB_SETBUTTONINFO); | |
2790 FROB (TB_INSERTBUTTON); | |
2791 FROB (TB_ADDBUTTONS); | |
2792 default: break; | |
2793 } | |
2794 } | |
2795 else if (!wcscmp (classname, REBARCLASSNAMEW)) | |
2796 { | |
2797 switch (Msg) | |
2798 { | |
2799 FROB (RB_INSERTBAND); | |
2800 FROB (RB_SETBANDINFO); | |
2801 FROB (RB_GETBANDINFO); | |
2802 default: break; | |
2803 } | |
2804 } | |
2805 else if (!wcscmp (classname, TOOLTIPS_CLASSW)) | |
2806 { | |
2807 switch (Msg) | |
2808 { | |
2809 FROB (TTM_ADDTOOL); | |
2810 FROB (TTM_DELTOOL); | |
2811 FROB (TTM_NEWTOOLRECT); | |
2812 FROB (TTM_GETTOOLINFO); | |
2813 FROB (TTM_SETTOOLINFO); | |
2814 FROB (TTM_HITTEST); | |
2815 FROB (TTM_GETTEXT); | |
2816 FROB (TTM_UPDATETIPTEXT); | |
2817 FROB (TTM_ENUMTOOLS); | |
2818 FROB (TTM_GETCURRENTTOOL); | |
2819 default: break; | |
2820 } | |
2821 } | |
2822 else if (!wcscmp (classname, STATUSCLASSNAMEW)) | |
2823 { | |
2824 switch (Msg) | |
2825 { | |
2826 FROB (SB_GETTEXT); | |
2827 FROB (SB_SETTEXT); | |
2828 FROB (SB_GETTEXTLENGTH); | |
2829 FROB (SB_SETTIPTEXT); | |
2830 FROB (SB_GETTIPTEXT); | |
2831 default: break; | |
2832 } | |
2833 } | |
2834 else if (!wcscmp (classname, WC_LISTVIEWW)) | |
2835 { | |
2836 switch (Msg) | |
2837 { | |
2838 FROB (LVM_GETITEM); | |
2839 FROB (LVM_SETITEM); | |
2840 FROB (LVM_INSERTITEM); | |
2841 FROB (LVM_FINDITEM); | |
2842 FROB (LVM_GETSTRINGWIDTH); | |
2843 FROB (LVM_EDITLABEL); | |
2844 FROB (LVM_GETCOLUMN); | |
2845 FROB (LVM_SETCOLUMN); | |
2846 FROB (LVM_GETITEMTEXT); | |
2847 FROB (LVM_SETITEMTEXT); | |
2848 FROB (LVM_GETISEARCHSTRING); | |
2849 FROB (LVM_SETBKIMAGE); | |
2850 FROB (LVM_GETBKIMAGE); | |
2851 default: break; | |
2852 } | |
2853 } | |
2854 else if (!wcscmp (classname, WC_TREEVIEWW)) | |
2855 { | |
2856 switch (Msg) | |
2857 { | |
2858 FROB (TVM_INSERTITEM); /* no need to split TV_INSERTSTRUCT */ | |
2859 FROB (TVM_GETITEM); | |
2860 FROB (TVM_SETITEM); | |
2861 FROB (TVM_EDITLABEL); | |
2862 FROB (TVM_GETISEARCHSTRING); | |
2863 default: break; | |
2864 } | |
2865 } | |
2866 else if (!wcscmp (classname, WC_COMBOBOXEXW)) | |
2867 { | |
2868 switch (Msg) | |
2869 { | |
2870 FROB (CBEM_INSERTITEM); | |
2871 FROB (CBEM_SETITEM); | |
2872 FROB (CBEM_GETITEM); | |
2873 default: break; | |
2874 } | |
2875 } | |
2876 else if (!wcscmp (classname, WC_TABCONTROLW)) | |
2877 { | |
2878 switch (Msg) | |
2879 { | |
2880 FROB (TCM_GETITEM); | |
2881 FROB (TCM_SETITEM); | |
2882 FROB (TCM_INSERTITEM); /* no need to split TC_ITEM */ | |
2883 default: break; | |
2884 } | |
2885 } | |
2886 else if (!wcscmp (classname, ANIMATE_CLASSW)) | |
2887 { | |
2888 switch (Msg) | |
2889 { | |
2890 FROB (ACM_OPEN); | |
2891 default: break; | |
2892 } | |
2893 } | |
2894 else if (!wcscmp (classname, DATETIMEPICK_CLASSW)) | |
2895 { | |
2896 switch (Msg) | |
2897 { | |
2898 FROB (DTM_SETFORMAT); | |
2899 default: break; | |
2900 } | |
2901 } | |
2902 } | |
2903 | |
2904 if (XEUNICODE_P) | |
2905 return SendMessageW (hWnd, Msg, wParam, lParam); | |
2906 else | |
2907 return SendMessageA (hWnd, Msg, wParam, lParam); | |
2908 | |
2909 #undef FROB | |
2910 } | |
2911 | |
2912 #endif /* HAVE_MS_WINDOWS */ | |
2913 | |
2914 |