MFC中使用CImage类进行图片显,draw函数不显示图片

代码:
CImage image;//创建图片类
image.Load(_T("122.bmp"));//加载图片文件
CRect rect;//定义矩形类
int cx=image.GetWidth();//获取图片宽度
int cy=image.GetHeight();//获取图片高度

GetDlgItem(IDC_Picture)->GetWindowRect(&rect);//将窗口矩形选中到picture控件上
ScreenToClient(&rect);//将客户区选中到Picture控件表示的矩形区域内
GetDlgItem(IDC_Picture)->MoveWindow(rect.left,rect.right,cx,cy,TRUE);//将窗口移动到picture控件表示的矩形区域内

CWnd *pWnd=GetDlgItem(IDC_Picture);//获得picture控件窗口句柄
pWnd->GetClientRect(&rect);//获取picture控件所在的矩形区域
CDC *pDC=pWnd->GetDC();//获得picture控件的DC

image.Draw(pDC->m_hDC,0,0);//将图片画到picture控件表示的矩形区域内
ReleaseDC(pDC);//释放picture控件的DC
编译环境为VS2010,win7 64位,这段函数放在MFC程序中的一个按钮响应函数里,编译能够通过,运行时不显示图片,求指教,谢谢

7个回答

把你绘图的代码放到OnPaint/OnDraw()函数中去。

代码有没有执行,执行完代码后有没有别的会引起窗口刷新或者重画的代码

放到OnPaint中,这样可自动重绘,从而不会被刷新掉

谢谢各位,问题找到了,不是自动重绘覆盖的问题,而是图片控件放置位置的问题,导致图片在MFC界面外显示了。图片显示的位置不应该是在
picture控件的左上角吗?

针对图片位置的问题,对程序进行了修改,取消了矩形类,直接按坐标显示
CImage image;//创建图片类
image.Load(_T("122.bmp"));//加载图片文件
CRect rect;//定义矩形类
int cx=image.GetWidth();//获取图片宽度
int cy=image.GetHeight();//获取图片高度

CWnd *pWnd=GetDlgItem(IDC_Picture);//获得picture控件窗口句柄
CDC *pDC=pWnd->GetDC();//获得picture控件的DC

image.Draw(pDC->m_hDC,0,0,cx,cy);//将图片画到picture控件表示的矩形区域内
ReleaseDC(pDC);//释放picture控件的DC

你好,这个代码运行后,图片还是不显示,可能是快速闪烁了一下

放在onPaint函数里还是可以显示的。

CImage image;   
image.Load(_T("E:/Images/3.jpg"));

CRect zcRect;
GetDlgItem(IDC_PICTURE)->GetClientRect(&zcRect);
if ( !image.IsNull())   
    image.Draw(GetDlgItem(IDC_PICTURE)->GetDC()->m_hDC, zcRect.left, zcRect.top, zcRect.Width(), zcRect.Height());

    其中IDC_PICTURE是Picture控件。完整的onPaint函数如下:
    void CtestListCtrlDlg::OnPaint()

{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // 使图标在工作区矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // 绘制图标
    dc.DrawIcon(x, y, m_hIcon); 
}
else
{
    CDialogEx::OnPaint();
}   

CImage image;   
image.Load(_T("E:/Images/3.jpg"));

CRect zcRect;
GetDlgItem(IDC_PICTURE)->GetClientRect(&zcRect);
if ( !image.IsNull())   
    image.Draw(GetDlgItem(IDC_PICTURE)->GetDC()->m_hDC, zcRect.left, zcRect.top, zcRect.Width(), zcRect.Height());  

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问