Add the SizeBar.
diff --git a/dlls/hhctrl.ocx/help.c b/dlls/hhctrl.ocx/help.c
index 92c2734..2691a94 100644
--- a/dlls/hhctrl.ocx/help.c
+++ b/dlls/hhctrl.ocx/help.c
@@ -42,6 +42,8 @@
#define WINTYPE_DEFAULT_HEIGHT 640
#define WINTYPE_DEFAULT_NAVWIDTH 250
+static const WCHAR szEmpty[] = {0};
+
typedef struct tagHHInfo
{
HH_WINTYPEW *pHHWinType;
@@ -50,6 +52,7 @@
HINSTANCE hInstance;
LPWSTR szCmdLine;
HWND hwndTabCtrl;
+ HWND hwndSizeBar;
HFONT hFont;
} HHInfo;
@@ -82,14 +85,117 @@
return string;
}
+/* Size Bar */
+
+#define SIZEBAR_WIDTH 4
+
+static const WCHAR szSizeBarClass[] = {
+ 'H','H',' ','S','i','z','e','B','a','r',0
+};
+
+/* Draw the SizeBar */
+static void SB_OnPaint(HWND hWnd)
+{
+ PAINTSTRUCT ps;
+ HDC hdc;
+ RECT rc;
+
+ hdc = BeginPaint(hWnd, &ps);
+
+ GetClientRect(hWnd, &rc);
+
+ /* dark frame */
+ rc.right += 1;
+ rc.bottom -= 1;
+ FrameRect(hdc, &rc, GetStockObject(GRAY_BRUSH));
+
+ /* white highlight */
+ SelectObject(hdc, GetStockObject(WHITE_PEN));
+ MoveToEx(hdc, rc.right, 1, NULL);
+ LineTo(hdc, 1, 1);
+ LineTo(hdc, 1, rc.bottom - 1);
+
+
+ MoveToEx(hdc, 0, rc.bottom, NULL);
+ LineTo(hdc, rc.right, rc.bottom);
+
+ EndPaint(hWnd, &ps);
+}
+
+LRESULT CALLBACK SizeBar_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_PAINT:
+ SB_OnPaint(hWnd);
+ break;
+ default:
+ return DefWindowProcW(hWnd, message, wParam, lParam);
+ }
+
+ return 0;
+}
+
+static void HH_RegisterSizeBarClass(HHInfo *pHHInfo)
+{
+ WNDCLASSEXW wcex;
+
+ wcex.cbSize = sizeof(WNDCLASSEXW);
+ wcex.style = 0;
+ wcex.lpfnWndProc = (WNDPROC)SizeBar_WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = pHHInfo->hInstance;
+ wcex.hIcon = LoadIconW(NULL, (LPCWSTR)IDI_APPLICATION);
+ wcex.hCursor = LoadCursorW(NULL, (LPCWSTR)IDC_SIZEWE);
+ wcex.hbrBackground = (HBRUSH)(COLOR_MENU + 1);
+ wcex.lpszMenuName = NULL;
+ wcex.lpszClassName = szSizeBarClass;
+ wcex.hIconSm = LoadIconW(NULL, (LPCWSTR)IDI_APPLICATION);
+
+ RegisterClassExW(&wcex);
+}
+
+static void SB_GetSizeBarRect(HHInfo *pHHInfo, RECT *rc)
+{
+ RECT rectWND, rectTB, rectNP;
+
+ GetClientRect(pHHInfo->pHHWinType->hwndHelp, &rectWND);
+ GetClientRect(pHHInfo->pHHWinType->hwndToolBar, &rectTB);
+ GetClientRect(pHHInfo->pHHWinType->hwndNavigation, &rectNP);
+
+ rc->left = rectNP.right;
+ rc->top = rectTB.bottom;
+ rc->bottom = rectWND.bottom - rectTB.bottom;
+ rc->right = SIZEBAR_WIDTH;
+}
+
+static BOOL HH_AddSizeBar(HHInfo *pHHInfo)
+{
+ HWND hWnd;
+ HWND hwndParent = pHHInfo->pHHWinType->hwndHelp;
+ DWORD dwStyles = WS_CHILDWINDOW | WS_VISIBLE | WS_OVERLAPPED;
+ DWORD dwExStyles = WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR;
+ RECT rc;
+
+ SB_GetSizeBarRect(pHHInfo, &rc);
+
+ hWnd = CreateWindowExW(dwExStyles, szSizeBarClass, szEmpty, dwStyles,
+ rc.left, rc.top, rc.right, rc.bottom,
+ hwndParent, NULL, pHHInfo->hInstance, NULL);
+ if (!hWnd)
+ return FALSE;
+
+ pHHInfo->hwndSizeBar = hWnd;
+ return TRUE;
+}
+
/* Child Window */
static const WCHAR szChildClass[] = {
'H','H',' ','C','h','i','l','d',0
};
-static const WCHAR szEmpty[] = {0};
-
static void Child_OnPaint(HWND hWnd)
{
PAINTSTRUCT ps;
@@ -397,18 +503,16 @@
static void HP_GetHTMLRect(HHInfo *pHHInfo, RECT *rc)
{
- HWND hwndParent = pHHInfo->pHHWinType->hwndHelp;
- HWND hwndToolbar = pHHInfo->pHHWinType->hwndToolBar;
- HWND hwndNavigation = pHHInfo->pHHWinType->hwndNavigation;
- RECT rectTB, rectWND, rectNP;
+ RECT rectTB, rectWND, rectNP, rectSB;
- GetClientRect(hwndParent, &rectWND);
- GetClientRect(hwndToolbar, &rectTB);
- GetClientRect(hwndNavigation, &rectNP);
+ GetClientRect(pHHInfo->pHHWinType->hwndHelp, &rectWND);
+ GetClientRect(pHHInfo->pHHWinType->hwndToolBar, &rectTB);
+ GetClientRect(pHHInfo->pHHWinType->hwndNavigation, &rectNP);
+ GetClientRect(pHHInfo->hwndSizeBar, &rectSB);
- rc->left = rectNP.right;
+ rc->left = rectNP.right + rectSB.right;
rc->top = rectTB.bottom;
- rc->right = rectWND.right - rectNP.right;
+ rc->right = rectWND.right - rc->left;
rc->bottom = rectWND.bottom - rectTB.bottom;
}
@@ -451,7 +555,7 @@
if (!pHHInfo)
return;
- /* Only resize the Navigation pane vertically */
+ /* Only resize the Navigation pane and SizeBar vertically */
if (HIWORD(lParam))
{
NP_GetNavigationRect(pHHInfo, &rc);
@@ -462,6 +566,10 @@
SetWindowPos(pHHInfo->hwndTabCtrl, HWND_TOP, 0, 0,
rc.right - TAB_RIGHT_PADDING,
rc.bottom - TAB_TOP_PADDING, SWP_NOMOVE);
+
+ SB_GetSizeBarRect(pHHInfo, &rc);
+ SetWindowPos(pHHInfo->hwndSizeBar, HWND_TOP, 0, 0,
+ rc.right, rc.bottom, SWP_NOMOVE);
}
HP_GetHTMLRect(pHHInfo, &rc);
@@ -608,6 +716,11 @@
if (!HH_AddNavigationPane(pHHInfo))
return FALSE;
+ HH_RegisterSizeBarClass(pHHInfo);
+
+ if (!HH_AddSizeBar(pHHInfo))
+ return FALSE;
+
if (!HH_AddHTMLPane(pHHInfo))
return FALSE;