您的位置:首页 > 大数据 > 人工智能

BeginWaitCursor()、EndWaitCursor()和RestoreWaitCursor()3个成员函数处理等待光标

2015-06-02 08:25 393 查看
转自:http://angelinafan.blog.163.com/blog/static/13617279820108913257703/

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()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: