第一天学习MFC,主要将window程序的运行,一些重要的API函数的初步了解,为下一步学习MFC基础基础。将学习到的东西记记~
windows应用程序与操作系统之间通过消息传递实现,操作系统将事件都封装成一个MSG的消息结构体,两者之间的交互通过消息队列完成。来看看消息中具体应有的那些信息:
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
(1)HWND(第一个参数)是一个窗口的句柄,句柄是系统资源的标识,操作系统要管理和操作这些资源,都是通过句柄找到这个句柄。功能上相当于指针。
比如按照资源的类型,有我们今后常用到的HICON(图标句柄),HCURSOR(光标句柄),HWND(窗口句柄),HINSTANCE(应用程序的实例句柄)
(2)UINT 表示一个无符号的整型,是一个消息的表示,比如是一个按键消息,鼠标键按下消息,其作用是区别各种不同种类的消息。
(3)WPARAM、LPARAM实际上是整型,指示的是消息的附加信息,比如说按下A键是,首先是WM_CHAR消息(message中指示),而附加参数指示的就是我们按下的具体是哪一个按键。
(4)消息post的时间,整型; (5)POINT结构体,包含X,Y坐标
其次来了解一下winmain函数,此函数相当于C中main函数,起到程序入口函数的作用,由系统调用。
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
);
前面两个参数指示的是应用程序的实例句柄,但是第二个参数在win32环境下总是为NULL;
LPSTR 是一个字符串的长指针,是用来存放命令行的参数
显示的状态。最大化,最小化,等等
winmain中,首先是窗口的类型的确定,产生一个窗口就像生产一辆汽车,将其中的零件填满就行了。
即将一个WNDCALSS结构体中的成员变量赋相应的值。
实例化一个窗口后,进行注册,RegiterClass();
创建窗口CreateWindow();
RegisterClass(&wndcls);
HWND hWnd;
hWnd = CreateWindow("nate","myfirst", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOWNORMAL);
UpdateWindow(hWnd);
其次就是一个消息循环。如:
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}//end of the while
循环中的两个函数意义不说也能大概知道,对于GetMessage()函数,一般情况返回非零值(C中非零则真),当获得WM_QUIT消息时返回0值,循环结束,程序完成。
窗口过程函数,即代表这个窗口的相 应执行的一些功能
其中结构主要是一个switch语句,包含自定义的各种消息的响应,WindowProc是被系统调用 的。
LRESULT CALLBACK WinNateProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
各个参数的含义已经清楚,