// 步骤:
// 1、往对话框上添加一个按钮,ID 设置为 IDC_BTN_TEST
// 2、向 CTestCursorDlg 类中添加成员变量 BOOL m_bBusy,并在 CTestCursorDlg 的构造函数中初始化为 FALSE
// 3、写现程函数
// 4、为 IDC_BTN_TEST 按钮添加点击处理函数
// 5、重载 WindowProc() 函数
// 6、为 WM_SETCURSOR 消息添加处理函数
// 注意:
// 以下代码最好在 Debug 下运行,否则 TRACE 语句不执行会大大缩短线程执行时间,有可能导致不能观察到鼠标光标的变化
DWORD WINAPI AddProc(PVOID pvParam)
{
int j=0;
for(int i=0; i<50000; i++)
{
j += i;
TRACE(TEXT("%d\n"), j);
}
PostMessage((HWND)pvParam, WM_APP + 1, 0, 0);
return j;
}
void CTestCursorDlg::OnBtnTest()
{
m_bBusy = TRUE;
BeginWaitCursor();
HANDLE hThread = CreateThread(NULL, 0, AddProc, (PVOID)(HWND)*this, 0, NULL);
CloseHandle(hThread);
}
LRESULT CTestCursorDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == (WM_APP + 1))
{
m_bBusy = FALSE;
EndWaitCursor();
}
return CDialog::WindowProc(message, wParam, lParam);
}
BOOL CTestCursorDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(m_bBusy)
return TRUE;
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}