代码:
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程序中的一个按钮响应函数里,编译能够通过,运行时不显示图片,求指教,谢谢
把你绘图的代码放到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());
}