我试过WM_CURSOR,代码如下:
if(pWnd==GetDlgItem(ID_BTN_EDIT))//ID_BTN_EDIT是我工具栏上一个按钮的图标
{
::SetCursor(LoadCursor(NULL,ID_HAND));
return TRUE;
}
调试发现当移动到该工具栏按钮上时无法进入这个判断。
而如果我将ID_BTN_EDIT改成IDOK(系统默认生成的一个按钮,对话框上的),确实可以实现该功能。
请问我该如何实现工具栏按钮图标改变?
1 个解决方案
#1
而你要的是针对工具条里的某个按钮,这个按钮没有单独的窗口句柄,不应该用GetDlgItem
你可以用TB_GETRECT(CToolBarCtrl::GetItemRect)来获取某个按钮的矩形区域,再对比鼠标坐标。
未尝试,给你提供点思路吧:
在工具条的鼠标移动事件(WM_MOUSEMOVE)里,用TB_GETRECT遍历所有按钮的区域,对比鼠标坐标,然后SetCursor
int m_nCurIndex=-1;
void CToolBarCtrl::OnMouseMove(POINT pt)
{
int nIndex=-1;
int nCount=GetButtonCount();
for(int i=0;i<nCount;i++)
{
//获取按钮的矩形区域
RECT rc;
GetItemRect(i,&rc);
//判断鼠标是否在矩形里面
if(PtInRect(&rc,&pt))
{
nIndex=i;
}
}
if(m_nCurIndex!=nIndex)
{
m_nCurIndex=nIndex;
SetCursor(xxxx);//设置鼠标指针
}
}
#1
而你要的是针对工具条里的某个按钮,这个按钮没有单独的窗口句柄,不应该用GetDlgItem
你可以用TB_GETRECT(CToolBarCtrl::GetItemRect)来获取某个按钮的矩形区域,再对比鼠标坐标。
未尝试,给你提供点思路吧:
在工具条的鼠标移动事件(WM_MOUSEMOVE)里,用TB_GETRECT遍历所有按钮的区域,对比鼠标坐标,然后SetCursor
int m_nCurIndex=-1;
void CToolBarCtrl::OnMouseMove(POINT pt)
{
int nIndex=-1;
int nCount=GetButtonCount();
for(int i=0;i<nCount;i++)
{
//获取按钮的矩形区域
RECT rc;
GetItemRect(i,&rc);
//判断鼠标是否在矩形里面
if(PtInRect(&rc,&pt))
{
nIndex=i;
}
}
if(m_nCurIndex!=nIndex)
{
m_nCurIndex=nIndex;
SetCursor(xxxx);//设置鼠标指针
}
}