2011-06-16 82 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