CCmdTarget::BeginWaitCursor
void BeginWaitCursor( );
说明:
本函数用于显示沙漏标(通常在命令执行时间较长时采用)。框架调用本函数显示沙漏标,告诉用户系统忙,例如在加载一个CDocument对象或把它保存到文件时。
在不是处理单个消息时,BeginWaitCursor可能不象其它函数那样有效,例如OnSetCursor的处理也能改变光标形状。调用函数EndWaitCursor可以恢复此前的光标。
示例:
//The following example illustrates the most common case
//of displaying the hourglass cursor during some lengthy
//processing of a command handler implemented in some
//CCmdTaget-derived class,such as a document or view.
void CMyView::OnSomeCommand( )
{
BeginWaitCursor( ); //display the hourglass cursor
//do some lengthy processing
EndWaitCursor( ); //remove the hourglass cursor
}
//The next example illustrates RestoreWaitCursor
void CMyView::OnSomeCommand( )
{
BeginWaitCursor( ); //display the hourglass cursor
//do some lengthy processing
// The dialog box will normally change the cursor to
// the standard arrow cursor,and leave the cursor in
// as the standard arrow cursor when the dialog box is
//closed.
CMyDialog dlg;
dlg.DoModal( );
// It is necessary to call RestoreWaitCursor here in order
// to change the cursor back to the hourglass cursor.
RestoreWaitCursor( );
// do some more lengthy processing
EndWaitCursor( ); //remove the hourglass cursor
}
// In the above example,the dialog was clearly invoked between
// the pair of calls to BeginWaitCursor and EndWaitCursor.
// Sometimes it may not be clear whether the dialog is invoked
// in between a pair of calls to BeginWaitCursor and EndWaitCursor.
// It is permissable to call RestoreWaitCursor,even if
// BeginWaitCursor was not previously called.This case is
// illustrated below,where CMyView::AnotherFunction does not
// need to know whether it was called in the context of an
// hourglass cursor.
void CMyView::AnotherFunction( )
{
// some processing...
MyDialog dlg;
dlg.DoModal( );
RestoreWaitCursor( );
//some more processing
}
// If the dialog is invoked from a member function of
// some non-CCmdTarget,the you call CWinApp::DoWaitCursor
// with a 0 parameter value to restore the hourglass cursor.
void CMyObject::AnotherFunction( )
{
CMyDialog dlg;
dlg.DoModal( );
AfxGetApp( )->DoWaitCursor(0); //same as CCmdTarget::RestoreWaitCursor
}
请参阅:
CWaitCursor, CCmdTarget::EndWaitCursor, CCmdTarget::RestoreWaitCursor, CWinApp::DoWaitCursor