《Visual c++从初学到精通》读书笔记(2)

第二部分----从代码例子的角度来分析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函数的含义,以及形参与实现的含义,最后实现的效果如下图:

《Visual c++从初学到精通》读书笔记(2)_第1张图片

没什么多说的,根据API写函数就可以。
其中值得注意的是它的实现机理,特别是消息处理机制:

《Visual c++从初学到精通》读书笔记(2)_第2张图片


《Visual c++从初学到精通》读书笔记(2)_第3张图片

2、MFC编程


《Visual c++从初学到精通》读书笔记(2)_第4张图片

《Visual c++从初学到精通》读书笔记(2)_第5张图片

《Visual c++从初学到精通》读书笔记(2)_第6张图片

《Visual c++从初学到精通》读书笔记(2)_第7张图片

孙鑫:

《Visual c++从初学到精通》读书笔记(2)_第8张图片

前面是将具体1个MFC程序先是怎么从哪个地方开始执行的,在进入main之前先处理了什么,下面讲进入winmain之后,winmian是怎样执行的


可以看到与winmain形参一样


《Visual c++从初学到精通》读书笔记(2)_第9张图片

孙鑫:接下来应该是:


这样winmain函数就完了,接下来是设计窗口类和注册窗口类了:

孙鑫:

《Visual c++从初学到精通》读书笔记(2)_第10张图片


《Visual c++从初学到精通》读书笔记(2)_第11张图片

《Visual c++从初学到精通》读书笔记(2)_第12张图片

《Visual c++从初学到精通》读书笔记(2)_第13张图片





《Visual c++从初学到精通》读书笔记(2)_第14张图片

那么至此,一个空白的MFC的函数执行过程分析就是这样的。其中里面有很多类的相互调用等。

上述整个流程中,还没有讲解:

1、MFC文档结构视图的各个类之间的关系、

2、消息映射机制是怎样

3、我们自己在这个框架中应该怎样加自己的代码。下面第3部分讲解上述3个问题


3、添加一个button

《Visual c++从初学到精通》读书笔记(2)_第15张图片

《Visual c++从初学到精通》读书笔记(2)_第16张图片





《Visual c++从初学到精通》读书笔记(2)_第17张图片

《Visual c++从初学到精通》读书笔记(2)_第18张图片

《Visual c++从初学到精通》读书笔记(2)_第19张图片

熟悉了上面的winmain中的分析,再添加这么一个button不难。里面的软件截图是因为自己之前没有用过vs2010的这些功能。


4、消息机制:



通过软件增加新类,会在几个位置(视频中3个位置)增加新的代码,可以增加消息相应函数

《Visual c++从初学到精通》读书笔记(2)_第20张图片


《Visual c++从初学到精通》读书笔记(2)_第21张图片

《Visual c++从初学到精通》读书笔记(2)_第22张图片



《Visual c++从初学到精通》读书笔记(2)_第23张图片




整个流程其实比较简单吧,就是一个对照关系,跟前面写的api的程序一样,路由到操作系统后再是怎么处理的就不知道了


总结:

本意是想学习vs2010开发环境,由于主要是针对mfc设计的,加之之前了解过,并学习了c++想了解下,并且有些如dll的概念等等。通过这2天的学习,算是入了门吧,对vc编程打了个基础。但是具体的各个部分就不是很清楚了,没有深入。

另外后面可以学学linux编程,vc编程一到os就不能深入剖了。vc目前主要还是学习mfc框架。但是linux开源,可以自己选择各种开源的框架,并能剖os源码。

自己应用程序编程,没怎么真正实践过,这几天的mfc学习算是对其的一个理解吧。


                                                                                                                                                                       3-15

                                                                                                                                                               lijiuyang于hust

你可能感兴趣的:(《Visual c++从初学到精通》读书笔记(2))