对于一个刚刚学习可视化编程的同学来讲,想要理解一个Windows应用程序的运行机制还是很困难的。但是如果,不能很好的理解Windows编程,那么学习MFC就更是难上加难。基于这个原因,我现在想谈谈一个如何去理解一个Windows应用程序,以及编写简单的MFC程序。
下面我来具体分析一个使用Windows API编写的程序。
firstwindow.lpszMenuName = NULL;
firstwindow.style =CS_HREDRAW | CS_VREDRAW;
RegisterClass(&firstwindow);
HWND hwnd;
hwnd = CreateWindow("zhi","zzbarry",WS_OVERLAPPEDWINDOW ,30,30,1000,1000,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinMeProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg){
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"zhi",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"zhi","zhi",0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc,0,30,"zhi",strlen("zhi"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps);
TextOut(hDC,0,30,"zhiming",strlen("zhiming"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"退出?","zhi",MB_YESNO)){
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
对于一个Windows程序,它的开始函数是WinMain,这个函数的意义相当于DOS下的Main函数。这个函数的调用,发动了整Windows程序。WinMain的四个参数,在这里不详细解释,可以查看MSDN。WinMain中做了一下几个事情:
第一,定义了WNDCLASS类,这个类定了窗口的属性。具体的属性大家还是要查看MSDN。作为一个程序员如果不能很好的查阅资料那是相当悲剧的。 紧接着,调用RegisterClass来注册窗口,紧接着调用CreateWindow,来创造窗口。再紧接着调用UpdateWindow来更新窗口。注意这个期间定义了一个句柄,因为下面的函数必须给以传递句柄参数。剩下的就是消息循环。Windows程序的启动和更改都是靠的消息循环。这个可以查看MSDN中的MSG结构体来查看。
今天不早了,先讲WIndows程序,明天继续讲解如何编写一个简单的MFC程序。自己写的不好,第一次发技术贴,请大家多多关照。