Felix Nawothnig : comctl32: Allow enabling TVS_CHECKBOXES on the fly.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Apr 7 05:23:19 CDT 2007
Module: wine
Branch: master
Commit: fe5881c788ea6309036909d14fd421f16677c808
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe5881c788ea6309036909d14fd421f16677c808
Author: Felix Nawothnig <flexo at holycrap.org>
Date: Sat Apr 7 05:37:29 2007 +0200
comctl32: Allow enabling TVS_CHECKBOXES on the fly.
---
dlls/comctl32/treeview.c | 128 +++++++++++++++++++++++++---------------------
1 files changed, 70 insertions(+), 58 deletions(-)
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 47afdf5..8adf28b 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -4829,6 +4829,46 @@ TREEVIEW_MouseWheel(TREEVIEW_INFO *infoPtr, WPARAM wParam)
/* Create/Destroy *******************************************************/
+static void
+initialize_checkboxes(TREEVIEW_INFO *infoPtr)
+{
+ RECT rc;
+ HBITMAP hbm, hbmOld;
+ HDC hdc, hdcScreen;
+ int nIndex;
+
+ infoPtr->himlState = ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
+
+ hdcScreen = GetDC(0);
+
+ hdc = CreateCompatibleDC(hdcScreen);
+ hbm = CreateCompatibleBitmap(hdcScreen, 48, 16);
+ hbmOld = SelectObject(hdc, hbm);
+
+ SetRect(&rc, 0, 0, 48, 16);
+ FillRect(hdc, &rc, (HBRUSH)(COLOR_WINDOW+1));
+
+ SetRect(&rc, 18, 2, 30, 14);
+ DrawFrameControl(hdc, &rc, DFC_BUTTON,
+ DFCS_BUTTONCHECK|DFCS_FLAT);
+
+ SetRect(&rc, 34, 2, 46, 14);
+ DrawFrameControl(hdc, &rc, DFC_BUTTON,
+ DFCS_BUTTONCHECK|DFCS_FLAT|DFCS_CHECKED);
+
+ SelectObject(hdc, hbmOld);
+ nIndex = ImageList_AddMasked(infoPtr->himlState, hbm,
+ GetSysColor(COLOR_WINDOW));
+ TRACE("checkbox index %d\n", nIndex);
+
+ DeleteObject(hbm);
+ DeleteDC(hdc);
+ ReleaseDC(0, hdcScreen);
+
+ infoPtr->stateImageWidth = 16;
+ infoPtr->stateImageHeight = 16;
+}
+
static LRESULT
TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
{
@@ -4930,48 +4970,7 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr->hwndToolTip = COMCTL32_CreateToolTip(hwnd);
if (infoPtr->dwStyle & TVS_CHECKBOXES)
- {
- RECT rc;
- HBITMAP hbm, hbmOld;
- HDC hdc,hdcScreen;
- int nIndex;
-
- infoPtr->himlState =
- ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
-
- hdcScreen = GetDC(0);
-
- /* Create a coloured bitmap compatible with the screen depth
- because checkboxes are not black&white */
- hdc = CreateCompatibleDC(hdcScreen);
- hbm = CreateCompatibleBitmap(hdcScreen, 48, 16);
- hbmOld = SelectObject(hdc, hbm);
-
- rc.left = 0; rc.top = 0;
- rc.right = 48; rc.bottom = 16;
- FillRect(hdc, &rc, (HBRUSH)(COLOR_WINDOW+1));
-
- rc.left = 18; rc.top = 2;
- rc.right = 30; rc.bottom = 14;
- DrawFrameControl(hdc, &rc, DFC_BUTTON,
- DFCS_BUTTONCHECK|DFCS_FLAT);
-
- rc.left = 34; rc.right = 46;
- DrawFrameControl(hdc, &rc, DFC_BUTTON,
- DFCS_BUTTONCHECK|DFCS_FLAT|DFCS_CHECKED);
-
- SelectObject(hdc, hbmOld);
- nIndex = ImageList_AddMasked(infoPtr->himlState, hbm,
- GetSysColor(COLOR_WINDOW));
- TRACE("checkbox index %d\n", nIndex);
-
- DeleteObject(hbm);
- DeleteDC(hdc);
- ReleaseDC(0, hdcScreen);
-
- infoPtr->stateImageWidth = 16;
- infoPtr->stateImageHeight = 16;
- }
+ initialize_checkboxes(infoPtr);
/* Make sure actual scrollbar state is consistent with uInternalStatus */
ShowScrollBar(hwnd, SB_VERT, FALSE);
@@ -5333,24 +5332,37 @@ TREEVIEW_StyleChanged(TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
if (wParam == GWL_STYLE)
{
- DWORD dwNewStyle = ((LPSTYLESTRUCT)lParam)->styleNew;
+ DWORD dwNewStyle = ((LPSTYLESTRUCT)lParam)->styleNew;
- /* we have to take special care about tooltips */
- if ((infoPtr->dwStyle ^ dwNewStyle) & TVS_NOTOOLTIPS)
- {
- if (infoPtr->dwStyle & TVS_NOTOOLTIPS)
- {
- infoPtr->hwndToolTip = COMCTL32_CreateToolTip(infoPtr->hwnd);
- TRACE("\n");
- }
- else
- {
- DestroyWindow(infoPtr->hwndToolTip);
- infoPtr->hwndToolTip = 0;
- }
- }
+ if ((infoPtr->dwStyle ^ dwNewStyle) & TVS_CHECKBOXES)
+ {
+ if (dwNewStyle & TVS_CHECKBOXES)
+ {
+ initialize_checkboxes(infoPtr);
+ TRACE("checkboxes enabled\n");
+ }
+ else
+ {
+ FIXME("tried to disable checkboxes\n");
+ }
+ }
+
+ if ((infoPtr->dwStyle ^ dwNewStyle) & TVS_NOTOOLTIPS)
+ {
+ if (infoPtr->dwStyle & TVS_NOTOOLTIPS)
+ {
+ infoPtr->hwndToolTip = COMCTL32_CreateToolTip(infoPtr->hwnd);
+ TRACE("tooltips enabled\n");
+ }
+ else
+ {
+ DestroyWindow(infoPtr->hwndToolTip);
+ infoPtr->hwndToolTip = 0;
+ TRACE("tooltips disabled\n");
+ }
+ }
- infoPtr->dwStyle = dwNewStyle;
+ infoPtr->dwStyle = dwNewStyle;
}
TREEVIEW_UpdateSubTree(infoPtr, infoPtr->root);
More information about the wine-cvs
mailing list