76cbe52eb2eb20757dbf63cac9b0f64405484704
2 * Shows the 15 well known BitBlt raster operations
3 * using src, dest, pattern, a background brush and color.
5 * Created by Gregor Schneider <grschneider AT gmail DOT com>, November 2008
12 TCHAR szWindowClass
[] = _T("testclass");
14 static LRESULT CALLBACK
15 WndProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
17 static HBITMAP hBmpTest
;
23 hBmpTest
= (HBITMAP
)LoadImage(hInst
, MAKEINTRESOURCE(100), IMAGE_BITMAP
, 0, 0, LR_DEFAULTCOLOR
);
34 hdc
= BeginPaint(hWnd
, &ps
);
35 hdcMem
= CreateCompatibleDC(hdc
);
37 GetObject(hBmpTest
, sizeof(BITMAP
), &bitmap
);
39 /* fill destination with brush */
40 brush
= CreateHatchBrush(HS_DIAGCROSS
, RGB(255,0,0));
41 SelectObject(hdc
, brush
);
42 PatBlt(hdc
, 30, 0, 4*bitmap
.bmWidth
*2, 4*bitmap
.bmHeight
, PATCOPY
);
46 brush
= CreateHatchBrush(HS_DIAGCROSS
, RGB(255,0,0));
47 SelectObject(hdc
, brush
);
48 PatBlt(hdc
, 0, 0, 30, l
, PATCOPY
);
51 brush
= CreateHatchBrush(HS_CROSS
, RGB(255,0,0));
52 SelectObject(hdc
, brush
);
53 PatBlt(hdc
, 0, 1*l
, 30, l
, PATCOPY
);
56 brush
= CreateHatchBrush(HS_FDIAGONAL
, RGB(255,0,0));
57 SelectObject(hdc
, brush
);
58 PatBlt(hdc
, 0, 2*l
, 30, l
, PATCOPY
);
61 brush
= CreateHatchBrush(HS_BDIAGONAL
, RGB(255,0,0));
62 SelectObject(hdc
, brush
);
63 PatBlt(hdc
, 0, 3*l
, 30, l
, PATCOPY
);
66 brush
= CreateHatchBrush(HS_VERTICAL
, RGB(255,0,0));
67 SelectObject(hdc
, brush
);
68 PatBlt(hdc
, 0, 4*l
, 30, l
, PATCOPY
);
71 brush
= CreateHatchBrush(HS_HORIZONTAL
, RGB(255,0,0));
72 SelectObject(hdc
, brush
);
73 PatBlt(hdc
, 0, 5*l
, 30, l
, PATCOPY
);
76 /* set up a second brush */
77 brush2
= CreateHatchBrush(HS_VERTICAL
, RGB(127,127,127));
79 /* first select brush, then set bk color */
80 SelectObject(hdc
, brush2
);
81 SetBkColor(hdc
, RGB(0, 255, 0));
83 /* 15 blt op's with bitblt */
84 SelectObject(hdcMem
, hBmpTest
);
85 /* offset coordinates */
86 SetWindowOrgEx(hdc
, -10, -10, NULL
);
87 BitBlt(hdc
, 30, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, SRCCOPY
);
88 BitBlt(hdc
, 130, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, DSTINVERT
);
89 BitBlt(hdc
, 230, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, MERGECOPY
);
90 BitBlt(hdc
, 330, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, MERGEPAINT
);
92 BitBlt(hdc
, 30, 100, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, NOTSRCCOPY
);
93 BitBlt(hdc
, 130, 100, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, NOTSRCERASE
);
94 BitBlt(hdc
, 230, 100, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, PATCOPY
);
95 BitBlt(hdc
, 330, 100, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, PATINVERT
);
97 BitBlt(hdc
, 30, 200, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, PATPAINT
);
98 BitBlt(hdc
, 130, 200, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, SRCAND
);
99 BitBlt(hdc
, 230, 200, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, SRCERASE
);
100 BitBlt(hdc
, 330, 200, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, SRCINVERT
);
102 BitBlt(hdc
, 30, 300, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, BLACKNESS
);
103 BitBlt(hdc
, 130, 300, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, SRCPAINT
);
104 BitBlt(hdc
, 230, 300, bitmap
.bmWidth
, bitmap
.bmHeight
, hdcMem
, 0, 0, WHITENESS
);
106 /* 15 blt op's with stretchblt */
107 StretchBlt(hdc
, 30+400, 0, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, SRCCOPY
);
108 StretchBlt(hdc
, 130+400, 0, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, DSTINVERT
);
109 StretchBlt(hdc
, 230+400, 0, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, MERGECOPY
);
110 StretchBlt(hdc
, 330+400, 0, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, MERGEPAINT
);
112 StretchBlt(hdc
, 30+400, 100, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, NOTSRCCOPY
);
113 StretchBlt(hdc
, 130+400, 100, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, NOTSRCERASE
);
114 StretchBlt(hdc
, 230+400, 100, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, PATCOPY
);
115 StretchBlt(hdc
, 330+400, 100, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, PATINVERT
);
117 StretchBlt(hdc
, 30+400, 200, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, PATPAINT
);
118 StretchBlt(hdc
, 130+400, 200, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, SRCAND
);
119 StretchBlt(hdc
, 230+400, 200, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, SRCERASE
);
120 StretchBlt(hdc
, 330+400, 200, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, SRCINVERT
);
122 StretchBlt(hdc
, 30+400, 300, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, BLACKNESS
);
123 StretchBlt(hdc
, 130+400, 300, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, SRCPAINT
);
124 StretchBlt(hdc
, 230+400, 300, bitmap
.bmWidth
/2, bitmap
.bmHeight
/2, hdcMem
, 0, 0, bitmap
.bmWidth
, bitmap
.bmHeight
, WHITENESS
);
127 DeleteObject(brush2
);
137 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
144 MyRegisterClass(HINSTANCE hInstance
)
148 wcex
.cbSize
= sizeof(WNDCLASSEX
);
150 wcex
.style
= CS_HREDRAW
| CS_VREDRAW
;
151 wcex
.lpfnWndProc
= WndProc
;
154 wcex
.hInstance
= hInstance
;
156 wcex
.hCursor
= LoadCursor(NULL
, IDC_ARROW
);
157 wcex
.hbrBackground
= (HBRUSH
)(COLOR_WINDOW
+1);
158 wcex
.lpszMenuName
= NULL
;
159 wcex
.lpszClassName
= szWindowClass
;
162 return RegisterClassEx(&wcex
);
167 InitInstance(HINSTANCE hInstance
, int nCmdShow
)
173 hWnd
= CreateWindowEx(0,
175 _T("BitBlt raster operation test"),
191 ShowWindow(hWnd
, nCmdShow
);
199 _tWinMain(HINSTANCE hInstance
,
200 HINSTANCE hPrevInstance
,
206 MyRegisterClass(hInstance
);
208 if (!InitInstance(hInstance
, nCmdShow
))
213 while (GetMessage(&msg
, NULL
, 0, 0))
215 TranslateMessage(&msg
);
216 DispatchMessage(&msg
);
219 return (int)msg
.wParam
;