鼠标形状动态改变的问题
在MSFlexGrid控件中用到comboBox控件,需要当鼠标移动到ComboBox窗体上时鼠标形状变成手的模样,并画出一个矩形框,在CSDN上搜索了一天,并试了N种方法都没有解决。
最后想通过用SetClassLong()的方法来实现当鼠标移至不同的窗体时改变形状,可是发现其并不好用。
以下是我试用的几种方法:
#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649) // from winuser.h
#endif
void CMainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
this->OnSetCursor(this, HTCLIENT, WM_SETCURSOR);
CDialog::OnMouseMove(nFlags, point);
}
1. 用SetClassLong方法
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
POINT point;
GetCursorPos(&point);
CRect rect;
GetClientRect(rect);
ScreenToClient(&point);
if(!rect.PtInRect(point))
{
return FALSE;
}
HWND hWnd = (HWND) GetDlgItem(IDC_COMBO1);
SetClassLong(hWnd, GCL_HCURSOR, (LONG) AfxGetApp()->LoadCursor(IDC_HAND));
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
2.setCursor的方法
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
}
3.
#ifndef OCR_HAND
#define OCR_HAND 32649 // from winuser.h
#endif
void CMainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
HCURSOR hCur = AfxGetApp()->LoadCursor(IDC_HAND);
SetSystemCursor(CopyCursor(hCur), OCR_HAND);
DestroyCursor(hCur);
}
我不知道问题出在哪儿了都,希望各位能帮个忙,谢谢!
最后想通过用SetClassLong()的方法来实现当鼠标移至不同的窗体时改变形状,可是发现其并不好用。
以下是我试用的几种方法:
#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649) // from winuser.h
#endif
void CMainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
this->OnSetCursor(this, HTCLIENT, WM_SETCURSOR);
CDialog::OnMouseMove(nFlags, point);
}
1. 用SetClassLong方法
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
POINT point;
GetCursorPos(&point);
CRect rect;
GetClientRect(rect);
ScreenToClient(&point);
if(!rect.PtInRect(point))
{
return FALSE;
}
HWND hWnd = (HWND) GetDlgItem(IDC_COMBO1);
SetClassLong(hWnd, GCL_HCURSOR, (LONG) AfxGetApp()->LoadCursor(IDC_HAND));
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
2.setCursor的方法
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
}
3.
#ifndef OCR_HAND
#define OCR_HAND 32649 // from winuser.h
#endif
void CMainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
HCURSOR hCur = AfxGetApp()->LoadCursor(IDC_HAND);
SetSystemCursor(CopyCursor(hCur), OCR_HAND);
DestroyCursor(hCur);
}
我不知道问题出在哪儿了都,希望各位能帮个忙,谢谢!
...全文
相关推荐
动态改变鼠标形状的例子
综上所述,动态改变鼠标形状是一个涉及操作系统API、事件处理、资源管理和图形绘制等多个方面的问题。在游戏开发中,这种技术可以极大地提升用户体验,增加游戏的沉浸感。
QT 鼠标形状设置
QT提供了十分便捷的设置鼠标形状的方法,在QT界面的根类QWidget中有QCursor cursor(); void setCursor(QCursor &); void unsetCursor()三个方法,因而对于一切直接或间接继承自QWidget的控件都可以设置鼠标进入控件范围的鼠标形状。 其次,就QCursor类而言,QT提供了两种类型的鼠标形状:其一是内置鼠标形状(如下)【例如se
Cursordemo鼠标指针形状
"demo"这个文件中,可能包含了一个或多个HTML页面和JavaScript脚本,通过修改`cursor`属性或者使用JavaScript的`document.body.style.cursor`来动态改变指针形状
VC 鼠标形状控制程序代码
在VC++编程环境中,开发一个鼠标形状控制程序可以极大地增强用户界面的交互体验。这个程序的核心功能在于根据鼠标在屏幕上的不同位置动态改变鼠标指针的形状,从而提供更为直观的反馈信息。
鼠标光标由简单的箭头改变成你喜爱的图案
因为自定义光标也需要计算机资源来渲染,所以过于动态或高分辨率的光标可能会使系统运行稍显缓慢。6. **版权问题**:使用他人设计的光标时,应注意版权问题。


