界面上有张位图,把鼠标放在上面,会给出一段文字。并且该图片是可以动态加载的,就是我点某个按钮,该图片会被改变。
2个功能分开做可以成功,和在一起就出错了
我弄了个按钮,用来初始化界面上的图片控件,点它之后,图片控件会显示一张图片,然后,还有其他类似的控件,可以改变图片
CBitmap bitmap; // CBitmap对象,用于加载位图
HBITMAP hBmp; // 保存CBitmap加载的位图的句柄
bitmap.LoadBitmap(IDB_101_2); // 将位图IDB_BITMAP1加载到bitmap
hBmp = (HBITMAP)bitmap.GetSafeHandle(); // 获取bitmap加载位图的句柄
m_101.SetBitmap(hBmp); // 设置图片控件m_jzmPicture的位图图片为IDB_BITMAP1
然后,网上搜索了将鼠标放在图片上,会有文字说明的代码。我分开做可以成功,和在一起运行报错
1、CDlg**头文件中声明成员变量
CToolTipCtrl m_tooltip;
2、CDlg***::OnInitDialog() 中创建并设置参数
m_tooltip.Create(this);
//CToolTipCtrl与控件关联
m_tooltip.AddTool(GetDlgItem(IDC_EDIT_A), TTS_ALWAYSTIP);//当鼠标指向IDC_EDIT_A控件显示提示
//若如是句柄可以用FromHandle(hwnd)替换 GetDlgItem(IDC_EDIT_A)
//文字颜色
m_tooltip.SetTipTextColor(RGB(0,0,255));
//鼠标指向多久后显示提示,毫秒
m_tooltip.SetDelayTime(TTDT_INITIAL, 10);
//鼠标保持指向,提示显示多久,毫秒
m_tooltip.SetDelayTime(TTDT_AUTOPOP, 30000);
//设定显示宽度,超长内容自动换行
m_tooltip.SetMaxTipWidth(200);
3、重写PreTranslateMessage,增加以下内容:
if(m_tooltip.m_hWnd!=NULL)
{
m_tooltip.RelayEvent(pMsg);
}
9 个解决方案
#1
我想知道,该怎么改,或者有更好的方法
#2
图片和文字的显示都放在OnDraw函数里面。设置两个标记表示图片是否存在,以及鼠标是否在图片上。然后在单击按钮的时候,改变这些标记值,然后InvalidateRect( ),它就会刷新显示。
#3
能否给下代码,或例子 。
刚接触,目前只能达到改别人代码、看别人代码的水平。。。。。。谢谢
#4
感觉也没哪里错,异常在什么地方了
#5
头文件声明两个标记值
CBitmap m_bitmap; //保存位图
BOOL m_bitmapExist; //判断是否图片存在
BOOL m_pointInBitmap; // 光标是否移入图片控件上
实现文件中
在构造函数中对上述成员变量初始化
在单击按钮响应时间中,重新给m_bitmap赋值然后::InvalidateRect(m_hwndBitmapControl,NULL,TRUE);图片就要 改变了;
重载图片控件的WndProc消息处理函数,在里面对WM_Paint消息进行处理,(也就是所谓的OnDraw了,可以这么理解~)
void CBitmapControl::WndProc(HWNd hwnd, MSG msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_PAINT:
{
if(m_bitmapExist)
{
//加载位图
}
if(m_pointInBitmap)
{
// 显示文字
}
break;
}
}
}
我只能帮到这了。
CBitmap m_bitmap; //保存位图
BOOL m_bitmapExist; //判断是否图片存在
BOOL m_pointInBitmap; // 光标是否移入图片控件上
实现文件中
在构造函数中对上述成员变量初始化
在单击按钮响应时间中,重新给m_bitmap赋值然后::InvalidateRect(m_hwndBitmapControl,NULL,TRUE);图片就要 改变了;
重载图片控件的WndProc消息处理函数,在里面对WM_Paint消息进行处理,(也就是所谓的OnDraw了,可以这么理解~)
void CBitmapControl::WndProc(HWNd hwnd, MSG msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_PAINT:
{
if(m_bitmapExist)
{
//加载位图
}
if(m_pointInBitmap)
{
// 显示文字
}
break;
}
}
}
我只能帮到这了。
#6
跳转到这里界面就出错,
我猜测是
我猜测是这里,
因为我把对图片的显示写在一个按钮控件中,是不是因为 运行上面OnInitDialog() PreTranslateMessage()的时候,我的图片还没出现,就是顺序颠倒了,,,
我猜测是
我猜测是这里,
2、CDlg***::OnInitDialog() 中创建并设置参数
3、重写PreTranslateMessage,增加以下内容:
if(m_tooltip.m_hWnd!=NULL)
{
m_tooltip.RelayEvent(pMsg);
}
因为我把对图片的显示写在一个按钮控件中,是不是因为 运行上面OnInitDialog() PreTranslateMessage()的时候,我的图片还没出现,就是顺序颠倒了,,,
#7
图片控件属性那里添加一个notify属性看看。还有就是出错的地方是哪里?
#8
之前就有设置那个属性了。现在已经解决了,在这里
BOOL WORKERS::OnInitDialog(){
CDialog::OnInitDialog();//之前没有加这句话
EnableToolTips(TRUE);
m_ttc.Create(this);
m_ttc.Activate(TRUE);
CWnd* pw = GetDlgItem(IDC_STATIC_101);
m_ttc.SetDelayTime(TTDT_INITIAL, 10);
m_ttc.SetMaxTipWidth(5000);
m_ttc.AddTool(pw,_T("价格:100 元/天\n类型:标准房"));
return true;
}
#9
问题已经解决,谢谢各位
#1
我想知道,该怎么改,或者有更好的方法
#2
图片和文字的显示都放在OnDraw函数里面。设置两个标记表示图片是否存在,以及鼠标是否在图片上。然后在单击按钮的时候,改变这些标记值,然后InvalidateRect( ),它就会刷新显示。
#3
能否给下代码,或例子 。
刚接触,目前只能达到改别人代码、看别人代码的水平。。。。。。谢谢
#4
感觉也没哪里错,异常在什么地方了
#5
头文件声明两个标记值
CBitmap m_bitmap; //保存位图
BOOL m_bitmapExist; //判断是否图片存在
BOOL m_pointInBitmap; // 光标是否移入图片控件上
实现文件中
在构造函数中对上述成员变量初始化
在单击按钮响应时间中,重新给m_bitmap赋值然后::InvalidateRect(m_hwndBitmapControl,NULL,TRUE);图片就要 改变了;
重载图片控件的WndProc消息处理函数,在里面对WM_Paint消息进行处理,(也就是所谓的OnDraw了,可以这么理解~)
void CBitmapControl::WndProc(HWNd hwnd, MSG msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_PAINT:
{
if(m_bitmapExist)
{
//加载位图
}
if(m_pointInBitmap)
{
// 显示文字
}
break;
}
}
}
我只能帮到这了。
CBitmap m_bitmap; //保存位图
BOOL m_bitmapExist; //判断是否图片存在
BOOL m_pointInBitmap; // 光标是否移入图片控件上
实现文件中
在构造函数中对上述成员变量初始化
在单击按钮响应时间中,重新给m_bitmap赋值然后::InvalidateRect(m_hwndBitmapControl,NULL,TRUE);图片就要 改变了;
重载图片控件的WndProc消息处理函数,在里面对WM_Paint消息进行处理,(也就是所谓的OnDraw了,可以这么理解~)
void CBitmapControl::WndProc(HWNd hwnd, MSG msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_PAINT:
{
if(m_bitmapExist)
{
//加载位图
}
if(m_pointInBitmap)
{
// 显示文字
}
break;
}
}
}
我只能帮到这了。
#6
跳转到这里界面就出错,
我猜测是
我猜测是这里,
因为我把对图片的显示写在一个按钮控件中,是不是因为 运行上面OnInitDialog() PreTranslateMessage()的时候,我的图片还没出现,就是顺序颠倒了,,,
我猜测是
我猜测是这里,
2、CDlg***::OnInitDialog() 中创建并设置参数
3、重写PreTranslateMessage,增加以下内容:
if(m_tooltip.m_hWnd!=NULL)
{
m_tooltip.RelayEvent(pMsg);
}
因为我把对图片的显示写在一个按钮控件中,是不是因为 运行上面OnInitDialog() PreTranslateMessage()的时候,我的图片还没出现,就是顺序颠倒了,,,
#7
图片控件属性那里添加一个notify属性看看。还有就是出错的地方是哪里?
#8
之前就有设置那个属性了。现在已经解决了,在这里
BOOL WORKERS::OnInitDialog(){
CDialog::OnInitDialog();//之前没有加这句话
EnableToolTips(TRUE);
m_ttc.Create(this);
m_ttc.Activate(TRUE);
CWnd* pw = GetDlgItem(IDC_STATIC_101);
m_ttc.SetDelayTime(TTDT_INITIAL, 10);
m_ttc.SetMaxTipWidth(5000);
m_ttc.AddTool(pw,_T("价格:100 元/天\n类型:标准房"));
return true;
}
#9
问题已经解决,谢谢各位