CWaitCursor简介与使用

来源:互联网 发布:图书出版软件 编辑:程序博客网 时间:2024/04/28 17:51
CWaitCursor没有基类。
CWaitCursor类提供了显示等待光标的直接方式,当你进行冗长的操作时,它通常显示出一个沙漏。好的Windows编程方式要求你在执行耗用大量时间的操作时显示等待光标。
如果要显示等待光标,仅需在进入执行冗长操作的代码之前定义一个CWaitCursor变量。整个对象的构造函数自动地显示等待光标。
当对象超出作用域时(在定义了CWaitCursor对象的代码块的末尾),它的析构函数将光标设为原来的光标。换句话说,该对象自动执行必要的清除工作。
注意:
由于它们的构造函数和析构函数的工作方式,CWaitCursor对象总是被定义为局部变量__它们从不被定义为全局变量,也不用new来分配。如果你执行了可能会使光标改变的操作,比如显示消息框或对话框,则应调用Restore成员函数以恢复光标。即使当前正在显示等待光标也可以调用Restore函数。
显示等待光标的另一种方式是使用CCmdTarget::BeginWaitCursor和CCmdTarget::EndWait Cursor的组合,可能还有CCmdTarget::RestoreWaitCursor。但是,CWaitCursor更易于使用,因为你在完成了冗长的操作之后不必将光标恢复到原来的光标。
注意:
MFC使用虚拟函数CWinApp::DoWaitCursor来设置和恢复光标。你可以重载这个函数以提供自定义的表现方式。
#include <afxwin.h>
请参阅:
CCmdTarget::BeginWaitCursor, CCmdTarget::EndWaitCursor, 
CCmdTarget::RestoreWaitCursor, CWinApp::DoWaitCursor
CWaitCursor类成员
构造/析构 CWaitCursor 构造一个CWaitCursor对象并显示等待光标  
操作 Restore 在光标被改变后恢复等待光标 .#SinaEditor_Temp_FontName
 
 
示例:
// 下面的例子演示了在冗长操作的过程中显示等待光标的一般方式。
void LengthyFunction( )
{
  //你有可能在显示等待光标之前显示一个对话框
  CWaitCursor wait; // 显示等待光标
  // 执行一些冗长的操作
} // 析构函数自动清除等待光标
// 这个例子演示了在代码块内部使用CWaitCursor对象,
// 因此只有当程序执行冗长的操作时才会显示等待光标。
void ConditionalFunction( )
{
  if ( SomeCondition )
  {
    CWaitCursor wait; // 仅在本代码块内部才显示等待光标。
    //执行一些冗长的操作。
  } // 在这个地方,析构函数清除等待光标。
  else
  {
    //没有等待光标__只有快速操作
  }
}
 
CWaitCursor::Restore
void Restore( );
说明:
如果想要恢复等待光标,则应在完成操作后调用这个函数,比如显示消息框或对话框,这可能会使等待光标变为其它光标。
如果当前正显示等待光标,也可以调用Restore函数。
如果你需要在没有定义CWaitCursor对象的函数内部恢复等待光标,则应调用CCmdTarget::RestoreWaitCursor。
示例:
// 这个例子演示了改变等待光标的操作
// 在完成改变光标的操作以后,你应当调用
// CWaitCursor::Restore以恢复光标。
void AnotherLengthyFunction( )
{
  CWaitCursor wait; // 显示等待光标
  //执行一些冗长操作
  //对话框通常会将光标变为标准的箭头光标。
  CSomeDialog dlg;
  dlg.DoModal( );
  //为了将光标变回等待光标,必须调用Restore函数。
  wait.Restore( );
  // 执行一些冗长操作
  // 析构函数自动清除等待光标
}
// 如果等待光标被创建它的函数所调用的函数改变,
// 你可以调用CCmdTarget::RestoreWaitCursor来恢复等待光标。
void CalledFunction()
{
  CSomeDialog dlg;
  dlg.DoModal();
  // 由于CWinApp是从CCmdTarget继承的,我们可以
  // 使用应用程序对象的指针来调用CCmdTarget::RestoreWaitCursor。
  AfxGetApp()->RestoreWaitCursor( );
  // 还有其它冗长操作...
}
0 0