我在一个dialog里面放了一张位图,
该位图控件我是继承CStatic而来的,class BmpIcon : public CStatic
我想让鼠标移到该位图上时改变形状,不知该怎么办.我觉得该位图控件也是一个窗口,都是由cwnd继承来的,
所以我试着在precreatewindow()里面加上下面这条语句,
cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, DC_CROSS));
结果没有什么效果.
该位图控件我是继承CStatic而来的,class BmpIcon : public CStatic
我想让鼠标移到该位图上时改变形状,不知该怎么办.我觉得该位图控件也是一个窗口,都是由cwnd继承来的,
所以我试着在precreatewindow()里面加上下面这条语句,
cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, DC_CROSS));
结果没有什么效果.
HCURSOR hCursor // handle to cursor
);
看msdn
在父窗口的WM_MOUSEMOVE和WM_PAINT里向子窗口发送WM_NCHITTEST消息
cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS,::LoadCursor(NULL, DC_CROSS));是不能改变鼠标形状的
应该是cs.hCursor= ::LoadCursor(NULL, DC_CROSS) 吧
typedef struct tagCREATESTRUCTW {
LPVOID lpCreateParams;
HANDLE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCSTR lpszName;
LPCSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCTW, *PCREATESTRUCTW, *LPCREATESTRUCTW;to luopeng(天之翼):
我在onsetcursor()里面用SetCursor(LoadCursor(NULL, IDC_CROSS));
也没有效果
{
// TODO: Add your message handler code here and/or call default
POINT point;
GetCursorPos(&point); //取得当前鼠标位置
//假设资源中这个图标的ID是IDC_IMAGE
CWnd *pCtrl = this->GetDlgItem(IDC_IMAGE);
RECT rect;
pCtrl->GetWindowRect(&rect); //取得控件矩形坐标 if( point.x >= rect.left && point.x <= rect.right &&
point.y >= rect.top && point.y <= rect.bottom)
{
//m_hCurNoDrop是在构造函数中用LoadCursor装入
SetCursor(m_hCurNoDrop);
return true;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
HCURSOR hCursor // handle to cursor
);
只要在你想的地方调用该函数就可以完成你的要求
不过我还想问一下,改变鼠标是不是一定要在父窗口里完成.
能不能让控件自己来设置自己的鼠标.
SetCursor(LoadCursor(NULL, IDC_CROSS));
放在父窗口里执行就没有问题,放在我的BmpIcon类(见第一篇)里就没有效果.
设置鼠标。