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

来源:互联网 发布:光明大陆pc和mac区别 编辑:程序博客网 时间:2024/05/22 08:00
 
/*********************************************************在屏幕上随机画出一系列彩色矩形**在建立多线程的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) ;}

原创粉丝点击