diff --git a/reactos/dll/win32/comctl32/comctl32.h b/reactos/dll/win32/comctl32/comctl32.h index 32ba0fe4ea8..e347efd22c0 100644 --- a/reactos/dll/win32/comctl32/comctl32.h +++ b/reactos/dll/win32/comctl32/comctl32.h @@ -177,6 +177,10 @@ extern void UPDOWN_Register(void) DECLSPEC_HIDDEN; extern void UPDOWN_Unregister(void) DECLSPEC_HIDDEN; extern void BUTTON_Register(); extern void BUTTON_Unregister(); +#ifdef __REACTOS__ +extern void TOOLBARv6_Register(void) DECLSPEC_HIDDEN; +extern void TOOLBARv6_Unregister(void) DECLSPEC_HIDDEN; +#endif int MONTHCAL_MonthLength(int month, int year) DECLSPEC_HIDDEN; int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace) DECLSPEC_HIDDEN; diff --git a/reactos/dll/win32/comctl32/commctrl.c b/reactos/dll/win32/comctl32/commctrl.c index 2a6f774ab56..443b389d9d8 100644 --- a/reactos/dll/win32/comctl32/commctrl.c +++ b/reactos/dll/win32/comctl32/commctrl.c @@ -207,7 +207,7 @@ static HANDLE CreateComctl32ActCtx(BOOL bV6) return ret; } -static void RegisterControls() +static void RegisterControls(BOOL bV6) { ANIMATE_Register (); COMBOEX_Register (); @@ -225,14 +225,23 @@ static void RegisterControls() STATUS_Register (); SYSLINK_Register (); TAB_Register (); - TOOLBAR_Register (); TOOLTIPS_Register (); TRACKBAR_Register (); TREEVIEW_Register (); UPDOWN_Register (); + + if (!bV6) + { + TOOLBAR_Register (); + } + else + { + BUTTON_Register(); + TOOLBARv6_Register(); + } } -static void UnregisterControls() +static void UnregisterControls(BOOL bV6) { ANIMATE_Unregister (); COMBOEX_Unregister (); @@ -250,11 +259,21 @@ static void UnregisterControls() STATUS_Unregister (); SYSLINK_Unregister (); TAB_Unregister (); - TOOLBAR_Unregister (); TOOLTIPS_Unregister (); TRACKBAR_Unregister (); TREEVIEW_Unregister (); UPDOWN_Unregister (); + + if (!bV6) + { + TOOLBAR_Unregister (); + } + else + { + BUTTON_Unregister(); + TOOLBARv6_Unregister (); + } + } static void InitializeClasses() @@ -267,15 +286,14 @@ static void InitializeClasses() /* Register the classes once no matter what */ hActCtx5 = CreateComctl32ActCtx(FALSE); activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE); - RegisterControls(); /* Register the classes pretending to be v5 */ + RegisterControls(FALSE); /* Register the classes pretending to be v5 */ if (activated) DeactivateActCtx(0, ulCookie); hActCtx6 = CreateComctl32ActCtx(TRUE); if (hActCtx6 != INVALID_HANDLE_VALUE) { activated = ActivateActCtx(hActCtx6, &ulCookie); - RegisterControls(); /* Register the classes pretending to be v6 */ - BUTTON_Register(); + RegisterControls(TRUE); /* Register the classes pretending to be v6 */ if (activated) DeactivateActCtx(0, ulCookie); /* Initialize the themed controls only when the v6 manifest is present */ @@ -291,7 +309,7 @@ static void UninitializeClasses() hActCtx5 = CreateComctl32ActCtx(FALSE); activated = (hActCtx5 != INVALID_HANDLE_VALUE ? ActivateActCtx(hActCtx5, &ulCookie) : FALSE); - UnregisterControls(); + UnregisterControls(FALSE); if (activated) DeactivateActCtx(0, ulCookie); hActCtx6 = CreateComctl32ActCtx(TRUE); @@ -299,8 +317,7 @@ static void UninitializeClasses() { activated = ActivateActCtx(hActCtx6, &ulCookie); THEMING_Uninitialize(); - UnregisterControls(); - BUTTON_Unregister(); + UnregisterControls(TRUE); if (activated) DeactivateActCtx(0, ulCookie); } } diff --git a/reactos/dll/win32/comctl32/toolbar.c b/reactos/dll/win32/comctl32/toolbar.c index 62ac44e5f0d..c5a704f32e4 100644 --- a/reactos/dll/win32/comctl32/toolbar.c +++ b/reactos/dll/win32/comctl32/toolbar.c @@ -5268,6 +5268,16 @@ TOOLBAR_SetVersion (TOOLBAR_INFO *infoPtr, INT iVersion) { INT iOldVersion = infoPtr->iVersion; +#ifdef __REACTOS__ + /* The v6 control doesn't support changing its version */ + if (iOldVersion == 6) + return iOldVersion; + + /* And a control that is not v6 can't be set to be a v6 one */ + if (iVersion >= 6) + return -1; +#endif + infoPtr->iVersion = iVersion; if (infoPtr->iVersion >= 5) @@ -6178,7 +6188,11 @@ TOOLBAR_NCCalcSize (HWND hwnd, WPARAM wParam, LPARAM lParam) static LRESULT +#ifdef __REACTOS__ +TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs, int iVersion) +#else TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs) +#endif { TOOLBAR_INFO *infoPtr; DWORD styleadd = 0; @@ -6212,7 +6226,11 @@ TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs) infoPtr->dwDTFlags = (lpcs->style & TBSTYLE_LIST) ? DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS: DT_CENTER | DT_END_ELLIPSIS; infoPtr->bAnchor = FALSE; /* no anchor highlighting */ infoPtr->bDragOutSent = FALSE; +#ifdef __REACTOS__ + infoPtr->iVersion = iVersion; +#else infoPtr->iVersion = 0; +#endif infoPtr->hwndSelf = hwnd; infoPtr->bDoRedraw = TRUE; infoPtr->clrBtnHighlight = CLR_DEFAULT; @@ -7003,7 +7021,11 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return TOOLBAR_NCCalcSize (hwnd, wParam, lParam); case WM_NCCREATE: +#ifdef __REACTOS__ + return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam, 0); +#else return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam); +#endif case WM_NCPAINT: return TOOLBAR_NCPaint (hwnd, wParam, lParam); @@ -7089,6 +7111,40 @@ TOOLBAR_Unregister (void) UnregisterClassW (TOOLBARCLASSNAMEW, NULL); } +#ifdef __REACTOS__ +static LRESULT WINAPI +ToolbarV6WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + if (uMsg == WM_NCCREATE) + return TOOLBAR_NCCreate (hwnd, wParam, (CREATESTRUCTW*)lParam, 6); + else + return ToolbarWindowProc(hwnd, uMsg, wParam, lParam); +} + +VOID +TOOLBARv6_Register (void) +{ + WNDCLASSW wndClass; + + ZeroMemory (&wndClass, sizeof(WNDCLASSW)); + wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS; + wndClass.lpfnWndProc = ToolbarV6WindowProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = sizeof(TOOLBAR_INFO *); + wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW); + wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); + wndClass.lpszClassName = TOOLBARCLASSNAMEW; + + RegisterClassW (&wndClass); +} + +VOID +TOOLBARv6_Unregister (void) +{ + UnregisterClassW (TOOLBARCLASSNAMEW, NULL); +} +#endif + static HIMAGELIST TOOLBAR_InsertImageList(PIMLENTRY **pies, INT *cies, HIMAGELIST himl, INT id) { HIMAGELIST himlold;