Fix the creation of treeview with checkboxes.

diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 23d9a0c..989629a 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -4825,14 +4825,18 @@
     {
 	RECT rc;
 	HBITMAP hbm, hbmOld;
-	HDC hdc;
+	HDC hdc,hdcScreen;
 	int nIndex;
 
 	infoPtr->himlState =
 	    ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
 
-	hdc = CreateCompatibleDC(0);
-	hbm = CreateCompatibleBitmap(hdc, 48, 16);
+	hdcScreen = CreateDCA("DISPLAY", NULL, NULL, NULL);
+
+	/* 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;
@@ -4848,12 +4852,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("chckbox index %d\n", nIndex);
-	SelectObject(hdc, hbmOld);
+	TRACE("checkbox index %d\n", nIndex);
+
 	DeleteObject(hbm);
 	DeleteDC(hdc);
+	DeleteDC(hdcScreen);
 
 	infoPtr->stateImageWidth = 16;
 	infoPtr->stateImageHeight = 16;