`
lingyibin
  • 浏览: 190919 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MFC学习笔记(一)

阅读更多

之前也学过一点MFC的知识,但因很久没去碰就都忘 得差不多了。于是我想再从头开始,系统的再学一遍,并同步这个学习笔记。与大家共享,共同学习MFC。学习教材主要是清华大学出版的《MFC Windows 应用程序设计(第二版)》。当然也会参考一些其它的资料……

该书的目录如下:

 

第1章 Windows应用程序基础知识 
 1.1 Windows应用程序的基本概念
 1.2 Windows应用程序的结构
 1.3 用函数封装Windows程序
 1.4 窗口函数的另一种结构
 小结
 练习题
 思考题
第2章 Windows应用程序的类封装
 2.1 应用程序主函数的C++类封装
 2.2 派生类的应用
 2.3 窗口函数的封装--消息映射
 小结
 练习题
 思考题
第3章 MFC应用程序框架
 3.1 早期的应用程序框架及其MFC类
 3.2 最简单的MFC程序实例
 3.3 应用程序的文档/视图结构
 3.4 文档类CDocument的派生类
 3.5 视图类CView的派生类
 3.6 窗口框架类CFrameWnd的派生类
 3.7 文档模板类CDocTemplate 
 3.8 应用程序类的派生类
 3.9 MFC文档/视图应用程序框架中各个对象的关系
 3.10 对象的动态创建
 小结
 练习题
 思考题
第4章 图形
第5章 MFC的通用类
第6章 Windows应用程序界面的设计
第7章 鼠标和键盘
第8章 资源
第9章 MFC的文件处理机制
第10章 控件
第11章 对话框
第12章 进程与线程的管理
第13章 动态链接库及其使用
第14章 组件对象模型基础
第15章 ActiveX应用基础
第16章 用MFC设计数据库应用程序
第17章 异常和异常处理
附录A 数据类型与Windows句柄
附录B 标识符的匈牙利记法
附录C MFC的消息映射
附录D 文档/视图框架的补充内容
附录E 多文档/视图框架的一个实例
附录F 类信息表与CObject类
附录G Visual C++中文件类型小结
参考文献
第1章 Windows应用程序基础知识 
 1.1 Windows应用程序的基本概念
 1.2 Windows应用程序的结构
 1.3 用函数封装Windows程序
 1.4 窗口函数的另一种结构
 小结
 练习题
 思考题
第2章 Windows应用程序的类封装
 2.1 应用程序主函数的C++类封装
 2.2 派生类的应用
 2.3 窗口函数的封装--消息映射
 小结
 练习题
 思考题
第3章 MFC应用程序框架
 3.1 早期的应用程序框架及其MFC类
 3.2 最简单的MFC程序实例
 3.3 应用程序的文档/视图结构
 3.4 文档类CDocument的派生类
 3.5 视图类CView的派生类
 3.6 窗口框架类CFrameWnd的派生类
 3.7 文档模板类CDocTemplate 
 3.8 应用程序类的派生类
 3.9 MFC文档/视图应用程序框架中各个对象的关系
 3.10 对象的动态创建
 小结
 练习题
 思考题
第4章 图形
第5章 MFC的通用类
第6章 Windows应用程序界面的设计
第7章 鼠标和键盘
第8章 资源
第9章 MFC的文件处理机制
第10章 控件
第11章 对话框
第12章 进程与线程的管理
第13章 动态链接库及其使用
第14章 组件对象模型基础
第15章 ActiveX应用基础
第16章 用MFC设计数据库应用程序
第17章 异常和异常处理
附录A 数据类型与Windows句柄
附录B 标识符的匈牙利记法
附录C MFC的消息映射
附录D 文档/视图框架的补充内容
附录E 多文档/视图框架的一个实例
附录F 类信息表与CObject类
附录G Visual C++中文件类型小结
参考文献

 在此列出,仅做参考。

 

本文是个开头篇,因此从最简单的Windows程序设计说起。每个笔记都是代码占主要部分。。其中的细节大都以注释的方式给出。

 

#include<windows.h>
//声明窗口函数原型
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//-------------------------------------------------------------------
//主函数,程序的入口
int WINAPI WinMain(HINSTANCE hInstance, //当前应用程序实例的句柄
				   HINSTANCE PreInstance, //前一个应用程序实例句柄
				   LPSTR lpCmdLine, //指向本程序命令行的指针
				   int nCmdShow) //决定应用程序窗口显示方式的标志,下面会讲
{
	HWND hwnd; //窗口句柄,用来把持整个窗口
	MSG  msg; //窗口消息
	char lpszClassName[]="窗口"; //窗口类型名,给下面的用,可以直接写在下面
	WNDCLASS wc; //窗口名,注册这个窗口时用到
	wc.style=0; //窗口样式,一般设置为0
	wc.lpfnWndProc=WndProc; //指向窗口函数的指针
	wc.cbClsExtra=0; //一般设为0
	wc.cbWndExtra=0; //一般设为0
	wc.hInstance=hInstance; //定义窗口应用程序的实例句柄
	wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); //加载窗口的图标
	wc.hCursor=LoadCursor(NULL,IDC_ARROW);  //加载光标
	wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //设置窗口背景颜色
	wc.lpszMenuName=NULL; //窗口的菜单资源名
	wc.lpszClassName=lpszClassName; //窗口类型名

	RegisterClass(&wc); //注册这个窗口
//创建窗口
	hwnd=CreateWindow(	lpszClassName, //窗口类型名
						"Windows", //窗口实例标题
						WS_OVERLAPPEDWINDOW, //窗口风格
						120,50,800,600, //窗口左上x值,左上y值,宽度和高度
						NULL, //父窗口的句柄
						NULL, //主菜单的句柄
						hInstance, //应用程序实例句柄
						NULL); //无参数,设为NULL

	ShowWindow(hwnd,nCmdShow); //显示窗口
	UpdateWindow(hwnd); //更新窗口
//用一个死循环来等待并读取消息。当读不到时,GetMessage函数不会返回。
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg); //解析讲到的事件消息
		DispatchMessage(&msg); //分发事件消息,由下面的WndProc函数处理
	}
	return msg.wParam;
}

//------------------------------------------------------------------
//处理消息的窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	switch(message)
	{
	case WM_LBUTTONDOWN:
		{
			MessageBeep(0); //按下左键时就beep一声
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0); //当上面的while循环遇到这个消息时就会中止,因为它让GetMessage返回0
		break;
	default:
		return DefWindowProc(hwnd,message,wParam,lParam); //其它的事件交给默认的窗口过程来处理
	}
	return 0;
}

得到了最简单的一个窗口 ,如下图:


WinMain里面的第四个参数在MSDN里面有如下说明:


写Win32窗口程序时,上面这段代码可以直接拷过去用,之后再在这基础上做些增加、修改就是一个新的窗口应用程序了。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics