我在属性表中遇到了问题。我想在鼠标位置位于客户端区域时加载不同的光标,并在移出客户端区域时加载另一个光标。鼠标移出客户区(propertysheet)时如何更改鼠标光标图标类型?
在porpetysheet中,我添加了四个页面。在第一页中,当我点击下一步时,我将加载IDC_WAIT类型的光标并在鼠标移出客户区时加载IDC_ARROW。
在页面I类触发事件WM_MOUSEMOVE如下:
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if(TRUE == m_bIsNextBtnClicked)
::SetCursor(LoadCursor(NULL, IDC_WAIT));
else
::SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
}
此事件触发得到绝对没有任何问题与此有关。同样,我试着添加MESSAGE_HANDLER(WM_MOUSELEAVE, OnMouseLeave)
这个事件,假设当鼠标移出客户区域时触发这个事件,但是这个事件根本没有被触发。如果这不是mouseleave触发的鼠标事件,应该触发哪个事件我触发?现在
LRESULT OnMouseLeave(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
::SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
}
当我点击下一步按钮,我其实是调用一个正在某个时候返回功能。在此函数之前,我正在加载IDC_WAIT游标,即,
::SetCursor(LoadCursor(NULL, IDC_WAIT));
。
现在到我想要加载IDC_ARROW光标即非客户区移动鼠标光标时,
::SetCursor(LoadCursor(NULL, IDC_ARROW));
当到非客户区,我处理的板材用鼠标事件的移动派生类如下,
MESSAGE_HANDLER(WM_NCMOUSEMOVE, OnNCMouseMove)
LRESULT OnNCMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
::SetCursor(LoadCursor(NULL, IDC_ARROW));
return 0;
}
此事件不会被触发,除非执行下一个按钮事件中的函数。
我希望他们两个并行完成,即单击下一步按钮,现在将鼠标悬停在客户区上,忙图标应该出现,当鼠标移出客户区时,应该出现IDC_ARROW图标。
LRESULT OnWizardNext()
{
::SetCursor(LoadCursor(NULL, IDC_WAIT));
m_bIsNextBtnIsClicked = TRUE;
BOOL bRet = MyFun();
m_bIsNextBtnIsClicked = FALSE;
//Until this function is executed **WM_NCMOUSEMOVE**
//event is not getting triggered.But this event should get triggered and I
//should be able to see the change of cursor within and out of client area.
}
任何人都可以帮助我解决这个问题。