【问题标题】:How to change the cursor before a long task?如何在长时间任务之前更改光标?
【发布时间】:2012-05-02 14:23:18
【问题描述】:

我想在一个长任务之前改变光标。我用setcursor改变了它,但光标没有改变。

这是我的代码:

    HCURSOR hWait  =  AfxGetApp()->LoadStandardCursor(IDC_WAIT) ;
    HCURSOR hDefault = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
    ::SetCursor(hWait);

    //a long procedure

    ::SetCursor(hDefault);

我做错了什么?

【问题讨论】:

标签: winapi mfc


【解决方案1】:

一个非常方便的方法是在长任务的开始(或之前)创建CWaitCursor 的实例。它设置游标,当它超出范围时,它会恢复它(在析构函数中):

{
    CWaitCursor wait;  

    // Long task

} // The cursor is restored here

【讨论】:

  • IMO,CWaitCursor 几乎没用。如果您有一个长时间运行的任务阻止您的窗口处理消息,那么您的窗口将变得无响应(并且可能停止绘制)。如果您正在处理消息,则可能会重置光标,而您应该处理 WM_SETCURSOR 消息。
  • @jamesdlin 我从来没有遇到过任何问题。而且,通过查看它的代码,我会说它与::SetCursor() 相同。其实CWaitCursor的构造函数调用CCmdTarget::BeginWaitCursor(),谁调用CWinApp::DoWaitCursor()谁调用::SetCursor()
  • WM_SETCURSORSetCursor 不同。如果您在等待时正在处理窗口消息,则您的窗口必须处理(而不是发送)WM_SETCURSOR 并调用 SetCursorblogs.msdn.com/b/oldnewthing/archive/2006/11/21/1115695.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多