MFC学习笔记之一——————win32 SDK程序框架逻辑剖析

来源:互联网 发布:淘宝评价后怎么截图 编辑:程序博客网 时间:2024/05/16 16:07

第一天学习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);

各个参数的含义已经清楚,






原创粉丝点击