大家好!VC/MFC对话框问题
VS2012——MFC生成一个对话框程序,去除了标题栏和边框,用CImage把一个画有三个同样大小按钮图形的PNG文件Draw到对话框右上角代表关闭按钮,没有任何控件,如...
VS2012——MFC生成一个对话框程序,去除了标题栏和边框,用CImage把一个画有三个同样大小按钮图形的PNG文件Draw到对话框右上角代表关闭按钮,没有任何控件,如果实现3态变换,就是当鼠标移到右上角那个区域时绘制这个PNG文件的第二个图形,当鼠标按下时绘制这个PNG文件的第三个图形,,,谢谢
不好意思,打错了,是如何实现3态变换,不是如果 展开
不好意思,打错了,是如何实现3态变换,不是如果 展开
展开全部
响应相应的鼠标消息:mosemove,lbuttondown,以分别显示对应的png。
在消息响应函数里:
CImage im;//为了避免频繁加载、释放图片资源,减少开销,建议用2个成员变量分别表示,只加载释放一次即可
im.Load(……);
im.BitBlt(对应按钮位置);//或im.Draw(……)
明白了吧?
在消息响应函数里:
CImage im;//为了避免频繁加载、释放图片资源,减少开销,建议用2个成员变量分别表示,只加载释放一次即可
im.Load(……);
im.BitBlt(对应按钮位置);//或im.Draw(……)
明白了吧?
更多追问追答
追问
你好,非常感谢你的帮助,我为这个问题困扰了好几天,实在想不出什么好办法了,网上查了好几天也没结果,是这样的啊:首先我这是个MFC对话框程序,去除了标题栏和边框,没用任何按钮等控件....我首先这样:
给你发私信了,内容过长,打不上来,关键是在OnMouseMove函数里进行了鼠标坐标判断后,在哪绘制啊
追答
说这么清楚还不明白……好吧,以某一个按钮为例。
CImage imSource,imHover,imDown;//原图,鼠标移过的图,按下的图,成员变量,注意在构造函数或OnInitDialog里Load对应图片
BOOL m_bHover//成员变量,初始化为FALSE
OnMouseMove函数里:
if(在按钮上)
{
imHover.BitBlt(对应位置);
m_bHover = TRUE;
}
else
{
if(m_bHover)
imSource.BitBlt(对应位置);
m_bHover = FALSE;
}
OnLbuttondown函数里:
if(在按钮上)
imDown.BitBlt(对应位置);
OnLbuttonup函数里:
if(在按钮上)
imSource.BitBlt(对应位置);
说的这程度,你要还不明白我也没办法了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Onpaint()
{
CMDC DC;
....
if( MouseMove) MyImage.load("onmousemove.png"); // dc draw image here
else if(mouseClick) MyImage.load("onmouseClick.png"); // dc draw image here
else MyImage.load("normal.png"); // dc draw image here
//刷新区域
}
OnMouseMove()
{
//获得鼠标坐标 point
if( point 在 按钮区域)
{
MouseMove = True;
mouseClick = False;
}
else
{
MouseMove = false;
mouseClick = false;
}
OnPaint();
}
OnMouseClick()
{
MouseMove = false;
mouseClick = true;
Onpaint();
}
{
CMDC DC;
....
if( MouseMove) MyImage.load("onmousemove.png"); // dc draw image here
else if(mouseClick) MyImage.load("onmouseClick.png"); // dc draw image here
else MyImage.load("normal.png"); // dc draw image here
//刷新区域
}
OnMouseMove()
{
//获得鼠标坐标 point
if( point 在 按钮区域)
{
MouseMove = True;
mouseClick = False;
}
else
{
MouseMove = false;
mouseClick = false;
}
OnPaint();
}
OnMouseClick()
{
MouseMove = false;
mouseClick = true;
Onpaint();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载WM_MOUSEMOVE鼠标消息,当鼠标移动到此按钮区域时显示第二张图片;判断鼠标按键状态,按下左键时显示第三张图片。
追问
你好,这个思路我也知道,我已在对话框的OnPaint函数里Draw了png文件的第一个图形,也重载了OnMouseMove函数,但在这个函数里判断完区域后,如何绘制这个Png文件的第二个图形呢,或者在哪个函数里Draw呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这需要对按钮进行自绘,还用到一个封装的CMemDC类,你给我留一个邮箱,我给你发过去我以前自己做过的项目,应该对你有帮助,如有帮助请采纳。
更多追问追答
追问
非常感谢这位朋友,,,这是我的邮箱:gysh800@qq.com
追答
OK ,给你发过去了,希望有帮助。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询