windows多线程编程-----2.在屏幕上随机画出一系列彩色矩形

22 篇文章 0 订阅
 
/*******************************************************
*
*在屏幕上随机画出一系列彩色矩形
*
*在建立多线程的Windows程序时,需要在「Project Settings」对话框中做一些修改。选择「C/C++」页面标签,
*然后在「Category」下拉式清单方块中选择「Code Generation」。
*在「Use Run-Time Library」下拉式清单方块中,可以看到用于「Release」设定的
*「Single-Threaded」和用于Debug设定的「Debug Single-Threaded」。
*将这些分别改为「Multithreaded」和「Debug Multithreaded」。
*这将把编译器旗标改为/MT,它是编译器在编译多线程的应用程序所需要的。

对本贴有更好的方法或建议可以给本人留言或发邮件: 
Email:zww0815@qq.com 
Thanks! 
***********************************************************/


#include <windows.h>
#include <process.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
HWND hwnd ;

int cxClient, cyClient ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
					PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szAppName[] = TEXT ("RndRctMT") ;
	MSG msg ;
	WNDCLASS wndclass ;

	wndclass.style = CS_HREDRAW | CS_VREDRAW ;
	wndclass.lpfnWndProc = WndProc ;
	wndclass.cbClsExtra = 0 ;
	wndclass.cbWndExtra = 0 ;
	wndclass.hInstance = hInstance ;
	wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
	wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
	wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
	wndclass.lpszMenuName = NULL ;
	wndclass.lpszClassName = szAppName ;
	
	if (!RegisterClass (&wndclass))
	{
		MessageBox(NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR);
		return 0;
	}
	
	hwnd = CreateWindow(szAppName, TEXT ("Random Rectangles"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL);
	ShowWindow (hwnd, iCmdShow) ;
	UpdateWindow (hwnd);
	
	while (GetMessage (&msg, NULL, 0, 0))
	{
		TranslateMessage (&msg);
		DispatchMessage (&msg);
	}
	
	return msg.wParam ;
}

VOID Thread (PVOID pvoid)
{
	HBRUSH hBrush;
	HDC hdc;
	int xLeft, xRight, yTop, yBottom, iRed, iGreen, iBlue;
	
	while (TRUE)
	{
		Sleep(100);
		if (cxClient != 0 || cyClient != 0)
		{
			xLeft = rand () % cxClient;
			xRight = rand () % cxClient;
			yTop = rand () % cyClient;
			yBottom = rand () % cyClient;
			iRed = rand () & 255 ;
			iGreen = rand () & 255 ;
			iBlue = rand () & 255 ;
			
			hdc = GetDC (hwnd) ;
			hBrush = CreateSolidBrush (RGB (iRed, iGreen, iBlue));
			SelectObject (hdc, hBrush);
			
			Rectangle (hdc,min (xLeft, xRight), min (yTop, yBottom),
				max (xLeft, xRight), max (yTop, yBottom));
			ReleaseDC (hwnd, hdc);
			DeleteObject (hBrush);
		}
	}
}

LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_CREATE:
		_beginthread (Thread, 0, NULL) ;
		return 0 ;
	case WM_SIZE:
		cxClient = LOWORD (lParam);
		cyClient = HIWORD (lParam);
		return 0 ;
	case WM_DESTROY:
		PostQuitMessage (0);
		return 0;
	}
	
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值