第二部分----从代码例子的角度来分析mfc架构及windows编程
1、windows api编程
<span style="font-size:14px;"><strong>#include <windows.h> #include <stdio.h> LRESULT CALLBACK WinExample1Proc( //对窗口过程函数进行声明 HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( //Win32应用程序的入口函数 HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASS wndcls; //创建一个窗口类 wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinExample1Proc; wndcls.lpszClassName="example1"; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); //注册窗口类 HWND hwnd; //创建窗口,并定义一个窗口句柄来唯一标识该窗口 hwnd=CreateWindow("example1","一个Windows应用程序的窗口",WS_OVERLAPPEDWINDOW, 0,0,500,500,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); //显示和更新窗口 UpdateWindow(hwnd); MSG msg; //定义消息结构体并进行消息循环 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WinExample1Proc( //编写窗口过程函数,实现消息处理; HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { char exChar2[]={"第一个Windows应用程序"}; switch(uMsg) { case WM_CHAR: char exChar1[40]; sprintf(exChar1,"键盘输入字符的ASCII值为: %d",wParam); MessageBox(hwnd,exChar1,"char",0); break; case WM_RBUTTONDOWN: MessageBox(hwnd,"右键被按下","message",0); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"要结束吗?","提示:",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); RECT rt; GetClientRect(hwnd,&rt); DrawText(hDC,exChar2,strlen(exChar2),&rt,DT_CENTER); EndPaint(hwnd,&ps); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; } </strong></span>
没什么多说的,根据API写函数就可以。
其中值得注意的是它的实现机理,特别是消息处理机制:
2、MFC编程
孙鑫:
前面是将具体1个MFC程序先是怎么从哪个地方开始执行的,在进入main之前先处理了什么,下面讲进入winmain之后,winmian是怎样执行的
可以看到与winmain形参一样
孙鑫:接下来应该是:
这样winmain函数就完了,接下来是设计窗口类和注册窗口类了:
孙鑫:
那么至此,一个空白的MFC的函数执行过程分析就是这样的。其中里面有很多类的相互调用等。
上述整个流程中,还没有讲解:
1、MFC文档结构视图的各个类之间的关系、
2、消息映射机制是怎样
3、我们自己在这个框架中应该怎样加自己的代码。下面第3部分讲解上述3个问题
3、添加一个button
熟悉了上面的winmain中的分析,再添加这么一个button不难。里面的软件截图是因为自己之前没有用过vs2010的这些功能。
4、消息机制:
通过软件增加新类,会在几个位置(视频中3个位置)增加新的代码,可以增加消息相应函数
整个流程其实比较简单吧,就是一个对照关系,跟前面写的api的程序一样,路由到操作系统后再是怎么处理的就不知道了
总结:
本意是想学习vs2010开发环境,由于主要是针对mfc设计的,加之之前了解过,并学习了c++想了解下,并且有些如dll的概念等等。通过这2天的学习,算是入了门吧,对vc编程打了个基础。但是具体的各个部分就不是很清楚了,没有深入。
另外后面可以学学linux编程,vc编程一到os就不能深入剖了。vc目前主要还是学习mfc框架。但是linux开源,可以自己选择各种开源的框架,并能剖os源码。
自己应用程序编程,没怎么真正实践过,这几天的mfc学习算是对其的一个理解吧。
3-15
lijiuyang于hust