2011-06-16 69 views
2

的持续时间在一个MFC应用程序,我想显示等待光标(沙漏),只要一个线程在运行,但是从静态ThreadProc的构件内部调用更改光标线程

SetCursor(LoadCursor(NULL, IDC_WAIT)); 

功能没有任何作用。任何帮助?

感谢,RSEL

编辑

想通了。这是做这件事:在构造函数中

呼叫使用LoadCursor:

m_cursor = LoadCursor(NULL, IDC_WAIT); 

呼叫的setCursor AfxBeginThread前右:

SetCursor(m_cursor); 
AfxBeginThread(...); 

覆盖OnSetCursor防止光标更改回过早:

CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{ 
    if (m_thread_is_running) 
    { 
     return false; 
    } 
    else 
    { 
     return CView::OnSetCursor(pWnd, nHitTest, message); 
    } 
} 
+0

效果在这里解释。 http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspx – 2011-11-10 21:00:27

+0

根据我的'OnSetCursor',它返回一个'BOOL'。另外,看起来我们应该返回'TRUE'来停止处理。 – 2017-09-13 20:27:11

回答

0

当你开始启动时调用它作为主线程然后在线程退出并禁用该消息上的小时玻璃时,向主线程发送PostMessage自定义消息。

+1

我已经尝试过了,即在AfxBeginThread之前调用SetCursor。在AfxBeginThread返回后,光标立即切换回默认值。 – chessweb 2011-06-16 09:07:32

1

我还没有检查,但我认为每次鼠标移动时光标都会更新。因此,每次获取WM_SETCURSOR消息时要么调用SetCursor(),要么更改默认光标。请注意,每次设置光标时都不应调用LoadCursor()。

默认光标在窗口的WNDCLASS结构中设置。

有关更多详细信息,请参阅WM_SETCURSOR