回顾: 消息机制
CView 类的OnDraw()函数可以截获视窗改变大小或者位置时系统发出的OnPaint()这个消息,以此来重画窗口。
本节:
一、分形论
对没有特征长度但具有自相似性的图形和结构的总称。利用分形论使用c语言算法可以很方便的在应用程序里画出漂亮的图形来。
二、其他功能
1、拖放功能
在应用程序初始化函数(App->InitInstance->最后return前)里加如代码:
m_pMainWnd->DragAcceptFiles();//接收拖放文件
2、Shell注册
Shell注册过的应用程序可以双击鼠标打开,即操作系统默认打开特定文件的应用程序关联。步骤:
——1、在应用程序初始化函数(App->InitInstance->最后return前)里加如代码:
EnableShellOpen();//修改注册表
RegisterShellFileType(TRUE);
——2、指定应用程序扩展名
————方法1:资源视图—》String Table—》双击打开IDR_XXTYPE串表
—————— 串表7个参数包括:
—————— WindowTitle //标题栏中的应用程序名
—————— DocName //默认程序文件名的固定部分
—————— FileNewName//多文档情况时文档类型的名字
—————— FilerName //文档类型和通配符过滤器描述
—————— FleterExt //文档文件的扩展名
—————— RegFileTypeld//注册表中登记的文档类型
—————— RegFileTyprName //注册表中登记的文档类型的名字
—————— 修改一个扩展名 完成。
————方法2:使用MFC向导建立工程时,最近打开文档数后面的高级选项——中进行串表参数设置 完成。
3、消息与命令 (截获消息,封装消息,发送消息)
消息内容包括:目标窗口,消息类型,参数1,参数2
消息种类:(1)标准Windows消息:WM_XXXX
由Windows给其发送消息的那个窗口处理
(2)控件消息
(3)命令消息:来自用户界面对象的通知消息
命令被发送给标准命令目标链,每个命令对象都将检查自
己的消息映射看能否处理相应消息
截获消息:类视图右击要用来截获消息的类,为其添加消息句柄,在生成的函
数里处编辑消息处理代码。
删除消息:在类视图里找到消息函数,右击—>delete 删除,这样能完整地删除
目标;在函数向导里删除时只能删除.h中的代码,还需要手工
从.cpp文件中删除实现函数功能的代码(注:删除时由于VC的漏
洞,类视图中的整个类都不再显示,这不影响应用程序本身,
JUST A BUG)。
标准Window消息 ---------------------------------------------------------------------------------------------
命令消息:
命令消息许多窗口都可以接收。
View类最先收到消息,然后是文档类,子边框窗口类,App应用程序
窗口类,MainFrame主边框窗口类。
----------------------------------------------------------------------------------------
详细讲解部分消息:
X、窗口消息:
WM_PAINT消息:只要窗口发生变化操作系统就会向应用程序发送
WM_PAINT给CXxxView的消息循环,由CXxxView的
CView::OnPaint()选择截获该消息,OnPaint函数调用
CXxxView::OnDraw函数重画窗口
1、鼠标消息:当用户对鼠标进行操作时系统产生鼠标消息并发送给应用程序
WM_LBUTTONDOWN
WM_RBUTTONDOWN
WM_MOUSEMOVE
其他补充细节:
1)根据变量的使用范围,可在CXxxView类的定义.h文件中添加变量
定义,最好将变量定义代码添加在类定义的最后,以免影响到其
他成员变量和成员函数的公有、私有型。 同时将变量声明为私有
private: int m_nNum;
//根据提高程序可读性的变量命名规则(匈牙利命名法),m表示是
变量,n表示是整数类型,Num是变量名的区分部分。
2)变量定义后要养成初始化的习惯,如果是类中定义的变量,则在
类的构造函数里进行变量初始化
3)类成员变量的添加也可以右击目标类—>Add Member Variable,添
加完成后同样要在这个类的构造函数里进行变量初始化。
4)注:某个构造函数的构造函数就在类视图中这个类的函数中,与
类同名
5)Invalidate()函数可使窗口失效,即发送WM_PAINT消息使窗口立
刻重画。example: InvalidateRect(CRect(50,50,200,200),true);//使
窗口一部分失效重画,用于程序优化