winhelp: Always create a main window, even for popups.
This commit is contained in:
parent
7ceb62f90a
commit
b986236904
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
|
||||
* 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
|
||||
* 2002 Eric Pouech <eric.pouech@wanadoo.fr>
|
||||
* 2002, 2008 Eric Pouech <eric.pouech@wanadoo.fr>
|
||||
* 2004 Ken Belleau <jamez@ivic.qc.ca>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
|
@ -57,6 +57,8 @@ static WINHELP_LINE_PART* WINHELP_IsOverLink(WINHELP_WINDOW*, WPARAM, LPARAM);
|
|||
|
||||
WINHELP_GLOBALS Globals = {3, NULL, NULL, TRUE, NULL, NULL, NULL, NULL};
|
||||
|
||||
#define CTL_ID_BUTTON 0x700
|
||||
#define CTL_ID_TEXT 0x701
|
||||
|
||||
/***********************************************************************
|
||||
*
|
||||
|
@ -452,7 +454,7 @@ static LRESULT WINHELP_HandleCommand(HWND hSrcWnd, LPARAM lParam)
|
|||
void WINHELP_LayoutMainWindow(WINHELP_WINDOW* win)
|
||||
{
|
||||
RECT rect, button_box_rect;
|
||||
INT text_top;
|
||||
INT text_top = 0;
|
||||
|
||||
GetClientRect(win->hMainWnd, &rect);
|
||||
|
||||
|
@ -462,8 +464,8 @@ void WINHELP_LayoutMainWindow(WINHELP_WINDOW* win)
|
|||
rect.right - rect.left,
|
||||
rect.bottom - rect.top, 0);
|
||||
|
||||
GetWindowRect(win->hButtonBoxWnd, &button_box_rect);
|
||||
text_top = rect.top + button_box_rect.bottom - button_box_rect.top;
|
||||
if (GetWindowRect(win->hButtonBoxWnd, &button_box_rect))
|
||||
text_top = rect.top + button_box_rect.bottom - button_box_rect.top;
|
||||
|
||||
SetWindowPos(win->hTextWnd, HWND_TOP,
|
||||
rect.left, text_top,
|
||||
|
@ -578,7 +580,7 @@ BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE* page, HLPFILE_WINDOWINFO* wi,
|
|||
DWORD ex_style;
|
||||
|
||||
bPrimary = !lstrcmpi(wi->name, "main");
|
||||
bPopup = wi->win_style & WS_POPUP;
|
||||
bPopup = !bPrimary && (wi->win_style & WS_POPUP);
|
||||
|
||||
/* Initialize WINHELP_WINDOW struct */
|
||||
win = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||
|
@ -650,12 +652,22 @@ BOOL WINHELP_CreateHelpWindow(HLPFILE_PAGE* page, HLPFILE_WINDOWINFO* wi,
|
|||
|
||||
ex_style = 0;
|
||||
if (bPopup) ex_style = WS_EX_TOOLWINDOW;
|
||||
hWnd = CreateWindowEx(ex_style, bPopup ? TEXT_WIN_CLASS_NAME : MAIN_WIN_CLASS_NAME,
|
||||
wi->caption,
|
||||
bPrimary ? WS_OVERLAPPEDWINDOW : wi->win_style,
|
||||
wi->origin.x, wi->origin.y, wi->size.cx, wi->size.cy,
|
||||
NULL, bPrimary ? LoadMenu(Globals.hInstance, MAKEINTRESOURCE(MAIN_MENU)) : 0,
|
||||
Globals.hInstance, win);
|
||||
hWnd = CreateWindowEx(ex_style, MAIN_WIN_CLASS_NAME,
|
||||
wi->caption,
|
||||
bPrimary ? WS_OVERLAPPEDWINDOW : wi->win_style,
|
||||
wi->origin.x, wi->origin.y, wi->size.cx, wi->size.cy,
|
||||
NULL, bPrimary ? LoadMenu(Globals.hInstance, MAKEINTRESOURCE(MAIN_MENU)) : 0,
|
||||
Globals.hInstance, win);
|
||||
/* Create button box and text Window */
|
||||
if (!bPopup)
|
||||
CreateWindow(BUTTON_BOX_WIN_CLASS_NAME, "", WS_CHILD | WS_VISIBLE,
|
||||
0, 0, 0, 0, hWnd, (HMENU)CTL_ID_BUTTON, Globals.hInstance, win);
|
||||
|
||||
CreateWindow(TEXT_WIN_CLASS_NAME, "", WS_CHILD | WS_VISIBLE,
|
||||
0, 0, 0, 0, hWnd, (HMENU)CTL_ID_TEXT, Globals.hInstance, win);
|
||||
|
||||
WINHELP_LayoutMainWindow(win);
|
||||
if (bPopup) Globals.hPopupWnd = hWnd;
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
UpdateWindow(hWnd);
|
||||
|
@ -728,23 +740,12 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
win->hMainWnd = hWnd;
|
||||
break;
|
||||
|
||||
case WM_CREATE:
|
||||
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
|
||||
|
||||
/* Create button box and text Window */
|
||||
CreateWindow(BUTTON_BOX_WIN_CLASS_NAME, "", WS_CHILD | WS_VISIBLE,
|
||||
0, 0, 0, 0, hWnd, 0, Globals.hInstance, win);
|
||||
|
||||
CreateWindow(TEXT_WIN_CLASS_NAME, "", WS_CHILD | WS_VISIBLE,
|
||||
0, 0, 0, 0, hWnd, 0, Globals.hInstance, win);
|
||||
|
||||
/* Fall through */
|
||||
case WM_WINDOWPOSCHANGED:
|
||||
WINHELP_LayoutMainWindow((WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0));
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
Globals.active_win = win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
|
||||
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
|
||||
switch (wParam)
|
||||
{
|
||||
/* Menu FILE */
|
||||
|
@ -772,7 +773,7 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
if (wParam == button->wParam) break;
|
||||
if (button)
|
||||
MACRO_ExecuteMacro(button->lpszMacro);
|
||||
else
|
||||
else if (!HIWORD(wParam))
|
||||
WINHELP_MessageBoxIDS(STID_NOT_IMPLEMENTED, 0x121, MB_OK);
|
||||
break;
|
||||
}
|
||||
|
@ -825,6 +826,19 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_NCDESTROY:
|
||||
{
|
||||
BOOL bExit;
|
||||
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
|
||||
if (hWnd == Globals.hPopupWnd) Globals.hPopupWnd = 0;
|
||||
bExit = (Globals.wVersion >= 4 && !lstrcmpi(win->lpszName, "main"));
|
||||
WINHELP_DeleteWindow(win);
|
||||
|
||||
if (bExit) MACRO_Exit();
|
||||
if (!Globals.win_list)
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
@ -955,7 +969,6 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
POINT mouse;
|
||||
INT scroll_pos;
|
||||
HWND hPopupWnd;
|
||||
BOOL bExit;
|
||||
|
||||
if (msg != WM_LBUTTONDOWN)
|
||||
WINHELP_CheckPopup(msg);
|
||||
|
@ -967,7 +980,6 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
SetWindowLongPtr(hWnd, 0, (ULONG_PTR) win);
|
||||
win->hTextWnd = hWnd;
|
||||
win->hBrush = CreateSolidBrush(win->info->sr_color);
|
||||
if (win->info->win_style & WS_POPUP) Globals.hPopupWnd = win->hMainWnd = hWnd;
|
||||
WINHELP_InitFonts(hWnd);
|
||||
break;
|
||||
|
||||
|
@ -985,12 +997,13 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
SIZE new_client_size;
|
||||
SIZE new_window_size;
|
||||
|
||||
GetWindowRect(hWnd, &old_window_rect);
|
||||
GetWindowRect(GetParent(hWnd), &old_window_rect);
|
||||
origin.x = old_window_rect.left;
|
||||
origin.y = old_window_rect.top;
|
||||
old_window_size.cx = old_window_rect.right - old_window_rect.left;
|
||||
old_window_size.cy = old_window_rect.bottom - old_window_rect.top;
|
||||
|
||||
WINHELP_LayoutMainWindow(win);
|
||||
GetClientRect(hWnd, &old_client_rect);
|
||||
old_client_size.cx = old_client_rect.right - old_client_rect.left;
|
||||
old_client_size.cy = old_client_rect.bottom - old_client_rect.top;
|
||||
|
@ -1012,7 +1025,7 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
new_window_size.cx, new_window_size.cy,
|
||||
0, 0, Globals.hInstance, 0);
|
||||
|
||||
SetWindowPos(hWnd, HWND_TOP, origin.x, origin.y,
|
||||
SetWindowPos(GetParent(hWnd), HWND_TOP, origin.x, origin.y,
|
||||
new_window_size.cx, new_window_size.cy,
|
||||
0);
|
||||
SetWindowPos(win->hShadowWnd, hWnd, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
|
||||
|
@ -1253,20 +1266,6 @@ static LRESULT CALLBACK WINHELP_TextWndProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|||
DestroyWindow(hPopupWnd);
|
||||
break;
|
||||
|
||||
case WM_NCDESTROY:
|
||||
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
|
||||
|
||||
if (hWnd == Globals.hPopupWnd) Globals.hPopupWnd = 0;
|
||||
|
||||
bExit = (Globals.wVersion >= 4 && !lstrcmpi(win->lpszName, "main"));
|
||||
|
||||
WINHELP_DeleteWindow(win);
|
||||
|
||||
if (bExit) MACRO_Exit();
|
||||
|
||||
if (!Globals.win_list)
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
|
|
Loading…
Reference in New Issue