MFC怎样实现鼠标移动图片高亮显示 像金山卫士里的工具栏图片鼠标移动高亮显示??? 不要更换图片,要绘制 10

不要两张图片通过OnMouseEnter()和OnMouseLeave()来回更换图片的那种方法,要自己手动绘制的方法,求解啊啊啊... 不要两张图片通过OnMouseEnter()和OnMouseLeave()来回更换图片的那种方法,要自己手动绘制的方法,求解啊啊啊 展开
 我来答
凤神凰灵
2012-10-17 · TA获得超过160个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:86.8万
展开全部
在鼠标移动的响应函数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;
更多追问追答
追问
不行哦,没有高亮显示图片
追答
可能我理解错了,我这里的代码可以实现加边框,你说的“高亮”是指按钮图片变白吗?那就是另外一回事了。实际上这些软件界面都会用到“皮肤库”,说白了还是几块图片之间通过响应切换,只不过这些图是画在一张图里,控件写在一个单独的.xml文件里,用c#语言,然后在c++中调用皮肤库,并关联响应
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
樱信全无YX
2012-10-09 · TA获得超过630个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:258万
展开全部
不知道如下方法是否可以:
重载CButton,在OnPaint中使用OnNcHitTest判断鼠标是否在Button区域之内,然后手绘.
追问
有没有Demo啊??有的话发我邮箱641655502@qq.com
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式