CCmdTarget类
来源:互联网 发布:哪个环绕音乐软件 编辑:程序博客网 时间:2024/06/06 20:54
该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待状态,CCmdTarget类封装了3个成员函数完成该功能。封装COM的 IDispatch接口是它的另一项主要功能。IDispatch是COM的标准接口,不含指针操作的语言(如VB)以及描述性语言(如Web脚本语言和VBA)都通过该接口操作COM组件。CCmdTarget类以一种类似消息映射的机制提供IDispatch接口,所以使用MFC可以轻松地编写AUTOMATION客户程序和组件。关于消息映射机制的阐述,参见第9章。下面仅讨论该类的等待光标支持。
CCmdTarget类定义BeginWaitCursor()、EndWaitCursor()和RestoreWaitCursor()3个成员函数处理等待光标。BeginWaitCursor()将光标设置为沙漏形状,该函数有可能被程序框架调用,通知用户状态忙,例如当加载和存储文档时。EndWaitCursor()将光标恢复为沙漏之前的形状,一般与BeginWaitCursor()配合使用。
在实际编程中,在一个比较耗费机时的处理前应该主动调用BeginWaitCursor()设置光标,在处理结束时要调用EndWaitCursor()恢复光标。例如:
void CWaitCursorDoc::LoadFile(char * Filepath)
{
//显示沙漏光标
BeginWaitCursor();
//耗费机时的处理过程
TRACE("正在装入文件,请等待.../n");
......
//恢复为沙漏前的光标形状
EndWaitCursor();
}
如果在BeginWaitCursor()和EndWaitCursor()之间的处理中,弹出了模式对话框,光标会由沙漏变为标准形状(通常是标准箭头)。为处理这种情形,可以在对话框关闭后,调用成员RestoreWaitCursor()重新将光标设置回沙漏形状,直到处理结束后调用EndWait Cursor()。例如:
void CWaitCursorDoc::LoadFile(char * Filepath)
{
WIN32_FIND_DATA FindData;
//显示沙漏光标
BeginWaitCursor();
//耗费机时的处理过程
if(::FindFirstFile(Filepath,&FindData)==INVALID_HANDLE_VALUE)
{
TRACE("打开文件出错,请重新指定文件/n");
CFileDlg dlg;
dlg.DoModal();
//恢复光标的沙漏形状
RestoreWaitCursor();
}
TRACE("正在装入文件,请等待.../n");
......
//恢复沙漏前的光标形状
EndWaitCursor();
}
但如果弹出的是MessageBox()消息框,就不必调用RestoreWaitCursor(),光标会自动恢复为沙漏。
在非CCmdTarget派生类中,可以使用CWaitCursor类设置等待光标。该类的构造函数和析构函数相当于CCmdTarget::BeginWaitCursor()和CCmdTarget::EndWaitCursor(),成员函数Restore()相当于CCmdTarget:: RestoreWaitCursor()。-
文章出处:http://www.diybl.com/course/3_program/vc/vc_js/2008520/117199.html
- CCmdTarget类
- 类CCmdTarget
- CCmdTarget
- CCmdTarget
- CCmdTarget
- MFC架构之CCmdTarget类
- 向CCmdTarget的派生类添加一个接口的实现
- CDocument继承自CCmdTarget类,只能接收WM_COMMAND
- MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。
- CCmdTarget - MSDN6翻译交流
- 关于CCmdTarget及消息映射
- typedef void (CCmdTarget::*AFX_PMSG)(void)
- 消息处理机制:CCmdTarget 和 消息映射表
- 消息处理机制:CCmdTarget 和 消息映射表
- 消息处理机制:CCmdTarget 和 消息映射表
- VC----消息处理机制:CCmdTarget 和 消息映射表
- MFC CCmdTarget Class成员变量及成员函数
- static_cast” : 无法从“void (__thiscall CMainFrame::* )(NMTOOLBARA *,LRESULT *)”转换为“void (__thiscall CCmdTarget::* )(NMHDR *,LRESULT
- [J2ME]获得局部图像
- 几个常用的C标准库函数的实现
- Oracle NUMBER数据类型
- Linux 内核配置及编译简介
- 使用自定义的GIcon和GMarker碰到lat为空或不是对象的问题(转)
- CCmdTarget类
- linux用户审计
- LoadRunner监视的性能计数器
- WTL简介
- 试图运行项目时出错,无法启动调试。没有正确安装调试器。请运行安装程序安装或修复调试器 。
- File names.dat may be corrupt解决办法
- eclipse web app debug
- PHP 全角字符正则
- 把繁琐的事情简单化---我使用汇智在线心得体会