#include<windows.h>
#define WM_MYHOTKEY WM_USER+100
void draw(HWND hwnd);
static int cxClient, cyClient;
LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
{
HDC dc;
RECT rec;
PAINTSTRUCT ps;
if (wparam == WM_MYHOTKEY)
{
MessageBox(NULL, "", "", MB_OK);
return 0;
}
switch (umsg)
{
case WM_KEYDOWN:
//if (::GetKeyState(VK_CONTROL) && ::GetKeyState(VK_MENU))
case WM_KEYUP:
case WM_CHAR:
case WM_SYSKEYDOWN:
if (wparam == VK_MENU)
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
case WM_SYSKEYUP:
case WM_SYSCHAR:
return 0;
case WM_PAINT:
BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rec);
dc = GetDC(hwnd);
//TextOut(dc, rec.right/2, rec.bottom/2, "hanhanhan", 9);
//DrawText(dc, "韩良伟", 6, &rec, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
EndPaint(hwnd, &ps);
break;
case WM_SIZE:
cxClient = LOWORD(lparam);
cyClient = HIWORD(lparam);
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, umsg, wparam, lparam); //默认的窗口处理函数
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevinstace, PSTR szCmdLine, int iCmdShow)
{
TCHAR szName[] = "My Windows"; //用于保存窗口类名
HWND hWnd;
MSG msg;
WNDCLASS wnd;
wnd.style = CS_VREDRAW | CS_HREDRAW;
wnd.lpfnWndProc = WndProc; //回调函数
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hInstance = hInstance;// 应用程序实例句柄
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wnd.lpszMenuName = NULL;
wnd.lpszClassName = szName; //指定窗口类名
if (!RegisterClass(&wnd))
{
MessageBox(NULL, TEXT("注册窗口失败!"), TEXT("警告"), MB_ICONWARNING);
return 0;
}
hWnd = CreateWindow(szName, TEXT("class"), NULL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
RegisterHotKey(hWnd, WM_MYHOTKEY, MOD_CONTROL|MOD_ALT ,'s');
while (1)//获取到WM_QUIT返回值为0,其他为非0值
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);// 将虚拟键消息转换为字符消息
DispatchMessage(&msg);// 将消息传送到窗口函数
}
else
draw(hWnd);
}
return 0;
}
void draw(HWND hwnd)
{
int cx, cy;
cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);
MoveWindow(hwnd,0,0,cx,cy,FALSE);
LONG Style = ::GetWindowLong(hwnd, GWL_STYLE);
::SetWindowLong(hwnd, GWL_STYLE, Style&~WS_CAPTION);
::SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
//Rectangle,RoudRect,Ellipse,Chord,Pie等函数会实用设备环境的当前画刷来填充
//Sleep(50);
HBRUSH hBrush;
HDC hDc;
RECT rect;
hDc = GetDC(hwnd);
SetRect(&rect, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient);//设置一个矩形区域
hBrush = CreateSolidBrush(RGB(rand() % 255, rand() % 255, rand() % 255));//创建一个随机颜色的画刷
//hBrush = CreateHatchBrush(HS_CROSS, RGB(rand() % 255, rand() % 255, rand() % 255));//创建一个带阴影的画刷
//hBrush = (HBRUSH)GetStockObject(GRAY_BRUSH); //选用系统定义好的画刷
FillRect(hDc, &rect, hBrush); //用此画刷填充矩形区域
SelectObject(hDc, hBrush);//讲画刷选入当前设备环境
// SelectObject(hDc, GetStockObject(NULL_PEN)); //如果要使得矩形没有边框,则要将不带颜色的画笔选入当前设备环境
//RoundRect(hDc, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient);//绘制矩形
// Chord(hDc, 0, 0, cxClient, cyClient, cxClient / 2, 0, 0, cyClient / 2); //椭圆弧线,四个坐标分别代表椭圆的左上角和右下角,绘制的开始坐标以及结束坐标
ReleaseDC(hwnd, hDc);
DeleteObject(hBrush);
}
随机矩形
最新推荐文章于 2021-02-23 03:31:54 发布