[一分钟学会系列之六]一分钟学会自定义鼠标指针图标(附DEMO程序)
2011-09-11 12:00
274 查看
这次和大家分享在自己窗口内改变鼠标指针图标的方法。关键在于处理WM_SETCURSOR消息,先看一下这个消息的定义:
Syntax
Parameters
wParamHandle to the window that contains the cursor. lParamThe low-order word of lParam specifies the hit-test code.
The high-order word of lParam specifies the identifier of the mouse message.
Return Value
If an application processes this message, it should return TRUE to halt further processing or FALSE to continue.
这个消息的参数为我们提供了三个信息:当前鼠标所在窗口的句柄,当前鼠标所在区域类型(HTCLIENT,HTCAPTION等),触发了设置指针图标的鼠标消息(WM_MOUSEMOVE, WM_LBUTTONDOWN等)。有了这些信息,我们就可以在程序中按我们的需要灵活的控件鼠标指针的形状了。
附上一小段MFC中处理这个消息的函数:
在初始化函数中先加载指针图标资源,这里使用系统自带的一些图标,如果想用自定义图标,加载自己的.ico资源就可以了。
在MFC中使用OCR_HAND, OCR_NORMAL等宏时,需要在stdafx.h中添加 #define OEMRESOURCE 这一行,不然会报编译错误 undeclared identifier
m_hNormalCursor = ::LoadImage(NULL, MAKEINTRESOURCE(OCR_HAND), IMAGE_CURSOR, 32, 32, LR_SHARED);
m_hClickCursor = ::LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT), IMAGE_CURSOR, 32, 32, LR_SHARED);
BOOL CCursorDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// 如果鼠标在子控件内,不改变指针图标
if (pWnd->m_hWnd != m_hWnd)
{
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
// 如果鼠标不在客户区,不改变指针图标
if (nHitTest != HTCLIENT)
{
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
// 根据目前鼠标状态设置不同的指针图标
if (message == WM_LBUTTONDOWN)
{
::SetCursor((HCURSOR)m_hClickCursor);
}
else
{
::SetCursor((HCURSOR)m_hNormalCursor);
}
return TRUE;
}
完整示例:http://download.csdn.net/detail/HarbinZJU/3592437
WM_SETCURSOR Notification
The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.Syntax
WM_SETCURSOR WPARAM wParam LPARAM lParam;
Parameters
wParamHandle to the window that contains the cursor. lParamThe low-order word of lParam specifies the hit-test code.
The high-order word of lParam specifies the identifier of the mouse message.
Return Value
If an application processes this message, it should return TRUE to halt further processing or FALSE to continue.
这个消息的参数为我们提供了三个信息:当前鼠标所在窗口的句柄,当前鼠标所在区域类型(HTCLIENT,HTCAPTION等),触发了设置指针图标的鼠标消息(WM_MOUSEMOVE, WM_LBUTTONDOWN等)。有了这些信息,我们就可以在程序中按我们的需要灵活的控件鼠标指针的形状了。
附上一小段MFC中处理这个消息的函数:
在初始化函数中先加载指针图标资源,这里使用系统自带的一些图标,如果想用自定义图标,加载自己的.ico资源就可以了。
在MFC中使用OCR_HAND, OCR_NORMAL等宏时,需要在stdafx.h中添加 #define OEMRESOURCE 这一行,不然会报编译错误 undeclared identifier
m_hNormalCursor = ::LoadImage(NULL, MAKEINTRESOURCE(OCR_HAND), IMAGE_CURSOR, 32, 32, LR_SHARED);
m_hClickCursor = ::LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT), IMAGE_CURSOR, 32, 32, LR_SHARED);
BOOL CCursorDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// 如果鼠标在子控件内,不改变指针图标
if (pWnd->m_hWnd != m_hWnd)
{
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
// 如果鼠标不在客户区,不改变指针图标
if (nHitTest != HTCLIENT)
{
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
// 根据目前鼠标状态设置不同的指针图标
if (message == WM_LBUTTONDOWN)
{
::SetCursor((HCURSOR)m_hClickCursor);
}
else
{
::SetCursor((HCURSOR)m_hNormalCursor);
}
return TRUE;
}
完整示例:http://download.csdn.net/detail/HarbinZJU/3592437
相关文章推荐
- [一分钟学会系列之五]一分钟学会提取文件图标,保存为透明图片(附DEMO程序)
- css Cursor:url()自定义鼠标指针样式为图片
- 稳扎稳打Silverlight(31) - 2.0Tip/Trick之加载XAP, 加载XAML, 加载DLL, AppManifest.xaml文件说明, 自定义鼠标指针
- 一分钟学会编写XP风格界面的程序!
- ife系列之自定义鼠标右键菜单
- Unity之修改场景鼠标指针的默认图标
- 小程序开发时能否使用我们自定义的字体图标
- ionic3开发系列——如何导入自定义资源图标库
- web页面上鼠标任意拖动图标的程序
- Unity自定义鼠标指针图案
- windows程序设计 C语言之为窗口程序加入自定义的图标 LoadIcon() --加载一个图标资源 VC++6.0
- MFC 单文档自定义exe程序左上角图标
- pygame系列_第一个程序_图片代替鼠标移动
- Win8系统下如何自定义鼠标指针让其更个性
- 在自定义鼠标指针的时候遇到的一些问题
- 显示自定义动画鼠标或彩色图标(VB.net)
- 一分钟学会collectionView自定义layout(一)
- 006-unity3d GUI初识、贴图、自定义鼠标指针
- xp中点击开始菜单将鼠标指针停在所有程序上子菜单没有自动弹出
- Android自定义的控件在eclipse中提示空指针但是在程序中跑起来没问题