ReactOS 0.4.17-dev-804-g023d8af
hhctrl.c
Go to the documentation of this file.
1/*
2 * hhctrl implementation
3 *
4 * Copyright 2004 Krzysztof Foltman
5 * Copyright 2007 Jacek Caban for CodeWeavers
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include "wine/debug.h"
23
24#include <stdarg.h>
25
26#define COBJMACROS
27
28#include "windef.h"
29#include "winbase.h"
30#include "winuser.h"
31#include "winnls.h"
32#include "htmlhelp.h"
33#include "ole2.h"
34#include "rpcproxy.h"
35
36#define INIT_GUID
37#include "hhctrl.h"
38
40
43
44
46{
47 TRACE("(%p,%ld,%p)\n", hInstance, fdwReason, lpvReserved);
48
49 switch (fdwReason)
50 {
54 break;
55 }
56 return TRUE;
57}
58
59static const char *command_to_string(UINT command)
60{
61#define X(x) case x: return #x
62 switch (command)
63 {
73 X( HH_SYNC );
74 X( HH_RESERVED1 );
75 X( HH_RESERVED2 );
76 X( HH_RESERVED3 );
82 X( HH_CLOSE_ALL );
95 default: return "???";
96 }
97#undef X
98}
99
100static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
101{
102 static const WCHAR helpW[] = {'\\','h','e','l','p','\\',0};
103 static const WCHAR delimW[] = {':',':',0};
104 static const WCHAR delim2W[] = {'>',0};
105
106 DWORD env_len;
108
109 env_filename = skip_schema(env_filename);
110
111 /* the format is "helpFile[::/index][>window]" */
112 if (index) *index = NULL;
113 if (window) *window = NULL;
114
115 env_len = ExpandEnvironmentStringsW(env_filename, NULL, 0);
116 if (!env_len)
117 return 0;
118
119 filename = malloc(env_len * sizeof(WCHAR));
120 if (filename == NULL)
121 return 0;
122
123 ExpandEnvironmentStringsW(env_filename, filename, env_len);
124
125 extra = wcsstr(filename, delim2W);
126 if (extra)
127 {
128 *extra = 0;
129 if (window)
130 *window = wcsdup(extra + 1);
131 }
132
133 extra = wcsstr(filename, delimW);
134 if (extra)
135 {
136 *extra = 0;
137 if (index)
138 *index = wcsdup(extra + 2);
139 }
140
143 {
147 }
148
149 free(filename);
150
152 {
153 if (window) free(*window);
154 if (index) free(*index);
155 return FALSE;
156 }
157
158 return TRUE;
159}
160
161/******************************************************************
162 * HtmlHelpW (HHCTRL.OCX.15)
163 */
165{
167
168 TRACE("(%p, %s, command=%s, data=%Ix)\n",
169 caller, debugstr_w( filename ),
171
172 switch (command)
173 {
174 case HH_DISPLAY_TOPIC:
175 case HH_DISPLAY_TOC:
176 case HH_DISPLAY_INDEX:
177 case HH_DISPLAY_SEARCH:{
178 BOOL res;
179 NMHDR nmhdr;
180 HHInfo *info = NULL;
181 WCHAR *window = NULL;
182 const WCHAR *index = NULL;
183 WCHAR *default_index = NULL;
184 int tab_index = TAB_CONTENTS;
185
186 if (!filename)
187 return NULL;
188
189 if (!resolve_filename(filename, fullname, MAX_PATH, &default_index, &window))
190 {
191 WARN("can't find %s\n", debugstr_w(filename));
192 return 0;
193 }
194 index = default_index;
195
196 if (window)
198
200 if(!info)
201 {
202 free(default_index);
203 free(window);
204 return NULL;
205 }
206
207 if(!index)
208 index = info->WinType.pszFile;
209 if(!info->WinType.pszType)
210 info->WinType.pszType = info->stringsW.pszType = window;
211 else
212 free(window);
213
214 /* called to load a specified topic */
215 switch(command)
216 {
217 case HH_DISPLAY_TOPIC:
218 case HH_DISPLAY_TOC:
219 if (data)
220 {
221 static const WCHAR delimW[] = {':',':',0};
222 const WCHAR *i = (const WCHAR *)data;
223
224 index = wcsstr(i, delimW);
225 if(index)
226 {
227 if(memcmp(info->pCHMInfo->szFile, i, index-i))
228 FIXME("Opening a CHM file in the context of another is not supported.\n");
229 index += lstrlenW(delimW);
230 }
231 else
232 index = i;
233 }
234 break;
235 }
236
237 res = NavigateToChm(info, info->pCHMInfo->szFile, index);
238 free(default_index);
239
240 if(!res)
241 {
243 return NULL;
244 }
245
246 switch(command)
247 {
248 case HH_DISPLAY_TOPIC:
249 case HH_DISPLAY_TOC:
250 tab_index = TAB_CONTENTS;
251 break;
252 case HH_DISPLAY_INDEX:
253 tab_index = TAB_INDEX;
254 if (data)
255 FIXME("Should select keyword '%s'.\n", debugstr_w((WCHAR *)data));
256 break;
258 tab_index = TAB_SEARCH;
259 if (data)
260 FIXME("Should display search specified by HH_FTS_QUERY structure.\n");
261 break;
262 }
263 /* open the requested tab */
264 memset(&nmhdr, 0, sizeof(nmhdr));
265 nmhdr.code = TCN_SELCHANGE;
266 SendMessageW(info->hwndTabCtrl, TCM_SETCURSEL, (WPARAM)info->tabs[tab_index].id, 0);
267 SendMessageW(info->WinType.hwndNavigation, WM_NOTIFY, 0, (LPARAM)&nmhdr);
268
269 return info->WinType.hwndHelp;
270 }
271 case HH_HELP_CONTEXT: {
272 WCHAR *window = NULL;
273 HHInfo *info = NULL;
274 LPWSTR url;
275
276 if (!filename)
277 return NULL;
278
280 {
281 WARN("can't find %s\n", debugstr_w(filename));
282 return 0;
283 }
284
285 if (window)
287
289 if(!info)
290 {
291 free(window);
292 return NULL;
293 }
294
295 if(!info->WinType.pszType)
296 info->WinType.pszType = info->stringsW.pszType = window;
297 else
298 free(window);
299
300 url = FindContextAlias(info->pCHMInfo, data);
301 if(!url)
302 {
303 if(!data) /* there may legitimately be no context alias for id 0 */
304 return info->WinType.hwndHelp;
306 return NULL;
307 }
308
310 free(url);
311 return info->WinType.hwndHelp;
312 }
314 static BOOL warned = FALSE;
315
316 if (!warned)
317 {
318 FIXME("HH_PRETRANSLATEMESSAGE unimplemented\n");
319 warned = TRUE;
320 }
321 return 0;
322 }
323 case HH_CLOSE_ALL: {
324 HHInfo *info, *next;
325
327 {
328 TRACE("Destroying window %s.\n", debugstr_w(info->WinType.pszType));
330 }
331 return 0;
332 }
333 case HH_SET_WIN_TYPE: {
334 HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
335 WCHAR *window = NULL;
336 HHInfo *info = NULL;
337
338 if (!filename && wintype->pszType)
339 window = wcsdup(wintype->pszType);
341 {
342 WARN("can't find window name: %s\n", debugstr_w(filename));
343 return 0;
344 }
346 if (!info)
347 {
348 info = calloc(1, sizeof(HHInfo));
349 info->WinType.pszType = info->stringsW.pszType = window;
350 list_add_tail(&window_list, &info->entry);
351 }
352 else
353 free(window);
354
355 TRACE("Changing WINTYPE, fsValidMembers=0x%lx\n", wintype->fsValidMembers);
356
357 MergeChmProperties(wintype, info, TRUE);
359 return 0;
360 }
361 case HH_GET_WIN_TYPE: {
362 HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
363 WCHAR *window = NULL;
364 HHInfo *info = NULL;
365
367 {
368 WARN("can't find window name: %s\n", debugstr_w(filename));
369 return 0;
370 }
372 if (!info)
373 {
374 WARN("Could not find window named %s.\n", debugstr_w(window));
375 free(window);
376 return (HWND)~0;
377 }
378
379 TRACE("Retrieving WINTYPE for %s.\n", debugstr_w(window));
380 *wintype = info->WinType;
381 free(window);
382 return 0;
383 }
384 default:
385 FIXME("HH case %s not handled.\n", command_to_string( command ));
386 }
387
388 return 0;
389}
390
391static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
392{
393 memcpy(wdata, data, sizeof(*data));
394 /* convert all of the ANSI strings to Unicode */
395 wdata->pszType = stringsW->pszType = strdupAtoW(data->pszType);
396 wdata->pszCaption = stringsW->pszCaption = strdupAtoW(data->pszCaption);
397 wdata->pszToc = stringsW->pszToc = strdupAtoW(data->pszToc);
398 wdata->pszIndex = stringsW->pszIndex = strdupAtoW(data->pszIndex);
399 wdata->pszFile = stringsW->pszFile = strdupAtoW(data->pszFile);
400 wdata->pszHome = stringsW->pszHome = strdupAtoW(data->pszHome);
401 wdata->pszJump1 = stringsW->pszJump1 = strdupAtoW(data->pszJump1);
402 wdata->pszJump2 = stringsW->pszJump2 = strdupAtoW(data->pszJump2);
403 wdata->pszUrlJump1 = stringsW->pszUrlJump1 = strdupAtoW(data->pszUrlJump1);
404 wdata->pszUrlJump2 = stringsW->pszUrlJump2 = strdupAtoW(data->pszUrlJump2);
405 wdata->pszCustomTabs = stringsW->pszCustomTabs = strdupAtoW(data->pszCustomTabs);
406}
407
408static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
409{
410 memcpy(data, wdata, sizeof(*wdata));
411 /* convert all of the Unicode strings to ANSI */
412 data->pszType = stringsA->pszType = strdupWtoA(wdata->pszType);
413 data->pszCaption = stringsA->pszCaption = strdupWtoA(wdata->pszCaption);
414 data->pszToc = stringsA->pszToc = strdupWtoA(wdata->pszToc);
415 data->pszIndex = stringsA->pszFile = strdupWtoA(wdata->pszIndex);
416 data->pszFile = stringsA->pszFile = strdupWtoA(wdata->pszFile);
417 data->pszHome = stringsA->pszHome = strdupWtoA(wdata->pszHome);
418 data->pszJump1 = stringsA->pszJump1 = strdupWtoA(wdata->pszJump1);
419 data->pszJump2 = stringsA->pszJump2 = strdupWtoA(wdata->pszJump2);
420 data->pszUrlJump1 = stringsA->pszUrlJump1 = strdupWtoA(wdata->pszUrlJump1);
421 data->pszUrlJump2 = stringsA->pszUrlJump2 = strdupWtoA(wdata->pszUrlJump2);
422 data->pszCustomTabs = stringsA->pszCustomTabs = strdupWtoA(wdata->pszCustomTabs);
423}
424
425/******************************************************************
426 * HtmlHelpA (HHCTRL.OCX.14)
427 */
429{
430 WCHAR *wfile = strdupAtoW( filename );
431 HWND result = 0;
432
433 if (data)
434 {
435 switch(command)
436 {
437 case HH_ALINK_LOOKUP:
442 case HH_SYNC:
443 FIXME("structures not handled yet\n");
444 break;
445
446 case HH_SET_WIN_TYPE:
447 {
448 struct wintype_stringsW stringsW;
449 HH_WINTYPEW wdata;
450
451 wintypeAtoW((HH_WINTYPEA *)data, &wdata, &stringsW);
452 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
453 wintype_stringsW_free(&stringsW);
454 goto done;
455 }
456 case HH_GET_WIN_TYPE:
457 {
458 HH_WINTYPEW wdata;
459 HHInfo *info;
460
461 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
462 if (!wdata.pszType) break;
463 info = find_window(wdata.pszType);
464 if (!info) break;
465 wintype_stringsA_free(&info->stringsA);
466 wintypeWtoA(&wdata, (HH_WINTYPEA *)data, &info->stringsA);
467 goto done;
468 }
469
470 case HH_DISPLAY_INDEX:
471 case HH_DISPLAY_TOPIC:
472 case HH_DISPLAY_TOC:
475 {
476 WCHAR *wdata = strdupAtoW( (const char *)data );
477 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)wdata );
478 free(wdata);
479 goto done;
480 }
481
482 case HH_CLOSE_ALL:
483 case HH_HELP_CONTEXT:
484 case HH_INITIALIZE:
488 case HH_UNINITIALIZE:
489 /* either scalar or pointer to scalar - do nothing */
490 break;
491
492 default:
493 FIXME("Unknown command: %s (%d)\n", command_to_string(command), command);
494 break;
495 }
496 }
497
498 result = HtmlHelpW( caller, wfile, command, data );
499done:
500 free(wfile);
501 return result;
502}
503
504/******************************************************************
505 * doWinMain (HHCTRL.OCX.13)
506 */
508{
509 MSG msg;
510 int len, buflen, mapid = -1;
512 char *endq = NULL;
513 HWND hwnd;
514
516
517 /* Parse command line option of the HTML Help command.
518 *
519 * Note: The only currently handled action is "mapid",
520 * which corresponds to opening a specific page.
521 */
522 while(*szCmdLine == '-')
523 {
524 LPSTR space, ptr;
525
526 ptr = szCmdLine + 1;
527 space = strchr(ptr, ' ');
528 if(!strncmp(ptr, "mapid", space-ptr))
529 {
530 char idtxt[10];
531
532 ptr += strlen("mapid")+1;
533 space = strchr(ptr, ' ');
534 /* command line ends without number */
535 if (!space)
536 return 0;
537 memcpy(idtxt, ptr, space-ptr);
538 idtxt[space-ptr] = '\0';
539 mapid = atoi(idtxt);
540 szCmdLine = space+1;
541 }
542 else
543 {
544 FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", (int)(space-szCmdLine), szCmdLine);
545 return 0;
546 }
547 }
548
549 /* FIXME: Check szCmdLine for bad arguments */
550 if (*szCmdLine == '\"')
551 endq = strchr(++szCmdLine, '\"');
552
553 if (endq)
554 len = endq - szCmdLine;
555 else
556 len = strlen(szCmdLine);
557
558 /* no filename given */
559 if (!len)
560 return 0;
561
562 buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1;
563 filename = malloc(buflen * sizeof(WCHAR));
564 MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen);
565 filename[buflen-1] = 0;
566
567 /* Open a specific help topic */
568 if(mapid != -1)
570 else
572
573 free(filename);
574
575 if (!hwnd)
576 {
577 ERR("Failed to open HTML Help file '%s'.\n", szCmdLine);
578 return 0;
579 }
580
581 while (GetMessageW(&msg, 0, 0, 0))
582 {
585 }
586
587 return 0;
588}
589
590/******************************************************************
591 * DllGetClassObject (HHCTRL.OCX.@)
592 */
594{
595 FIXME("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
597}
static char * strdupWtoA(const WCHAR *str)
static DWORD const fdwReason
#define msg(x)
Definition: auth_time.c:54
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
HINSTANCE hInstance
Definition: charmap.c:19
LPWSTR FindContextAlias(CHMInfo *chm, DWORD index)
Definition: chm.c:188
LPCWSTR skip_schema(LPCWSTR url)
Definition: chm.c:500
void MergeChmProperties(HH_WINTYPEW *src, HHInfo *info, BOOL override)
Definition: chm.c:269
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:61
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrlenW
Definition: compat.h:750
void wintype_stringsW_free(struct wintype_stringsW *stringsW)
Definition: help.c:1773
HHInfo * CreateHelpViewer(HHInfo *info, LPCWSTR filename, HWND caller)
Definition: help.c:1831
struct list window_list
Definition: help.c:51
void wintype_stringsA_free(struct wintype_stringsA *stringsA)
Definition: help.c:1787
void ReleaseHelpViewer(HHInfo *info)
Definition: help.c:1802
BOOL NavigateToChm(HHInfo *info, LPCWSTR file, LPCWSTR index)
Definition: help.c:257
void UpdateHelpWindow(HHInfo *info)
Definition: help.c:1563
BOOL NavigateToUrl(HHInfo *info, LPCWSTR surl)
Definition: help.c:213
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2271
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *)
Definition: wcs.c:2998
_ACRTIMP int __cdecl atoi(const char *)
Definition: string.c:1720
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
Definition: string.c:3335
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
GLuint index
Definition: glext.h:6031
GLuint64EXT * result
Definition: glext.h:11304
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
Definition: hhctrl.c:45
static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
Definition: hhctrl.c:100
static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
Definition: hhctrl.c:408
BOOL hh_process
Definition: hhctrl.c:42
#define X(x)
HINSTANCE hhctrl_hinstance
Definition: hhctrl.c:41
HWND WINAPI HtmlHelpW(HWND caller, LPCWSTR filename, UINT command, DWORD_PTR data)
Definition: hhctrl.c:164
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: hhctrl.c:593
static const char * command_to_string(UINT command)
Definition: hhctrl.c:59
HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data)
Definition: hhctrl.c:428
static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
Definition: hhctrl.c:391
int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine)
Definition: hhctrl.c:507
#define TAB_CONTENTS
Definition: hhctrl.h:115
#define TAB_INDEX
Definition: hhctrl.h:116
#define TAB_SEARCH
Definition: hhctrl.h:117
static const WCHAR helpW[]
Definition: htmlevent.c:70
#define HH_ENUM_CATEGORY
Definition: htmlhelp.h:44
#define HH_SET_INFO_TYPE
Definition: htmlhelp.h:31
#define HH_DISPLAY_INDEX
Definition: htmlhelp.h:25
#define HH_UNINITIALIZE
Definition: htmlhelp.h:50
#define HH_RESET_IT_FILTER
Definition: htmlhelp.h:46
#define HH_SET_WIN_TYPE
Definition: htmlhelp.h:27
#define HH_SET_EXCLUSIVE_FILTER
Definition: htmlhelp.h:48
#define HH_DISPLAY_TOPIC
Definition: htmlhelp.h:22
#define HH_ENUM_CATEGORY_IT
Definition: htmlhelp.h:45
#define HH_SET_INCLUSIVE_FILTER
Definition: htmlhelp.h:47
#define HH_GET_LAST_ERROR
Definition: htmlhelp.h:43
#define HH_TP_HELP_WM_HELP
Definition: htmlhelp.h:40
#define HH_PRETRANSLATEMESSAGE
Definition: htmlhelp.h:52
#define HH_SAFE_DISPLAY_TOPIC
Definition: htmlhelp.h:51
#define HH_CLOSE_ALL
Definition: htmlhelp.h:41
#define HH_HELP_CONTEXT
Definition: htmlhelp.h:38
#define HH_DISPLAY_TEXT_POPUP
Definition: htmlhelp.h:37
#define HH_ENUM_INFO_TYPE
Definition: htmlhelp.h:30
#define HH_DISPLAY_SEARCH
Definition: htmlhelp.h:26
#define HH_RESERVED1
Definition: htmlhelp.h:33
#define HH_SET_GLOBAL_PROPERTY
Definition: htmlhelp.h:53
#define HH_DISPLAY_TOC
Definition: htmlhelp.h:24
#define HH_ALINK_LOOKUP
Definition: htmlhelp.h:42
#define HH_GET_WIN_TYPE
Definition: htmlhelp.h:28
#define HH_KEYWORD_LOOKUP
Definition: htmlhelp.h:36
#define HH_RESERVED3
Definition: htmlhelp.h:35
#define HH_TP_HELP_CONTEXTMENU
Definition: htmlhelp.h:39
#define HH_RESERVED2
Definition: htmlhelp.h:34
#define HH_INITIALIZE
Definition: htmlhelp.h:49
#define HH_SYNC
Definition: htmlhelp.h:32
#define HH_GET_WIN_HANDLE
Definition: htmlhelp.h:29
@ extra
Definition: id3.c:95
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * filename
Definition: ioapi.h:137
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
static IN DWORD IN LPVOID lpvReserved
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
static const WCHAR url[]
Definition: encode.c:1384
const char * fullname
Definition: shader.c:1766
static IHTMLWindow2 * window
Definition: events.c:77
short WCHAR
Definition: pedump.c:58
#define TCN_SELCHANGE
Definition: commctrl.h:4137
#define TCM_SETCURSEL
Definition: commctrl.h:4070
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
static unsigned __int64 next
Definition: rand_nt.c:6
#define WM_NOTIFY
Definition: richedit.h:61
#define calloc
Definition: rosglue.h:14
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
Definition: hhctrl.h:184
LPCWSTR pszIndex
Definition: htmlhelp.h:359
LPCWSTR pszJump1
Definition: htmlhelp.h:369
LPCWSTR pszHome
Definition: htmlhelp.h:361
LPCWSTR pszToc
Definition: htmlhelp.h:358
LPCWSTR pszJump2
Definition: htmlhelp.h:370
DWORD fsValidMembers
Definition: htmlhelp.h:343
LPCWSTR pszType
Definition: htmlhelp.h:342
LPCWSTR pszUrlJump2
Definition: htmlhelp.h:372
LPCWSTR pszFile
Definition: htmlhelp.h:360
LPCWSTR pszCaption
Definition: htmlhelp.h:345
LPCWSTR pszUrlJump1
Definition: htmlhelp.h:371
LPCWSTR pszCustomTabs
Definition: htmlhelp.h:375
UINT code
Definition: winuser.h:3267
char * pszToc
Definition: hhctrl.h:160
char * pszCustomTabs
Definition: hhctrl.h:168
char * pszHome
Definition: hhctrl.h:163
char * pszType
Definition: hhctrl.h:158
char * pszUrlJump2
Definition: hhctrl.h:167
char * pszJump1
Definition: hhctrl.h:164
char * pszUrlJump1
Definition: hhctrl.h:166
char * pszJump2
Definition: hhctrl.h:165
char * pszCaption
Definition: hhctrl.h:159
char * pszFile
Definition: hhctrl.h:162
WCHAR * pszUrlJump1
Definition: hhctrl.h:152
WCHAR * pszUrlJump2
Definition: hhctrl.h:153
WCHAR * pszJump1
Definition: hhctrl.h:150
WCHAR * pszHome
Definition: hhctrl.h:149
WCHAR * pszCustomTabs
Definition: hhctrl.h:154
WCHAR * pszToc
Definition: hhctrl.h:146
WCHAR * pszCaption
Definition: hhctrl.h:145
WCHAR * pszFile
Definition: hhctrl.h:148
WCHAR * pszJump2
Definition: hhctrl.h:151
WCHAR * pszType
Definition: hhctrl.h:144
WCHAR * pszIndex
Definition: hhctrl.h:147
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint16_t * LPWSTR
Definition: typedefs.h:56
char * LPSTR
Definition: typedefs.h:51
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
static HWND find_window()
Definition: wclickat.c:251
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)