界面上有个刷新按钮,点击后没什么反应,不像windows桌面一样,所有图标会闪一下,所以就想了加一个鼠标等待效果

实现方法如下:
响应WM_SETCURSOR事件:
BEGIN_MESSAGE_MAP(CTabPage, CDialog)
//{{AFX_MSG_MAP(CDialogEx)
//}}AFX_MSG_MAP
ON_WM_SETCURSOR()
END_MESSAGE_MAP().h文件中添加
public: DWORDm_dwClickTime; afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
.cpp文件
BOOL CTabPage::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (GetTickCount() - m_dwClickTime < 1000)
{
Sleep(200); //保持形状200毫秒
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}在需要改变鼠标的地方使用SetCursor设置鼠标形状
void CTabPage::SetWaitCursor()
{
m_dwClickTime = GetTickCount();
HCURSOR hCur = ::LoadCursor( NULL,IDC_WAIT);
::SetCursor(hCur);
}其实直接使用SetCursor是可以成功设置鼠标形状的,但是鼠标移动,新形状会消失。我尝试了下,使用鼠标点击基本看不到鼠标的变化,使用回车来点击按钮可以看到鼠标变化,鼠标一动就消失。
下面这种方法可以长期保持鼠标的形状:
SetClassLong(GetSafeHwnd(), GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_WAIT));
但是鼠标设置后不会自动还原,需要手动再设置成 IDC_ARROW 样式,另外我发现设置成功之后,当鼠标仍在按钮上时,形状是没有变化的,移到空白的地方才会变。
由于我的需求比较简单,只要鼠标闪下就可以,所以还是用上面的方法比较简单。
OnSetCursor里也可以直接返回true来保护鼠标状态,但鼠标如果不动不会自动还原。
附上鼠标形状参数:
IDC_APPSTARTING 标准的箭头和小沙漏
IDC_ARROW 标准的箭头
IDC_CROSS 十字光标
IDC_HAND Windows 98/Me, Windows 2000/XP: Hand
IDC_HELP 标准的箭头和问号
IDC_IBEAM 工字光标
IDC_ICON Obsolete for applications marked version 4.0 or later.
IDC_NO 禁止圈
IDC_SIZE Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL.
IDC_SIZEALL 四向箭头指向东、西、南、北
IDC_SIZENESW 双箭头指向东北和西南
IDC_SIZENS 双箭头指向南北
IDC_SIZENWSE 双箭头指向西北和东南
IDC_SIZEWE 双箭头指向东西
IDC_UPARROW 垂直箭头
IDC_WAIT 沙漏,Windows7系统下会显示为选择的圆圈表示等待


鄂公网安备 42018502001427号
发表评论