随机矩形

#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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值