在线程的持续时间内更改游标

时间:2011-06-16 08:48:28

标签: winapi mfc

在MFC应用程序中,我想在线程正在运行时显示等待光标(小时玻璃),但是调用

SetCursor(LoadCursor(NULL, IDC_WAIT));

从静态ThreadProc成员函数内部没有任何影响。有什么帮助吗?

谢谢,RSel

修改

想出来。这是一种方法:

在构造函数中调用LoadCursor:

m_cursor = LoadCursor(NULL, IDC_WAIT);

在AfxBeginThread之前调用SetCursor:

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);
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

有关详细信息,请参阅WM_SETCURSOR

答案 1 :(得分:0)

当您启动线程时将其调用为主线程,然后在线程退出时将主要线程的PostMessage发送到主线程并禁用该消息上的沙漏。