MFC学习笔记基础

来源:互联网 发布:现在下片用什么软件 编辑:程序博客网 时间:2024/05/22 14:15

1.

MFC中控件的group属性可以将相同的属性归为一组,直到遇到下一个也标记有group属性的控件。在vs2008中,当将一组控件用一个变量来关联(DDX)时,在构造函数里面是将其默认为选择了第一个空间。起码将radiobutton设置为一组是这么做的。

2.

函数名前有ON一般来说是在消息处理之前会调用。跟DXUT挺像,但感觉更难用,更不方便。

3.

DoDataExchange是需要显示调用的,如果运行过程中发生了某些改变,例如要在没按OK键之前从控件中得到值,预先调用updatedata();参数为缺省值true,为得到值,为false则为输入值到控件。invalidate方法可以让窗口无效,引起窗口的重绘,从而可以再Onpaint中添加代码。

4.

要修改窗口的外观,在Cmainframe的precreatewindow方法中修改createstruct结构可以达到目的。在单文档修改文档名时,由于单文档默认有FWS_ADDTOTITLE 所以预先要先改变cs.style 将此属性去掉。此上为创建窗口之前进行改变,若要在创建窗口之后改变则setclasslong,在oncreat内调用。同理有getclasslong,precreatewindow中可以自定义wndclass来自定义窗口注册等操作最后将其与cs关联起来,即将cs的lpszclass成员赋值为wndclass的lpszclassname显然相当麻烦,MFC提供有AfxRegisterWndClass返回值为窗口类,可以进行一些比较简单的修改。注意其中的hInstance要用全局函数AfxGetInstanceHandle。要改变视类,当然要在view类中去改变。

5.

图标的导入,用loadicon(),如果是导入自己的图标,第一个参数要获得句柄,有三种方法:一:AfxGetInstanceHandle二:考虑到有个APP类表明了我们的应用程序,且该类中有个全局变量theApp,可以再frame中extern这个变量从而得到他的m_hInstance参数,该参数表明了目前的应用程序,三:AfxGetApp得到目前的App然后同二,第二个参数要获得图标的指针,用宏MAKEINTRESOURCE参数即为图标的ID,这个宏可以将ID转换为指针。

6.

settemer设置好后通过消息wm_timer来添加处理。注意局部变量和static。

7.

toolbar分四个步骤,msdn里有详细说明,如果要实现“工具栏”选项的功能,让工具栏能够消失则需要调用RecalcLayout将其他控制栏的位置进行重新调整,之后最好调用DockControlBar再停靠一次,实现在浮现状态使工具栏消失。但是在显示的时候会在最上面。待解决。。。

8.

添加updateconmmadui时间可以添加复选项。

9.

自定义消息,

第一步:在#define时用到宏WM_USER,小于等于宏的是系统保留的,大于的可以自己定义,

第二步:定义该消息的消息处理函数,

第三步:添加消息映射。深入理解消息系统。

可以再ONCREAT之里面sendmessage这个消息,从而即使处理这个消息。而postmessage是把消息放到消息队列中。

重绘会发送wm_paint消息。第一次显示就会调用。

10.

Cstring得到他所占的大小,用以下代码可以实现

CClientDC dc(this);

CSize sz=dc.GetTextExtent(str);

sz即为大小

11.

要判断一个窗口是否创建,可以巧妙的直接判断他的句柄。

12.

在状态栏中显示数值,例如鼠标的位置有三个方法;

一:在视类中getparent之后可以强制转换为mainframe之后得到m_wndStatusBar再调用setwindowtext但是要吧m_wndStatusBar设置为公有;

二:setmessagetext cframewnd的成员函数

三:cmainframe的getmessagebar

四:Cwnd的GetDescendantWindow它可以找到所有的子孙窗口,状态栏的create中有ID号,所有的都有ID号 看下定义就可以。

13.

getwindowrect得到的区域是一屏幕为原点的,如果是对话框则需要转换。调用screentoclient。

14.

wm_ctlcolor消息可以用来设置控件的画刷,renturn的即为画刷,此画刷决定对话框背景和控件背景。OnCtlColor会调用多次,而且每次都分配给该控件或背景一个PDC。所以函数里面的PDC是自己的DC。

 

 

15.

窗口绘制过程。先擦除窗口背景,会发送WM_ERASEBKAND消息,所以可以添加此消息响应,在里面进行位图显示。之后在重绘。在消息里面要出掉基类方法的调用

当然,也可以再重绘消息里面添加,ondraw函数。但是会有比较大的闪烁

16.

如果不用new,则分配在栈中,函数完了之后,内存回收。而new是在delete之后才回收,分配在堆中。虽然在函数中指针的存储单元被回收,但是对象的内存还在。

17.

窗口重绘小节:

重绘发送WM_PAINT消息,则调用消息处理函数OnPaint。

在Cview类中OnPaint中有cpaintdc对象,这个对象有beginpaint函数在构造函数中,有endpaint函数在析构函数中,所以不需要额外调用函数对。然后调用OnPrepareDC函数,

再调用OnDraw函数。在调用OnDraw函数之前要掉用OnInitialUpdate。是在一个视图创建之后第一个调用的函数,可以进行一些初始化的操作

18.

逻辑坐标点到设备坐标点转换。OnPrepareDC随时调整视口的原点。

19.

创建兼容DC

20。

要读取软件配置文件,肯定要在软件初始化的时候读入,所以要在APP类中的InitInstance函数中写,在SetRegistryKey(_T("应用程序向导生成的本地应用程序"));调用WriteProfileString

SetRegistryKey是设置注册表项。

原创粉丝点击