MFC怎样实现鼠标移动图片高亮显示 像金山卫士里的工具栏图片鼠标移动高亮显示??? 不要更换图片,要绘制 10
不要两张图片通过OnMouseEnter()和OnMouseLeave()来回更换图片的那种方法,要自己手动绘制的方法,求解啊啊啊...
不要两张图片通过OnMouseEnter()和OnMouseLeave()来回更换图片的那种方法,要自己手动绘制的方法,求解啊啊啊
展开
2个回答
展开全部
在鼠标移动的响应函数OnMouseMove(UINT nFlags, CPoint point)里面添加代码,
POINT ptMouse;
GetCursorPos(&ptMouse);
hWnd = ::WindowFromPoint(ptMouse);
HDC DeskDC =::GetWindowDC(DeskHwnd);
int oldRop2 = SetROP2(DeskDC, R2_NOTXORPEN);
HPEN newPen = ::CreatePen(0, 3, 0);
HGDIOBJ oldPen = ::SelectObject(DeskDC, newPen);
RECT rc;
::GetWindowRect(hWnd, &rc);
::Rectangle(DeskDC, rc.left, rc.top, rc.right, rc.bottom);
::SetROP2(DeskDC, oldRop2);
::SelectObject( DeskDC, oldPen);
::DeleteObject(newPen);
::ReleaseDC( DeskHwnd, DeskDC);
DeskDC = NULL;
这些能够实现在每经过的小窗口边缘画一个框,要想实现只在当前所在的小窗口加框,要把之前的消去,同样使用函数 ::Rectangle(DeskDC, rc.left, rc.top, rc.right, rc.bottom);。你需要设置一个全局变量记录一个CurrentWnd,当所在Wnd与CurrentWnd不等时把CurrentWnd的框消去,画当前Wnd的框,并CurrentWnd = Wnd;
POINT ptMouse;
GetCursorPos(&ptMouse);
hWnd = ::WindowFromPoint(ptMouse);
HDC DeskDC =::GetWindowDC(DeskHwnd);
int oldRop2 = SetROP2(DeskDC, R2_NOTXORPEN);
HPEN newPen = ::CreatePen(0, 3, 0);
HGDIOBJ oldPen = ::SelectObject(DeskDC, newPen);
RECT rc;
::GetWindowRect(hWnd, &rc);
::Rectangle(DeskDC, rc.left, rc.top, rc.right, rc.bottom);
::SetROP2(DeskDC, oldRop2);
::SelectObject( DeskDC, oldPen);
::DeleteObject(newPen);
::ReleaseDC( DeskHwnd, DeskDC);
DeskDC = NULL;
这些能够实现在每经过的小窗口边缘画一个框,要想实现只在当前所在的小窗口加框,要把之前的消去,同样使用函数 ::Rectangle(DeskDC, rc.left, rc.top, rc.right, rc.bottom);。你需要设置一个全局变量记录一个CurrentWnd,当所在Wnd与CurrentWnd不等时把CurrentWnd的框消去,画当前Wnd的框,并CurrentWnd = Wnd;
更多追问追答
追问
不行哦,没有高亮显示图片
追答
可能我理解错了,我这里的代码可以实现加边框,你说的“高亮”是指按钮图片变白吗?那就是另外一回事了。实际上这些软件界面都会用到“皮肤库”,说白了还是几块图片之间通过响应切换,只不过这些图是画在一张图里,控件写在一个单独的.xml文件里,用c#语言,然后在c++中调用皮肤库,并关联响应
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询