寒假开始了 准备好好的看一下vc(MFC) 虽然已经进入.net 时代 但是任何一个开发环境和类库的学习和熟悉的过程还是大同小异的,一直再看孙鑫的c++视频 觉得还不错接下来的时间就把其视频要点总结一下
第一课: windows 应用程序基础
在介绍MFC之前先了解windows API编程 我认为这是windows编程的基础 了解了windows API 再看MFC就会觉得很简单了 只是一些简单的封装为函数的类 即将其面向对象化.当然其中还会有一些win32函数.
先讲了windows应用程序的运行机制,windows应用程序是基于消息循环的,应用程序通过与操作系统的消息交互,;来完成自身的功能,操作系统铺获来自用户或者是i/O设备的改变或操作 封装为消息结构体 放在一个FIFO队列中,在用户应用程序中 自行编写消息循环,和消息处理函数.
windows应用程序作为一种窗口型的应用程序,即所有程序都是以一种窗口的形式展现的 windows API 给我们提供了一些函数来构造这些窗口,同DOS下编程一样 windows程序的入口函数是从一个叫做WinMain的入口函数开始的,注意大小写区分,在这个函数内部我们开始窗口类的设计,注册 产生和 显示更新.以及重要的消循环和消息处理函数的编写(核心).
首先介绍消息结构体的结构
typedef struct tagMSG {
HWND hwnd; 接受消息的窗口句柄 应用程序实例句柄 HINSTANCE
UNIT message; 消息号 用无符号的整形定义, 大多数情况下用宏定义WM_messages
WPARAM wParam; 整形 表示消息的附加信息 ASCII 码
LPARAM lParam; 整形 表示消息的附加信息
DWORD time; 32 位的整数 表示消息被投递的时间
POINT pt; 结构体 表示光标的坐标(消息被投递时)
} MSG, *PMSG;
其中HWND WPARAM LPARAM DWORD POINT UNIT都是windows中给我们定义的数据类型 以H开头的数据类型一般是表示句柄类型,其中句柄是windows的一种资源表示,有窗口句柄,应用程序实例句柄,图标句柄等. WPRARM,LPARAM都是代表的消息的附加信息.
WinMain函数有四个形参分别表示当前实例,先前应用程序实例,和接受到的命令行的参数,(可通过工程的设置来指示程序接受命令行参数)以及窗口显示的式样.
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
WinMain函数是由操作系统调用 我们不需要对其进行操作.
然后就是进行窗口类的设计 主要是填充窗口类的填充即wndclass类定义.其中窗口类的类型可以通过与,反,或运算来进行复合显示.(只有一位为一其余为零) 在类中还有关于该窗口类的消息处理函数声明,和该类类名.然后通过registerclass函数进行注册,最后是通过creatwindow函数创造赋值给一个窗口句柄.以及showwindow和updatewindow 显示更新. getstockobject获得笔,花刷,字体,的句柄.
LPVOID 指向任何类型 typedef void *LPVOID;在创建多文档窗口中将作为WM_CREAT的附加消息传递.
lresult 类型表示一个 long_ptr 代表为长整形.代表指针运算
在消息循环中先开始消息循环,通过translatemessage 转换的消息类型
Dispatchmessage 分派消息交由消息处理函数(自定义)处理 一般不关心其返回值
最后在消息互利函数中CALLBACK函数(表示该函数由程序员设计,但是却由windows系统调用的函数,统称为回调函数。 调用方式为stdcall调用 _stdcall 为pascal调用 而 _cdecl 标准调用约定 和 c语言调用约定 (vc 缺省的调用约定 在.net中可以在项目-属性-高级中修改)区别在参数传递顺序和堆栈的清楚.
通过switch语句完成循环 注意几个函数 destroywindow 和postquitmessage Destroywindow 销毁窗口 后发消息WM_destroy消息,postqquitmessage 发送WM_QUIT 使得消息队列GetMessage 取值为假 WInmain 退出
defwindowproc 为默认消息处理函数
这就是一个简单的windows程序流程
下面有几个问题
我们在应用程序编写过程中需要填充该消息结构体吗?
关于在WinMain函数中的hpreinstance的作用 (在win32中始终为空)
命令行参数的传递在孙老师的讲义中是通过项目设置设置的那么我们在命令行中可以怎么用呢?
关于CALLback 函数可以参考一下 http://topic.youkuaiyun.com/t/20000311/23/4358.html 和http://www.coolsir.org/boxcounter/index.php?id=45 有详细解释
674

被折叠的 条评论
为什么被折叠?



