On Sat, 27 Sep 2003, Alexandre Julliard wrote: > > 3) Black pen, white background, pattern, opaque mode. The background > > would still be changing the image. If we consider the pen white, the > > pattern would be lost. I actually didn't test it, but I expect it to be > > broken. > > I don't see how a XOR with 0 would ever change anything.
You will have XOR with background. Look here: http://www.red-bean.com/~proski/wine/ Patch for cmdlgtst.c to produce those pictures is attached. before.png was taken with current Wine. after.png is with the fix that removes the special procession of R2_XORPEN. I would not say that nobody will use this effect. Anyway, the whole thing is not worth arguing about. -- Regards, Pavel Roskin
--- cmdlgtst.c +++ cmdlgtst.c @@ -245,6 +245,30 @@ void mwi_InitAll(HWND hWnd) mwi_FindReplace(hWnd); } +void myDrawFocusRect( HDC hdc, const RECT* rc ) +{ + HBRUSH hOldBrush; + HPEN hOldPen, hNewPen; + INT oldDrawMode, oldBkMode; + COLORREF oldBkColor; + + hOldBrush = SelectObject(hdc, GetStockObject(NULL_BRUSH)); + hNewPen = CreatePen(PS_DASHDOTDOT, 1, RGB(0, 0, 0)); + hOldPen = SelectObject(hdc, hNewPen); + oldDrawMode = SetROP2(hdc, R2_XORPEN); + oldBkColor = SetBkColor(hdc, RGB(0, 255, 255)); + oldBkMode = SetBkMode(hdc, OPAQUE); + + Rectangle(hdc, rc->left, rc->top, rc->right, rc->bottom); + + SetBkMode(hdc, oldBkColor); + SetBkMode(hdc, oldBkMode); + SetROP2(hdc, oldDrawMode); + SelectObject(hdc, hOldPen); + DeleteObject(hNewPen); + SelectObject(hdc, hOldBrush); +} + /* * Various configurations for the window. Ideally, this * would be stored with the window itself, but then, this @@ -312,6 +336,12 @@ void paintMainWindow(HWND hWnd, UINT iMe font = (HFONT) SelectObject(ps.hdc, font); DeleteObject(font); + rect.left += 10; + rect.right -= 10; + rect.top += 10; + rect.bottom -= 10; + myDrawFocusRect(ps.hdc, &rect); + EndPaint(hWnd, &ps); }