LRESULT FilteredListBox::OnDrawItem( PDRAWITEMSTRUCT pdis ) { if(pdis->itemID == -1) return 0; if(GetItemHeight(pdis->itemID) == 1) return TRUE; switch(pdis->itemAction) { case ODA_SELECT: case ODA_DRAWENTIRE: { DWORD ColorRef = GetDCBrushColor(pdis->hDC); FillRect(pdis->hDC,&pdis->rcItem,(HBRUSH)ColorRef); std::tstring text; text.resize(GetTextLen(pdis->itemID) + 1); GetText(&text,pdis->itemID); TextOut(pdis->hDC,pdis->rcItem.left,pdis->rcItem.top,text.c_str(),text.length()); if(pdis->itemState & ODS_SELECTED) { RECT focusRect; focusRect.left = pdis->rcItem.left; focusRect.top = pdis->rcItem.top; focusRect.bottom = pdis->rcItem.bottom; focusRect.right = pdis->rcItem.right; DrawFocusRect(pdis->hDC,&focusRect); InvertRect(pdis->hDC,&focusRect); } } case ODA_FOCUS: break; } return TRUE; }
/*********************************************************************** * dibdrv_SelectBrush */ HBRUSH CDECL dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) { PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSelectBrush ); dibdrv_physdev *pdev = get_dibdrv_pdev(dev); LOGBRUSH logbrush; TRACE("(%p, %p)\n", dev, hbrush); if (!GetObjectW( hbrush, sizeof(logbrush), &logbrush )) return 0; if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( dev->hdc ); pdev->brush_style = logbrush.lbStyle; pdev->defer |= DEFER_BRUSH; free_pattern_brush( pdev ); switch(logbrush.lbStyle) { case BS_SOLID: pdev->brush_color = pdev->dib.funcs->colorref_to_pixel(&pdev->dib, logbrush.lbColor); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); pdev->brush_rects = solid_brush; pdev->defer &= ~DEFER_BRUSH; break; case BS_NULL: pdev->brush_rects = null_brush; pdev->defer &= ~DEFER_BRUSH; break; case BS_DIBPATTERN: { BITMAPINFOHEADER *bi = GlobalLock((HGLOBAL)logbrush.lbHatch); dib_info orig_dib; if(!bi) return NULL; if(init_dib_info_from_packed(&orig_dib, bi, LOWORD(logbrush.lbColor))) { copy_dib_color_info(&pdev->brush_dib, &pdev->dib); if(convert_dib(&pdev->brush_dib, &orig_dib)) { pdev->brush_rects = pattern_brush; pdev->defer &= ~DEFER_BRUSH; } free_dib_info(&orig_dib, FALSE); } GlobalUnlock((HGLOBAL)logbrush.lbHatch); break; } default: break; } return next->funcs->pSelectBrush( next, hbrush ); }
/*********************************************************************** * SelectBrush (X11DRV.@) */ HBRUSH X11DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) { X11DRV_PDEVICE *physDev = get_x11drv_dev( dev ); LOGBRUSH logbrush; if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0; TRACE("hdc=%p hbrush=%p\n", dev->hdc, hbrush); if (physDev->brush.pixmap) { wine_tsx11_lock(); XFreePixmap( gdi_display, physDev->brush.pixmap ); wine_tsx11_unlock(); physDev->brush.pixmap = 0; } physDev->brush.style = logbrush.lbStyle; if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( dev->hdc ); switch(logbrush.lbStyle) { case BS_NULL: TRACE("BS_NULL\n" ); break; case BS_SOLID: TRACE("BS_SOLID\n" ); BRUSH_SelectSolidBrush( physDev, logbrush.lbColor ); break; case BS_HATCHED: TRACE("BS_HATCHED\n" ); physDev->brush.pixel = X11DRV_PALETTE_ToPhysical( physDev, logbrush.lbColor ); wine_tsx11_lock(); physDev->brush.pixmap = XCreateBitmapFromData( gdi_display, root_window, HatchBrushes[logbrush.lbHatch], 8, 8 ); wine_tsx11_unlock(); physDev->brush.fillStyle = FillStippled; break; case BS_PATTERN: TRACE("BS_PATTERN\n"); if (!BRUSH_SelectPatternBrush( physDev, (HBITMAP)logbrush.lbHatch )) return 0; break; case BS_DIBPATTERN: TRACE("BS_DIBPATTERN\n"); if (!BRUSH_SelectDIBPatternBrush( physDev, (HGLOBAL)logbrush.lbHatch )) return 0; break; } return hbrush; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; int wmId, wmEvent; switch (message) { case WM_CREATE: break; case WM_CHAR: if (wParam == VK_ESCAPE) DestroyWindow(hWnd); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: { HBRUSH brush; hDC = BeginPaint(hWnd, &ps); SelectObject(hDC, GetStockObject(DC_BRUSH)); SetDCBrushColor(hDC, RGB(255, 0, 0)); GetDCBrushColor(hDC); EndPaint(hWnd, &ps); break; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
/*********************************************************************** * SelectBrush (WINEPS.@) */ HBRUSH PSDRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush, HBITMAP bitmap, const BITMAPINFO *info, void *bits, UINT usage ) { PSDRV_PDEVICE *physDev = get_psdrv_dev( dev ); LOGBRUSH logbrush; if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0; TRACE("hbrush = %p\n", hbrush); if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( dev->hdc ); switch(logbrush.lbStyle) { case BS_SOLID: PSDRV_CreateColor(dev, &physDev->brush.color, logbrush.lbColor); break; case BS_NULL: break; case BS_HATCHED: PSDRV_CreateColor(dev, &physDev->brush.color, logbrush.lbColor); break; case BS_PATTERN: case BS_DIBPATTERN: break; default: FIXME("Unrecognized brush style %d\n", logbrush.lbStyle); break; } physDev->brush.set = FALSE; return hbrush; }
/*********************************************************************** * SelectBrush (WINEPS.@) */ HBRUSH CDECL PSDRV_SelectBrush( PSDRV_PDEVICE *physDev, HBRUSH hbrush ) { LOGBRUSH logbrush; if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0; TRACE("hbrush = %p\n", hbrush); if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( physDev->hdc ); switch(logbrush.lbStyle) { case BS_SOLID: PSDRV_CreateColor(physDev, &physDev->brush.color, logbrush.lbColor); break; case BS_NULL: break; case BS_HATCHED: PSDRV_CreateColor(physDev, &physDev->brush.color, logbrush.lbColor); break; case BS_PATTERN: case BS_DIBPATTERN: break; default: FIXME("Unrecognized brush style %d\n", logbrush.lbStyle); break; } physDev->brush.set = FALSE; return hbrush; }
void KDCAttributes::DumpDC(HDC hDC) { POINT pnt; SIZE size; m_List.DeleteAll(); Add(_T("Technology"), _T("%d"), GetDeviceCaps(hDC, TECHNOLOGY)); Add(_T("width"), _T("%d"), GetDeviceCaps(hDC, HORZRES)); Add(_T("height"), _T("%d"), GetDeviceCaps(hDC, VERTRES)); GetDCOrgEx(hDC, & pnt); Add(_T("DC Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); TCHAR szTitle[MAX_PATH]; szTitle[0] = 0; GetWindowText(WindowFromDC(hDC), szTitle, MAX_PATH); Add(_T("Window"), _T("0x%X \"%s\""), WindowFromDC(hDC), szTitle); Add(_T("Bitmap"), _T("0x%X"), GetCurrentObject(hDC, OBJ_BITMAP)); Add(_T("Graphics Mode"), _T("%d"), GetGraphicsMode(hDC)); Add(_T("Mapping Mode"), _T("%d"), GetMapMode(hDC)); GetViewportExtEx(hDC, & size); Add(_T("Viewport Extent"), _T("{ %d, %d }"), size.cx, size.cy); GetViewportOrgEx(hDC, & pnt); Add(_T("Viewport Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); GetWindowExtEx(hDC, & size); Add(_T("Window Extent"), _T("{ %d, %d }"), size.cx, size.cy); GetWindowOrgEx(hDC, & pnt); Add(_T("Window Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); XFORM xform; GetWorldTransform(hDC, & xform); Add(_T("World transformation"), _T("{ %f, %f, %f, %f, %f, %f }"), xform.eM11, xform.eM12, xform.eM21, xform.eM22, xform.eDx, xform.eDy); // transformation Add(_T("Background Color"), _T("0x%X"), GetBkColor(hDC)); Add(_T("Text Color"), _T("0x%X"), GetTextColor(hDC)); Add(_T("Palette"), _T("0x%X"), GetCurrentObject(hDC, OBJ_PAL)); { COLORADJUSTMENT ca; GetColorAdjustment(hDC, & ca); Add(_T("Color Adjustment"), _T("{ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d }"), ca.caSize, ca.caFlags, ca.caIlluminantIndex, ca.caRedGamma, ca.caGreenGamma, ca.caBlueGamma, ca.caReferenceBlack, ca.caReferenceWhite, ca.caContrast, ca.caBrightness, ca.caColorfulness, ca.caRedGreenTint); } Add(_T("Color Space"), _T("0x%X"), GetColorSpace(hDC)); Add(_T("ICM Mode"), _T("%d"), SetICMMode(hDC, ICM_QUERY)); { TCHAR szProfile[MAX_PATH]; DWORD dwSize = MAX_PATH; szProfile[0] = 0; GetICMProfile(hDC, & dwSize, szProfile); Add(_T("ICM Profile"), _T("%s"), szProfile); } GetCurrentPositionEx(hDC, & pnt); Add(_T("Current Position"), _T("{ %d, %d }"), pnt.x, pnt.y); Add(_T("ROP2"), _T("%d"), GetROP2(hDC)); Add(_T("Background Mode"), _T("%d"), GetBkMode(hDC)); Add(_T("Logical Pen"), _T("0x%X"), GetCurrentObject(hDC, OBJ_PEN)); Add(_T("DC Pen Color"), _T("0x%X"), GetDCPenColor(hDC)); Add(_T("Arc Direction"), _T("%d"), GetArcDirection(hDC)); FLOAT miter; GetMiterLimit(hDC, & miter); Add(_T("Miter Limit"), _T("%f"), miter); Add(_T("Logical Brush"), _T("0x%X"), GetCurrentObject(hDC, OBJ_BRUSH)); Add(_T("DC Brush Color"), _T("0x%X"), GetDCBrushColor(hDC)); GetBrushOrgEx(hDC, & pnt); Add(_T("Brush Origin"), _T("{ %d, %d }"), pnt.x, pnt.y); Add(_T("Polygon Filling Mode"), _T("%d"), GetPolyFillMode(hDC)); Add(_T("Bitmap Stretching Mode"), _T("%d"), GetStretchBltMode(hDC)); Add(_T("Logical Font"), _T("0x%X"), GetCurrentObject(hDC, OBJ_FONT)); Add(_T("Inter-character spacing"), _T("%d"), GetTextCharacterExtra(hDC)); DWORD flag = SetMapperFlags(hDC, 0); SetMapperFlags(hDC, flag); Add(_T("Font Mapper Flags"), _T("0x%X"), flag); Add(_T("Text Alignment"), _T("0x%X"), GetTextAlign(hDC)); Add(_T("Text Justification"), _T("write only"), 0); Add(_T("Layout"), _T("%d"), GetLayout(hDC)); Add(_T("Path"), _T("%d bytes"), GetPath(hDC, NULL, NULL, 0)); RECT rect; int typ = GetClipBox(hDC, & rect); HRGN hRgn = CreateRectRgn(0, 0, 1, 1); GetClipRgn(hDC, hRgn); Add(_T("Clipping"), _T("type %d clip box { %d, %d, %d, %d } size %d bytes"), typ, rect.left, rect.top, rect.right, rect.bottom, GetRegionData(hRgn, 0, NULL) ); GetMetaRgn(hDC, hRgn); GetRgnBox(hRgn, & rect); Add(_T("Meta Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom); for (int i=1; i<=5; i++) { int rslt = GetRandomRgn(hDC, hRgn, i); if ( rslt==1 ) { GetRgnBox(hRgn, & rect); Add(_T("Random Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom); } else if ( rslt==0 ) Add(_T("Random Region"), _T("NULL"), 0); else Add(_T("Random Region"), _T("FAIL"), 0); } DeleteObject(hRgn); GetBoundsRect(hDC, & rect, 0); Add(_T("Bounds Rectangle"), _T("{ %d, %d, %d, %d }"), rect.left, rect.top, rect.right, rect.bottom); }
/*********************************************************************** * SelectBrush (X11DRV.@) */ HBRUSH X11DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_pattern *pattern ) { X11DRV_PDEVICE *physDev = get_x11drv_dev( dev ); LOGBRUSH logbrush; if (pattern) /* pattern brush */ { X_PHYSBITMAP *physbitmap; HBITMAP bitmap = pattern->bitmap; BOOL delete_bitmap = FALSE; if (!bitmap || !(physbitmap = X11DRV_get_phys_bitmap( bitmap ))) { if (!(bitmap = create_brush_bitmap( physDev, pattern ))) return 0; physbitmap = X11DRV_get_phys_bitmap( bitmap ); delete_bitmap = TRUE; } BRUSH_SelectPatternBrush( physDev, bitmap, physbitmap ); TRACE("BS_PATTERN\n"); physDev->brush.style = BS_PATTERN; if (delete_bitmap) DeleteObject( bitmap ); return hbrush; } if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0; TRACE("hdc=%p hbrush=%p\n", dev->hdc, hbrush); if (physDev->brush.pixmap) { wine_tsx11_lock(); XFreePixmap( gdi_display, physDev->brush.pixmap ); wine_tsx11_unlock(); physDev->brush.pixmap = 0; } physDev->brush.style = logbrush.lbStyle; if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( dev->hdc ); switch(logbrush.lbStyle) { case BS_NULL: TRACE("BS_NULL\n" ); break; case BS_SOLID: TRACE("BS_SOLID\n" ); BRUSH_SelectSolidBrush( physDev, logbrush.lbColor ); break; case BS_HATCHED: TRACE("BS_HATCHED\n" ); physDev->brush.pixel = X11DRV_PALETTE_ToPhysical( physDev, logbrush.lbColor ); wine_tsx11_lock(); physDev->brush.pixmap = XCreateBitmapFromData( gdi_display, root_window, HatchBrushes[logbrush.lbHatch], 8, 8 ); wine_tsx11_unlock(); physDev->brush.fillStyle = FillStippled; break; } return hbrush; }
/*********************************************************************** * SelectBrush (X11DRV.@) */ HBRUSH CDECL X11DRV_SelectBrush( X11DRV_PDEVICE *physDev, HBRUSH hbrush ) { LOGBRUSH logbrush; HBITMAP hBitmap; BITMAPINFO * bmpInfo; if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0; TRACE("hdc=%p hbrush=%p\n", physDev->hdc,hbrush); if (physDev->brush.pixmap) { wine_tsx11_lock(); XFreePixmap( gdi_display, physDev->brush.pixmap ); wine_tsx11_unlock(); physDev->brush.pixmap = 0; } physDev->brush.style = logbrush.lbStyle; if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( physDev->hdc ); switch(logbrush.lbStyle) { case BS_NULL: TRACE("BS_NULL\n" ); break; case BS_SOLID: TRACE("BS_SOLID\n" ); BRUSH_SelectSolidBrush( physDev, logbrush.lbColor ); break; case BS_HATCHED: TRACE("BS_HATCHED\n" ); physDev->brush.pixel = X11DRV_PALETTE_ToPhysical( physDev, logbrush.lbColor ); wine_tsx11_lock(); physDev->brush.pixmap = XCreateBitmapFromData( gdi_display, root_window, HatchBrushes[logbrush.lbHatch], 8, 8 ); wine_tsx11_unlock(); physDev->brush.fillStyle = FillStippled; break; case BS_PATTERN: TRACE("BS_PATTERN\n"); if (!BRUSH_SelectPatternBrush( physDev, (HBITMAP)logbrush.lbHatch )) return 0; break; case BS_DIBPATTERN: TRACE("BS_DIBPATTERN\n"); if ((bmpInfo = GlobalLock( (HGLOBAL)logbrush.lbHatch ))) { int size = bitmap_info_size( bmpInfo, logbrush.lbColor ); hBitmap = CreateDIBitmap( physDev->hdc, &bmpInfo->bmiHeader, CBM_INIT, ((char *)bmpInfo) + size, bmpInfo, (WORD)logbrush.lbColor ); BRUSH_SelectPatternBrush( physDev, hBitmap ); DeleteObject( hBitmap ); GlobalUnlock( (HGLOBAL)logbrush.lbHatch ); } break; } return hbrush; }
/*********************************************************************** * dibdrv_SelectBrush */ HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) { PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSelectBrush ); dibdrv_physdev *pdev = get_dibdrv_pdev(dev); LOGBRUSH logbrush; TRACE("(%p, %p)\n", dev, hbrush); if (!GetObjectW( hbrush, sizeof(logbrush), &logbrush )) return 0; if (hbrush == GetStockObject( DC_BRUSH )) logbrush.lbColor = GetDCBrushColor( dev->hdc ); pdev->brush_style = logbrush.lbStyle; pdev->defer |= DEFER_BRUSH; free_pattern_brush( pdev ); switch(logbrush.lbStyle) { case BS_SOLID: pdev->brush_colorref = logbrush.lbColor; pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); pdev->brush_rects = solid_brush; pdev->defer &= ~DEFER_BRUSH; break; case BS_NULL: pdev->brush_rects = null_brush; pdev->defer &= ~DEFER_BRUSH; break; case BS_DIBPATTERN: { BITMAPINFOHEADER *bi = GlobalLock((HGLOBAL)logbrush.lbHatch); dib_info orig_dib; WORD usage = LOWORD(logbrush.lbColor); HPALETTE pal = (usage == DIB_PAL_COLORS) ? GetCurrentObject(dev->hdc, OBJ_PAL) : NULL; if(!bi) return NULL; if(init_dib_info_from_packed(&orig_dib, bi, usage, pal)) { copy_dib_color_info(&pdev->brush_dib, &pdev->dib); if(convert_dib(&pdev->brush_dib, &orig_dib)) { pdev->brush_rects = pattern_brush; pdev->defer &= ~DEFER_BRUSH; } free_dib_info(&orig_dib); } GlobalUnlock((HGLOBAL)logbrush.lbHatch); break; } case BS_HATCHED: { if(logbrush.lbHatch > HS_DIAGCROSS) return 0; pdev->brush_hatch = logbrush.lbHatch; pdev->brush_colorref = logbrush.lbColor; pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); pdev->brush_rects = pattern_brush; pdev->defer &= ~DEFER_BRUSH; break; } default: break; } return next->funcs->pSelectBrush( next, hbrush ); }