Fix Bugzilla Bug 676: dynamic explorer start menu sidebar size
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.h

Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-09-30 16:33:06 UTC (rev 18171)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-09-30 18:48:14 UTC (rev 18172)
@@ -1555,12 +1555,18 @@
 		// ignore exception and don't show additional shortcuts
 	}
 
+	ReadLogoSize();
+}
+
+void StartMenuRoot::ReadLogoSize()
+{
 	 // read size of logo bitmap
 	BITMAP bmp_hdr;
-	GetObject(ResBitmap(IDB_LOGOV), sizeof(BITMAP), &bmp_hdr);
+	GetObject(ResBitmap(GetLogoResId()), sizeof(BITMAP), &bmp_hdr);
 	_logo_size.cx = bmp_hdr.bmWidth;
 	_logo_size.cy = bmp_hdr.bmHeight;
 
+	 // cache logo width
 	_border_left = _logo_size.cx + 1;
 }
 
@@ -1776,6 +1782,11 @@
 		Paint(canvas);
 		break;}
 
+	  case WM_DISPLAYCHANGE:
+		 // re-evaluate logo size using the correct color depth
+		ReadLogoSize();
+		break;
+
 	  default:
 		return super::WndProc(nmsg, wparam, lparam);
 	}
@@ -1785,11 +1796,8 @@
 
 void StartMenuRoot::Paint(PaintCanvas& canvas)
 {
-	int clr_bits;
-	{WindowCanvas dc(_hwnd); clr_bits=GetDeviceCaps(dc, BITSPIXEL);}
-
 	MemCanvas mem_dc;
-	ResBitmap bmp(clr_bits<=8? clr_bits<=4? IDB_LOGOV16: IDB_LOGOV256: IDB_LOGOV);
+	ResBitmap bmp(GetLogoResId());
 	BitmapSelection sel(mem_dc, bmp);
 
 	ClientRect clnt(_hwnd);
@@ -1807,7 +1815,21 @@
 	super::Paint(canvas);
 }
 
+UINT StartMenuRoot::GetLogoResId()
+{
+	WindowCanvas dc(_hwnd);
 
+	int clr_bits = GetDeviceCaps(dc, BITSPIXEL);
+
+	if (clr_bits > 8)
+		return IDB_LOGOV;
+	else if (clr_bits > 4)
+		return IDB_LOGOV256;
+	else
+		return IDB_LOGOV16;
+}
+
+
 void StartMenuRoot::CloseStartMenu(int id)
 {
 	if (_submenu)

Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.h
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.h	2005-09-30 16:33:06 UTC (rev 18171)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.h	2005-09-30 18:48:14 UTC (rev 18172)
@@ -377,6 +377,9 @@
 
 	void	Paint(PaintCanvas& canvas);
 	void	CloseStartMenu(int id=0);
+
+	void	ReadLogoSize();
+	UINT	GetLogoResId();
 };