孙鑫C++第一堂课要点

1、HWND 为窗口的句柄(可以认为是指针);message 通常以WM_ 为开头定义的宏; WPARAM和LPARAM都是消息的附加参数;

    #typedef   UINT   WPARAM;

 #typedef    UINT    LPARAM;

2、DWORD  表示一个32位的整数,

3、HINSTANCE 实例的标识(句柄),在MFC中运行程序中,弹出一个对话框,这就是一个实例;HICON为图标的句柄;HCURSOR为光标的句柄;IDC_、IDM_、IDI_等为开头ID,其中ID为identifier;HRBRUSH为画刷句柄;HMENU为菜单的句柄;HDC表示设备描述表或者设备上下文(Device Context)2014-10-02

4、创建一个完整的窗口需要经过下面四个操作步奏:设计一个窗口类;注册窗口类(向操作系统注册,函数RegisterClass());创建窗口(CreateWindow());显示(ShowWindow())及更新(UpdateWindow(),将窗口刷新)窗口。

5、如果我们希望在某一变量原有的几个特征上去掉其中一个特征,用取反(~)之后再进行与&)运算,就能够实现,如在刚才的style=CS_VERDRAW|CS_HREDRAW|CS_NOCLOSE的基础上去掉CS_NOCLOSE特征,可以用style&~CS_NOCLOSE实现。

6、回调函数:当应用程序收到给某一窗口的消息时(还记得前面讲过的消息通常与窗口相关的吗?),就应该调用某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是,回调函数本身的代码必须由应用程序自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过lpfnWndProc成员指定的。 

7、强制类型错误转化在编译的时候不会报错,但是在运行得时候会发生错误。

8、在创建窗口的时候要基于已经设计的参数,否则将导致窗口创建失败。

9、消息循环的机制:

           MSG msg;

    while(GetMessage(&msg,NULL,0,0))   //GetMessage将消息队列中取出一条消息

    {

      TranslateMessage(&msg);    //如果键盘按下某个键,它将系统发送keydown和keyup的两个消息转化为WM_CHAR消息,将转化后的消息投递到消息队列中,这个转化过程                     中不会影响原来的消息,只会产生新的消息。

      DispatchMessage(&msg);    //将上面的新的消息传回操作系统,操作系统将调用设计窗口时候创建的回调函数

    }

10、在程序中我们获取一个DC后(GetDC()),用完后,要记得释放该DC(ReleaseDC()),这是因为GetDC是有系统创建,占据一定的内存,如果不删掉它,会造成内存泄露。

11、当窗口重绘的时候,就会产生WM_PAINT消息;窗口从无到有过程,就会产生WM_PAINT的消息;BeginPaint()和EndPaint()只能够放在响应WM_PAINT消息过程中使用;

12、在if做判断中,通常将常量放在等号之前;

13、通常在判断程序是否要退出的时候,要在WM_CLOSE消息响应中做,而不要在WM_DESTROY中做,这是因为WM_DESTROY中,窗口已经销毁,但是程序还没有退出。

14、

posted @ 2014-10-02 22:30  龙泽一狼  阅读(171)  评论(0编辑  收藏  举报