- Add the HH Child window class.
- Create the Navigation and HTML panes as HH Child windows.

diff --git a/dlls/hhctrl.ocx/help.c b/dlls/hhctrl.ocx/help.c
index 51fffc8..9b90526 100644
--- a/dlls/hhctrl.ocx/help.c
+++ b/dlls/hhctrl.ocx/help.c
@@ -32,10 +32,11 @@
 
 /* Window type defaults */
 
-#define WINTYPE_DEFAULT_X       280
-#define WINTYPE_DEFAULT_Y       100
-#define WINTYPE_DEFAULT_WIDTH   740
-#define WINTYPE_DEFAULT_HEIGHT  640
+#define WINTYPE_DEFAULT_X           280
+#define WINTYPE_DEFAULT_Y           100
+#define WINTYPE_DEFAULT_WIDTH       740
+#define WINTYPE_DEFAULT_HEIGHT      640
+#define WINTYPE_DEFAULT_NAVWIDTH    250
 
 typedef struct tagHHInfo
 {
@@ -75,6 +76,45 @@
     return string;
 }
 
+/* Child Window */
+
+static const WCHAR szChildClass[] = {
+    'H','H',' ','C','h','i','l','d',0
+};
+
+static const WCHAR szEmpty[] = {0};
+
+LRESULT CALLBACK Child_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    switch (message)
+    {
+        default:
+            return DefWindowProcW(hWnd, message, wParam, lParam);
+    }
+
+    return 0;
+}
+
+static void HH_RegisterChildWndClass(HHInfo *pHHInfo)
+{
+    WNDCLASSEXW wcex;
+
+    wcex.cbSize         = sizeof(WNDCLASSEXW);
+    wcex.style          = 0;
+    wcex.lpfnWndProc    = (WNDPROC)Child_WndProc;
+    wcex.cbClsExtra     = 0;
+    wcex.cbWndExtra     = 0;
+    wcex.hInstance      = pHHInfo->hInstance;
+    wcex.hIcon          = LoadIconW(NULL, (LPCWSTR)IDI_APPLICATION);
+    wcex.hCursor        = LoadCursorW(NULL, (LPCWSTR)IDC_ARROW);
+    wcex.hbrBackground  = (HBRUSH)(COLOR_3DFACE);
+    wcex.lpszMenuName   = NULL;
+    wcex.lpszClassName  = szChildClass;
+    wcex.hIconSm        = LoadIconW(NULL, (LPCWSTR)IDI_APPLICATION);
+
+    RegisterClassExW(&wcex);
+}
+
 /* Toolbar */
 
 #define ICON_SIZE   20
@@ -192,15 +232,87 @@
 
 /* Navigation Pane */
 
+static void NP_GetNavigationRect(HHInfo *pHHInfo, RECT *rc)
+{
+    HWND hwndParent = pHHInfo->pHHWinType->hwndHelp;
+    HWND hwndToolbar = pHHInfo->pHHWinType->hwndToolBar;
+    RECT rectWND, rectTB;
+
+    GetClientRect(hwndParent, &rectWND);
+    GetClientRect(hwndToolbar, &rectTB);
+
+    rc->left = 0;
+    rc->top = rectTB.bottom;
+    rc->bottom = rectWND.bottom - rectTB.bottom;
+
+    if (pHHInfo->pHHWinType->fsValidMembers & HHWIN_PARAM_NAV_WIDTH)
+        rc->right = pHHInfo->pHHWinType->iNavWidth;
+    else
+        rc->right = WINTYPE_DEFAULT_NAVWIDTH;
+}
+
 static BOOL HH_AddNavigationPane(HHInfo *pHHInfo)
 {
+    HWND hWnd;
+    HWND hwndParent = pHHInfo->pHHWinType->hwndHelp;
+    DWORD dwStyles = WS_CHILDWINDOW | WS_VISIBLE;
+    DWORD dwExStyles = WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR;
+    RECT rc;
+
+    NP_GetNavigationRect(pHHInfo, &rc);
+
+    hWnd = CreateWindowExW(dwExStyles, szChildClass, szEmpty, dwStyles,
+                           rc.left, rc.top, rc.right, rc.bottom,
+                           hwndParent, NULL, pHHInfo->hInstance, NULL);
+    if (!hWnd)
+        return FALSE;
+
+    pHHInfo->pHHWinType->hwndNavigation = hWnd;
     return TRUE;
 }
 
 /* HTML Pane */
 
+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;
+
+    GetClientRect(hwndParent, &rectWND);
+    GetClientRect(hwndToolbar, &rectTB);
+    GetClientRect(hwndNavigation, &rectNP);
+
+    rc->left = rectNP.right;
+    rc->top = rectTB.bottom;
+    rc->right = rectWND.right - rectNP.right;
+    rc->bottom = rectWND.bottom - rectTB.bottom;
+}
+
 static BOOL HH_AddHTMLPane(HHInfo *pHHInfo)
 {
+    HWND hWnd;
+    HWND hwndParent = pHHInfo->pHHWinType->hwndHelp;
+    DWORD dwStyles = WS_CHILDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN;
+    DWORD dwExStyles = WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_CLIENTEDGE;
+    RECT rc;
+
+    HP_GetHTMLRect(pHHInfo, &rc);
+
+    hWnd = CreateWindowExW(dwExStyles, szChildClass, szEmpty, dwStyles,
+                           rc.left, rc.top, rc.right, rc.bottom,
+                           hwndParent, NULL, pHHInfo->hInstance, NULL);
+    if (!hWnd)
+        return FALSE;
+
+    /* store the pointer to the HH info struct */
+    SetWindowLongPtrA(hWnd, GWLP_USERDATA, (LONG_PTR)pHHInfo);
+
+    ShowWindow(hWnd, SW_SHOW);
+    UpdateWindow(hWnd);
+
+    pHHInfo->pHHWinType->hwndHTML = hWnd;
     return TRUE;
 }
 
@@ -319,6 +431,8 @@
     if (!HH_AddToolbar(pHHInfo))
         return FALSE;
 
+    HH_RegisterChildWndClass(pHHInfo);
+
     if (!HH_AddNavigationPane(pHHInfo))
         return FALSE;