/*******************************************************
*
*在屏幕上随机画出一系列彩色矩形
*
*在建立多线程的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) ;
}
windows多线程编程-----2.在屏幕上随机画出一系列彩色矩形
最新推荐文章于 2022-09-05 22:00:47 发布