创建一个线程的API函数叫做CreateThread
hThread=CreateThread(&security_attributee,dwStackSize,ThreadProc,pParam,dwFlags,&idThread);
大部分的Windows程序员都会倾向于使用C的运行时库函数_beginthread()(在头文件process.h中)
hThread=_beginthread(ThreadProc,uiStackSize,pParam);
下面看一个程序(来自Windows程序设计第五版,可以跟前面博客PeekMessage函数比较一下)
#include<windows.h>
#include<process.h>
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
HWND hwnd;
int cxClient,cyClient;
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
static TCHAR szAppName[]=TEXT("leidemingzi");
MSG msg;
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WindowProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("the program require the window nt"),TEXT("tips"),MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(
szAppName, // registered class name
TEXT("this is title"), // window name
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // horizontal position of window
CW_USEDEFAULT, // vertical position of window
CW_USEDEFAULT, // window width
CW_USEDEFAULT, // window height
NULL, // handle to parent or owner window
NULL, // menu handle or child identifier
hInstance, // handle to application instance
NULL // window-creation data
);
ShowWindow(hwnd,nCmdShow);
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,yButtom,iRed,iGreen,iBlue;
PAINTSTRUCT ps;
while(TRUE)
{
if(cxClient!=0||cyClient!=0)
{
xLeft=rand()%cxClient;
xRight=rand()%cxClient;
yTop=rand()%cyClient;
yButtom=rand()%cyClient;
iRed=rand()%255;
iGreen=rand()%255;
iBlue=rand()%255;
hdc=GetDC(hwnd);
//hdc=BeginPaint(hwnd,&ps);
hBrush=CreateSolidBrush(RGB(iRed,iGreen,iBlue));
SelectObject(hdc,hBrush);
Rectangle(hdc,min(xLeft,xRight),min(yTop,yButtom),max(xLeft,xRight),max(yTop,yButtom));
ReleaseDC(hwnd,hdc);
//EndPaint(hwnd,&ps);
DeleteObject(hBrush);
}
}
//_endthread();
}
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
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,uMsg,wParam,lParam);
}
效果跟PeekMessage函数是一样的,随机产生矩形