现在的位置: 首页 > 综合 > 正文

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

2012年12月28日 ⁄ 综合 ⁄ 共 1625字 ⁄ 字号 评论关闭

  主要将window程序的运行,一些重要的API函数的初步了解,为下一步学习MFC基础基础。将学习到的东西记记~大笑

windows应用程序与操作系统之间通过消息传递实现,操作系统将事件都封装成一个MSG的消息结构体,两者之间的交互通过消息队列完成。来看看消息中具体应有的那些信息:

1 typedef struct tagMSG {     // msg  
2 HWND hwnd;
3 UINT message;
4 WPARAM wParam;
5 LPARAM lParam;
6 DWORD time;
7 POINT pt;
8 } 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函数,起到程序入口函数的作用,由系统调用。

1 int WINAPI WinMain(
2 HINSTANCE hInstance, // handle to current instance
3 HINSTANCE hPrevInstance, // handle to previous instance
4 LPSTR lpCmdLine, // pointer to command line
5 int nCmdShow // show state of window
6 );

  前面两个参数指示的是应用程序的实例句柄,但是第二个参数在win32环境下总是为NULL;

LPSTR 是一个字符串的长指针,是用来存放命令行的参数
显示的状态。最大化,最小化,等等

winmain中,首先是窗口的类型的确定,产生一个窗口就像生产一辆汽车,将其中的零件填满就行了。
即将一个WNDCALSS结构体中的成员变量赋相应的值。
实例化一个窗口后,进行注册,RegiterClass();
创建窗口CreateWindow();

1 RegisterClass(&wndcls);
2 HWND hWnd;
3 hWnd = CreateWindow("nate","myfirst", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,400,NULL,NULL,hInstance,NULL);
4 ShowWindow(hWnd,SW_SHOWNORMAL);
5 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);

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

通过以上,不用IDE的生成代码也能自己写出hello world的win32窗口应用程序了!





抱歉!评论已关闭.