LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HRGN r1, r2, r5;
HBRUSH hbr1, hbr2, hbr3;
HDC hTmpDc;
int res;
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case ID_FILL:
hTmpDc = GetDC(hWnd);
r1 = CreateRoundRectRgn(80, 20, 215, 150, 100, 50);
hbr1 = CreateSolidBrush(RGB(255, 0, 0));
FillRgn(hTmpDc, r1, hbr1);
r2 = CreateRoundRectRgn(200, 75, 250, 125, 10, 10);
hbr2 = CreateSolidBrush(RGB(0, 255, 0));
FillRgn(hTmpDc, r2, hbr2);
DeleteObject(r1);
DeleteObject(r2);
DeleteObject(hbr1);
DeleteObject(hbr2);
ReleaseDC(hWnd, hTmpDc);
break;
case ID_FILLSCREEN:
hTmpDc = CreateDC(_T("DISPLAY"),NULL,NULL,NULL);
r1 = CreateRoundRectRgn(80, 20, 215, 150, 100, 50);
hbr1 = CreateSolidBrush(RGB(255, 0, 0));
FillRgn(hTmpDc, r1, hbr1);
r2 = CreateRoundRectRgn(200, 75, 250, 125, 10, 10);
hbr2 = CreateSolidBrush(RGB(0, 255, 0));
FillRgn(hTmpDc, r2, hbr2);
DeleteObject(r1);
DeleteObject(r2);
DeleteObject(hbr1);
DeleteObject(hbr2);
ReleaseDC(hWnd, hTmpDc);
break;
case ID_COMBINE:
hTmpDc = GetDC(hWnd);
r1 = CreateRoundRectRgn(80, 20, 215, 150, 100, 50);
hbr1 = CreateSolidBrush(RGB(255, 0, 0));
FillRgn(hTmpDc, r1, hbr1);
r2 = CreateRoundRectRgn(200, 75, 250, 125, 10, 10);
hbr2 = CreateSolidBrush(RGB(0, 255, 0));
FillRgn(hTmpDc, r2, hbr2);
hbr3 = CreateSolidBrush(RGB(0, 0, 255));
r5 = CreateRectRgn(0, 0, 0, 0);
res = CombineRgn(r5, r1, r2, RGN_AND);
if (res==ERROR || NULLREGION==res)
{
MessageBox(hWnd, _T("CombineRgn failed"), 0, MB_OK);
}
else
{
FillRgn(hTmpDc, r5, hbr3);
}
DeleteObject(r1);
DeleteObject(r2);
DeleteObject(r5);
DeleteObject(hbr1);
DeleteObject(hbr2);
DeleteObject(hbr3);
ReleaseDC(hWnd, hTmpDc);
break;
case ID_COMBINE_OR:
hTmpDc = GetDC(hWnd);
r1 = CreateRoundRectRgn(80, 20, 215, 150, 100, 50);
hbr1 = CreateSolidBrush(RGB(255, 0, 0));
FillRgn(hTmpDc, r1, hbr1);
r2 = CreateRoundRectRgn(200, 75, 250, 125, 10, 10);
hbr2 = CreateSolidBrush(RGB(0, 255, 0));
FillRgn(hTmpDc, r2, hbr2);
hbr3 = CreateSolidBrush(RGB(0, 0, 255));
r5 = CreateRectRgn(0, 0, 0, 0);
res = CombineRgn(r5, r1, r2, RGN_OR);
if (res == ERROR || NULLREGION == res)
{
MessageBox(hWnd, _T("CombineRgn failed"), 0, MB_OK);
}
else
{
FillRgn(hTmpDc, r5, hbr3);
}
DeleteObject(r1);
DeleteObject(r2);
DeleteObject(r5);
DeleteObject(hbr1);
DeleteObject(hbr2);
DeleteObject(hbr3);
ReleaseDC(hWnd, hTmpDc);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 在此处添加使用 hdc 的任何绘图代码...
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
c++ win32 填充合并区域
猜你喜欢
转载自blog.csdn.net/dxm809/article/details/114014179
今日推荐
周排行