MFC文件处理机制
1.永久性对象与序列化
永久性对象:内存中的对象以文件的形式存入存储介质,而从介质中读入时,该对象又能恢复为原来的状态。
序列化:能使对象成为永久性对象的机制。
2.Serialize函数
Serialize函数是CObject类提供的虚函数,凡是希望具有序列化能力的类,都必须以CObject类或其派生类为基类。
由于应用程序的数据一般由文档对象来管理的,每当用户新建,打开或保存文档时,程序就会自动调用文档类对象的Serialize函数。
3.对象的序列化
对象的序列化的操作过程封装成了一个类CArchive,实际上把类信息表跟类对象打包成文件的工作就是由CArchive类的对象在Serialize函数中完成的。
Serialize函数原型:virtual void Serialize(CArchive &ar);
当需要存取或读取一个对象时,必须在Serialize函数中进行。例如某类A为永久化类,具体编码过程如下:
Class A::CObject
{
DECLARE_SERIAL(A); //声明了序列化
private:
int m_X,m_Y;
...
public:
Serialize(CArchive&ar); //重写序列化虚函数
};
IMPLEMENT_SERIAL(A,CObject,1); //实现序列化
重写的序列化函数Serialize的实现:
A::Serialize(CArchive&Aar)
{
if(ar.IsStoring()) //存储数据
{
ar<<m_X;
ar<<m_Y;
}
else //读取数据
{
ar>>m_X;
ar>>m_Y:
}
}
菜单
1.菜单资源的描述文件:文件中的BEGIN和END是菜单的分隔苻,在BEGIN前面书写的是菜单的标题。菜单可嵌套定义。
2.菜单的定义: 标志符 MENU 载入特性选项
菜单的可选加载特性:
DISCARDABLE 当应用程序不再需要时,应用程序可丢弃该菜单
FIXEDP 把菜单保存在内存的固定位置
LOADONCALL 只在应用程序需要时才加载菜单
MOVEABLE 菜单在内存中可移动
PRELOAD 立即加载菜单
鼠标和键盘
1.客户区鼠标消息
在文档类添加数据成员,并初始化。
添加消息响应函数的方法:在工程管理窗口的Class Views卡中,右击视图类,选择Add Windows Message Handler在选项中选择要添加的消息函数。
在消息映射函数中添加代码。
2.非客户区鼠标消息
WM_NCLBUTTONDBCLK 双击鼠标左键
WM_NCLBUTTONDOWN 按下鼠标左键
WM_NCLBUTTONUP 释放鼠标左键
WM_NCMOUSEMOVE 在客户区移动鼠标
WM_NCRBUTTONDBCLK 双击鼠标右键
WM_NCRBUTTONDOWN 按下鼠标右键
WM_NCRBUTTONUP 释放鼠标右键
Windows 并不希望用户使用非客户区鼠标消息,所以Visual C++没有提供使用非客户区鼠标消息的编程工具。如果非要使用非客户区鼠标消息的话,则程序员必须用手工方法在程序中添加非客户区鼠标消息映射宏和对应的消息响应函数。
3.鼠标消息的捕获
为了当鼠标移出应用程序窗口外时,应用程序也能接收到鼠标消息,而使用捕获鼠标消息的函数:CWnd* SetCapture();
捕获鼠标消息并完成所做的工作后,应用程序应及时释放鼠标。以使鼠标可以按系统预定的正常方式发送。否则将使鼠标一些正常的作用失效。(例如,当鼠标单击窗口的关闭按钮时,程序却不能关闭。)释放鼠标的函数:BOOL ReleaseCapture();
4.处理键盘消息
扫描码:按下某个键时,键盘的接口产生的与该键对应的编码。扫描码与设备有关。
虚拟码:为方便程序设计,Windows 对每个按键定义的与设备无关的编码。
键盘上的部分虚拟码:
VK_ADD '+'键
VK_BACK BackSpace
VK_CONTROL Ctrl
VK_F1~VK_F12 F1~F12
一般按键消息:
WM_CHAR 当敲击键盘上的字符键时,产生该消息
WM_KEYDOWN 任意键被按下时都产生该消息,如果被按下的是字符键,在产生WM_KEYDOWN消息的同时还产生字符消息
WM_KEYUP 任意键被释放时都产生该消息
3个消息响应函数:
void OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);
void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
void OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags);
系统按键消息:用户按下ALT键的同时,右按下其它相关输入键时产生的消息。
4.应用程序窗口的焦点
应用程序的窗口获得输入焦点时,发出WM_SETFOCUS消息
窗口失去输入焦点时,发出WM_KILLFOCUS消息
资源和资源文件
1.资源文件:描述资源的文件,是一个文本文件,名称一般与工程项目名称相同,扩展名为.rc
对于一般资源数据来说,只用资源脚本文件来描述即可。然而对于位图,图标这类复杂的图形数据,需另外的工具制作成单独的文件保存在应用程序的res文件夹中,而在资源脚本文件中只需说明它的位置。
2.资源头文件:对不同资源加以区别,必须为资源命名资源标识府,通常这些资源标识苻放在头文件Resource.h中。
命名资源标识苻的规则:
资源标识苻的前缀如下:
IDR_ 主菜单,工具栏加速键表和应用程序图标
IDD_ 对话框
IDC_ 控键和光标
IDS_ 字符串
IDP_ 消息框提示字符串
ID_ 菜单命令
应用程序界面
1.在函数PreCreateWindow中修改窗口的样式
2.可拆分为小窗口的SDI界面
3.拆分窗口的同步更新功能:UpdateAllViews
4.提高拆分窗口的更新效率的方法: InvalidateRect
5.创建带有滚动条的窗口
评论