在算法历程当中动态的加载图片显示到mfc的控件上 不被覆盖
在算法过程当中动态的加载图片显示到mfc的控件上 不被覆盖
在算法程序中把处理好的图片保存到指定的路径上,然后加载图片显示到mfc的static的控件上,可是图片会被覆盖掉,查了资料说是要重载,可是对mfc真的相当的不清楚,希望能有具体一些的代码做指导,多谢!这是我现在的图片显示程序。
void ShowImage1( UINT uID, void * image)
{
//显示图片
CDC* pDC=aaDlg->GetDlgItem(uID)->GetDC();// 获得显示控件的 DC
HDC hDC=pDC->GetSafeHdc();// 获取 HDC(设备句柄) 来进行绘图操作
CRect rect;
aaDlg->GetDlgItem(uID)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf((IplImage*)image); // 复制图片
cimg.DrawToHDC(hDC,&rect);
cimg.Destroy();
aaDlg->ReleaseDC(pDC);
}
------解决思路----------------------
这个二货
你要用text staic 的类派生一个新类
在新类里相应WM_PAINT
这个叫重载
步骤如下:
一、建立以个新类CMyPic,新类的基类选用CStatic
二、给CMyPic类相应WM_PAINT,在OnPaint里画你要的图片
三、添加一个text staic 控件,给这个控件建立以个CStatic关联的变量x
四、到对话框里吧CStatic x;改成CMyPic x;
OVER
------解决思路----------------------
楼上说的对,当控件需要重绘时,系统会发送WM_PAINT消息,你没在WM_PAINT消息的响应函数中绘制的话你绘制的图片就会被默认的行为覆盖。所以你要派生一个新类,把绘制代码放在WM_PAINT的消息函数OnPaint里面绘制
------解决思路----------------------
这个问题给这么多分!好有钱
//头文件.h
#pragma once
// CMyStatic
class CMyStatic : public CStatic
{
DECLARE_DYNAMIC(CMyStatic)
protected:
LPCTSTR m_lpszImagePath;
public:
CMyStatic();
virtual ~CMyStatic();
public:
void SetImagePath(LPCTSTR lpszImagePath);
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnPaint();
};
//源文件.cpp
#include "stdafx.h"
#include "MyStatic.h"
// CMyStatic
IMPLEMENT_DYNAMIC(CMyStatic, CStatic)
CMyStatic::CMyStatic()
: m_lpszImagePath(NULL)
{
}
CMyStatic::~CMyStatic()
{
}
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
// CMyStatic message handlers
void CMyStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
image_plateview = cvLoadImage(m_lpszImagePath);
if (image_plateview != NULL)
{
CvvImage cimg;
cimg.CopyOf((IplImage*)image_plateview); // 复制图片
CRect rect;
GetClientRect(&rect);
cimg.DrawToHDC(dc.GetSafeHdc(),&rect);
cimg.Destroy();
}
// Do not call CStatic::OnPaint() for painting messages
}
void CMyStatic::SetImagePath( LPCTSTR lpszImagePath )
{
m_lpszImagePath = lpszImagePath;
Invalidate();
UpdateWindow();
}
//在按钮click中
void CIntelligentTrafficDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
CMyStatic* pMyStatic = GetDlgItem(uID);
pMyStatic.SetImagePath(imagepath);
}
------解决思路----------------------
猜测你没有子类化控件该控件
1.
BOOL CIntelligentTrafficDlg::OnInitDialog()
{
//在头文件中声明的CMyStatic m_ctlMyStatic
m_ctlMyStatic.SubclassDlgItem(IDC_STATIC_TEST, this); //IDC_STATIC_TEST控件的ID,可能要把默认的IDC_STATIC修改下
}
2.在类向导中为控件添加成员变量CMyStatic
------解决思路----------------------
对话框 加 WS_CLIPCHIDREN 属性。
------解决思路----------------------
资源,对话框, 属性,
------解决思路----------------------
点击对话框,按“属性”
------解决思路----------------------
右图 里 那个 ”Clip Children“ 改 TRUE
在算法程序中把处理好的图片保存到指定的路径上,然后加载图片显示到mfc的static的控件上,可是图片会被覆盖掉,查了资料说是要重载,可是对mfc真的相当的不清楚,希望能有具体一些的代码做指导,多谢!这是我现在的图片显示程序。
void ShowImage1( UINT uID, void * image)
{
//显示图片
CDC* pDC=aaDlg->GetDlgItem(uID)->GetDC();// 获得显示控件的 DC
HDC hDC=pDC->GetSafeHdc();// 获取 HDC(设备句柄) 来进行绘图操作
CRect rect;
aaDlg->GetDlgItem(uID)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf((IplImage*)image); // 复制图片
cimg.DrawToHDC(hDC,&rect);
cimg.Destroy();
aaDlg->ReleaseDC(pDC);
}
------解决思路----------------------
这个二货
你要用text staic 的类派生一个新类
在新类里相应WM_PAINT
这个叫重载
步骤如下:
一、建立以个新类CMyPic,新类的基类选用CStatic
二、给CMyPic类相应WM_PAINT,在OnPaint里画你要的图片
三、添加一个text staic 控件,给这个控件建立以个CStatic关联的变量x
四、到对话框里吧CStatic x;改成CMyPic x;
OVER
------解决思路----------------------
楼上说的对,当控件需要重绘时,系统会发送WM_PAINT消息,你没在WM_PAINT消息的响应函数中绘制的话你绘制的图片就会被默认的行为覆盖。所以你要派生一个新类,把绘制代码放在WM_PAINT的消息函数OnPaint里面绘制
------解决思路----------------------
这个问题给这么多分!好有钱
//头文件.h
#pragma once
// CMyStatic
class CMyStatic : public CStatic
{
DECLARE_DYNAMIC(CMyStatic)
protected:
LPCTSTR m_lpszImagePath;
public:
CMyStatic();
virtual ~CMyStatic();
public:
void SetImagePath(LPCTSTR lpszImagePath);
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnPaint();
};
//源文件.cpp
#include "stdafx.h"
#include "MyStatic.h"
// CMyStatic
IMPLEMENT_DYNAMIC(CMyStatic, CStatic)
CMyStatic::CMyStatic()
: m_lpszImagePath(NULL)
{
}
CMyStatic::~CMyStatic()
{
}
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
// CMyStatic message handlers
void CMyStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
image_plateview = cvLoadImage(m_lpszImagePath);
if (image_plateview != NULL)
{
CvvImage cimg;
cimg.CopyOf((IplImage*)image_plateview); // 复制图片
CRect rect;
GetClientRect(&rect);
cimg.DrawToHDC(dc.GetSafeHdc(),&rect);
cimg.Destroy();
}
// Do not call CStatic::OnPaint() for painting messages
}
void CMyStatic::SetImagePath( LPCTSTR lpszImagePath )
{
m_lpszImagePath = lpszImagePath;
Invalidate();
UpdateWindow();
}
//在按钮click中
void CIntelligentTrafficDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
CMyStatic* pMyStatic = GetDlgItem(uID);
pMyStatic.SetImagePath(imagepath);
}
------解决思路----------------------
猜测你没有子类化控件该控件
1.
BOOL CIntelligentTrafficDlg::OnInitDialog()
{
//在头文件中声明的CMyStatic m_ctlMyStatic
m_ctlMyStatic.SubclassDlgItem(IDC_STATIC_TEST, this); //IDC_STATIC_TEST控件的ID,可能要把默认的IDC_STATIC修改下
}
2.在类向导中为控件添加成员变量CMyStatic
------解决思路----------------------
对话框 加 WS_CLIPCHIDREN 属性。
------解决思路----------------------
资源,对话框, 属性,
------解决思路----------------------
点击对话框,按“属性”
------解决思路----------------------
右图 里 那个 ”Clip Children“ 改 TRUE