[PATCH 14/21] [WinHelp]: now using the icon out of hlpfile if any

Eric Pouech eric.pouech at orange.fr
Tue Apr 22 15:00:50 CDT 2008




A+
---

 programs/winhelp/hlpfile.c |   10 ++++++++++
 programs/winhelp/hlpfile.h |    1 +
 programs/winhelp/winhelp.c |    5 +++++
 3 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index bfe8750..f16d3b7 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -1534,6 +1534,15 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile)
             *m = macro;
             break;
 
+        case 5:
+            if (GET_USHORT(ptr, 4 + 4) != 1)
+                WINE_FIXME("More than one icon, picking up first\n");
+            /* 0x16 is sizeof(CURSORICONDIR), see user32/user_private.h */
+            hlpfile->hIcon = CreateIconFromResourceEx(ptr + 4 + 0x16,
+                                                      GET_USHORT(ptr, 2) - 0x16, TRUE,
+                                                      0x30000, 0, 0, 0);
+            break;
+
         case 6:
             if (GET_USHORT(ptr, 2) != 90) {WINE_WARN("system6\n");break;}
 
@@ -2261,6 +2270,7 @@ void HLPFILE_FreeHlpFile(HLPFILE* hlpfile)
     HLPFILE_DeletePage(hlpfile->first_page);
     HLPFILE_DeleteMacro(hlpfile->first_macro);
 
+    DestroyIcon(hlpfile->hIcon);
     if (hlpfile->numWindows)    HeapFree(GetProcessHeap(), 0, hlpfile->windows);
     HeapFree(GetProcessHeap(), 0, hlpfile->Context);
     HeapFree(GetProcessHeap(), 0, hlpfile->Map);
diff --git a/programs/winhelp/hlpfile.h b/programs/winhelp/hlpfile.h
index 8a27205..739ad38 100644
--- a/programs/winhelp/hlpfile.h
+++ b/programs/winhelp/hlpfile.h
@@ -162,6 +162,7 @@ typedef struct tagHlpFileFile
 
     unsigned                    numWindows;
     HLPFILE_WINDOWINFO*         windows;
+    HICON                       hIcon;
 } HLPFILE;
 
 /*
diff --git a/programs/winhelp/winhelp.c b/programs/winhelp/winhelp.c
index f054ed5..1721926 100644
--- a/programs/winhelp/winhelp.c
+++ b/programs/winhelp/winhelp.c
@@ -530,6 +530,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
     WINHELP_WINDOW*     win = NULL;
     BOOL                bPrimary, bPopup, bReUsed = FALSE;
     LPSTR               name;
+    HICON               hIcon;
 
     bPrimary = !lstrcmpi(wpage->wininfo->name, "main");
     bPopup = !bPrimary && (wpage->wininfo->win_style & WS_POPUP);
@@ -633,6 +634,10 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
                      0, 0, 0, 0, win->hMainWnd, (HMENU)CTL_ID_TEXT, Globals.hInstance, win);
     }
 
+    hIcon = (wpage->page) ? wpage->page->file->hIcon : NULL;
+    if (!hIcon) hIcon = LoadIcon(Globals.hInstance, MAKEINTRESOURCE(IDI_WINHELP));
+    SendMessage(win->hMainWnd, WM_SETICON, ICON_SMALL, (DWORD_PTR)hIcon);
+
     /* Initialize file specific pushbuttons */
     if (!(wpage->wininfo->win_style & WS_POPUP) && wpage->page)
     {





More information about the wine-patches mailing list