[ros-diffs] [mkupfer] 39942: - fix the bitmap and memdc issue for menu items (popup arrow, check and radio symbols)

mkupfer at svn.reactos.org mkupfer at svn.reactos.org
Wed Mar 11 00:48:22 CET 2009


Author: mkupfer
Date: Wed Mar 11 02:48:21 2009
New Revision: 39942

URL: http://svn.reactos.org/svn/reactos?rev=39942&view=rev
Log:
- fix the bitmap and memdc issue for menu items (popup arrow, check and radio symbols)

Modified:
    trunk/reactos/dll/win32/user32/windows/draw.c
    trunk/reactos/dll/win32/user32/windows/menu.c

Modified: trunk/reactos/dll/win32/user32/windows/draw.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/draw.c?rev=39942&r1=39941&r2=39942&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/draw.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/draw.c [iso-8859-1] Wed Mar 11 02:48:21 2009
@@ -1048,8 +1048,6 @@
 {
     LOGFONT lf;
     HFONT hFont, hOldFont;
-    COLORREF clrsave;
-    INT bkmode;
     TCHAR Symbol;
     switch(uFlags & 0xff)
     {
@@ -1079,20 +1077,12 @@
     lf.lfCharSet = DEFAULT_CHARSET;
     lstrcpy(lf.lfFaceName, TEXT("Marlett"));
     hFont = CreateFontIndirect(&lf);
-    /* save font and text color */
+    /* save font */
     hOldFont = SelectObject(dc, hFont);
-    clrsave = GetTextColor(dc);
-    bkmode = GetBkMode(dc);
-    /* set color and drawing mode */
-    SetBkMode(dc, TRANSPARENT);
-    SetTextColor(dc, GetSysColor(COLOR_WINDOWTEXT));
-    FillRect(dc, r, (HBRUSH)GetStockObject(WHITE_BRUSH));
     /* draw selected symbol */
     TextOut(dc, r->left, r->top, &Symbol, 1);
     /* restore previous settings */
-    SetTextColor(dc, clrsave);
     SelectObject(dc, hOldFont);
-    SetBkMode(dc, bkmode);
     DeleteObject(hFont);
     return TRUE;
 }

Modified: trunk/reactos/dll/win32/user32/windows/menu.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/menu.c?rev=39942&r1=39941&r2=39942&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/menu.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/menu.c [iso-8859-1] Wed Mar 11 02:48:21 2009
@@ -605,22 +605,10 @@
       /* Draw the popup-menu arrow */
       if (0 != (Item->fType & MF_POPUP))
       {
-           INT y = Rect.top + Rect.bottom;
-           UINT CheckBitmapWidth = GetSystemMetrics(SM_CXMENUCHECK);
-           UINT CheckBitmapHeight = GetSystemMetrics(SM_CYMENUCHECK);
-           RECT r;
-           HBITMAP bm = CreateBitmap(CheckBitmapWidth, CheckBitmapHeight, 1, 1, NULL);
-           HDC DcMem = CreateCompatibleDC(Dc);
-           SelectObject(DcMem, bm);
-           SetRect( &r, 0, 0, CheckBitmapWidth, CheckBitmapHeight);
-           DrawFrameControl(DcMem, &r, DFC_MENU, DFCS_MENUARROW);
-           BitBlt(Dc, Rect.right - CheckBitmapWidth, (y - r.bottom) / 2, r.right, r.bottom, DcMem, 0, 0, SRCCOPY );
-           DeleteDC(DcMem);
-           DeleteObject(bm);
-           /*
-           SetRect(&r,Rect.right - CheckBitmapWidth, (y - CheckBitmapHeight) / 2, Rect.right, Rect.bottom);
-           DrawFrameControl(Dc, &r, DFC_MENU, DFCS_MENUARROW);
-           */
+           RECT rectTemp;
+           CopyRect(&rectTemp, &Rect);
+           rectTemp.left = rectTemp.right - GetSystemMetrics(SM_CXMENUCHECK);
+           DrawFrameControl(Dc, &rectTemp, DFC_MENU, DFCS_MENUARROW);
       }
       return;
     }
@@ -736,18 +724,12 @@
         }
         else if (0 != (Item->fState & MF_CHECKED))  /* standard bitmaps */
         {
-           RECT r;
-           HBITMAP bm = CreateBitmap(CheckBitmapWidth, CheckBitmapHeight, 1, 1, NULL);
-           HDC DcMem = CreateCompatibleDC(Dc);
-           SelectObject(DcMem, bm);
-           SetRect( &r, 0, 0, CheckBitmapWidth, CheckBitmapHeight);
-           DrawFrameControl(DcMem, &r, DFC_MENU,
+           RECT rectTemp;
+           CopyRect(&rectTemp, &Rect);
+           rectTemp.right = rectTemp.left + GetSystemMetrics(SM_CXMENUCHECK);
+           DrawFrameControl(Dc, &rectTemp, DFC_MENU,
                             0 != (Item->fType & MFT_RADIOCHECK) ?
                                  DFCS_MENUBULLET : DFCS_MENUCHECK);
-           BitBlt(Dc, Rc.left, (y - r.bottom) / 2, r.right, r.bottom,
-                  DcMem, 0, 0, SRCCOPY );
-           DeleteDC(DcMem);
-           DeleteObject(bm);
            checked = TRUE;
         }
      }
@@ -758,19 +740,10 @@
      /* Draw the popup-menu arrow */
      if (0 != (Item->fType & MF_POPUP))
      {
-         RECT r;
-         HBITMAP bm = CreateBitmap(CheckBitmapWidth, CheckBitmapHeight, 1, 1, NULL);
-         HDC DcMem = CreateCompatibleDC(Dc);
-         SelectObject(DcMem, bm);
-         SetRect( &r, 0, 0, CheckBitmapWidth, CheckBitmapHeight);
-         DrawFrameControl(DcMem, &r, DFC_MENU, DFCS_MENUARROW);
-         BitBlt(Dc, Rect.right - CheckBitmapWidth, (y - r.bottom) / 2, r.right, r.bottom, DcMem, 0, 0, SRCCOPY );
-         DeleteDC(DcMem);
-         DeleteObject(bm);
-         /*
-         SetRect(&r,Rect.right - CheckBitmapWidth, (y - CheckBitmapHeight) / 2, Rect.right, Rect.bottom);
-         DrawFrameControl(Dc, &r, DFC_MENU, DFCS_MENUARROW);
-	 */
+           RECT rectTemp;
+           CopyRect(&rectTemp, &Rect);
+           rectTemp.left = rectTemp.right - GetSystemMetrics(SM_CXMENUCHECK);
+           DrawFrameControl(Dc, &rectTemp, DFC_MENU, DFCS_MENUARROW);
      }
      Rect.left += 4;
      if( !(MenuInfo->dwStyle & MNS_NOCHECK))



More information about the Ros-diffs mailing list