MFC显示JPG图片问题?? 想实现在MFC对话框界面上显示文件夹下的JPG图片,请前辈们指点下,在 线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 正常显示就用CImage,缩略图要麻烦一些 在对话框类的OnPaint函数中加载绘制图片:void CGDIPictureDlg::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 { //下面为新添加的加载图片的代码 CDC* pDC = this->GetDC(); CImage img; img.Load(L"D:\\Liuli\\215.jpg"); img.Draw(pDC->m_hDC,0,0); }}还要在对话框类的头文件中加上:#include "atlimage.h" CImage image; //使用图片类 image.Load( _T("D:\\Software\\MFC Window\\text\\1000000015.jpg") ); //装载路径下图片信息到图片类 RECT rect = { 0 };rect.bottom = image.GetWidth(); rect.right = image.GetHeight(); CDC* pDC = m_mm.GetWindowDC(); //获得显示控件的DC image.Draw( pDC->m_hDC,rect); //图片类的图片绘制Draw函数 ReleaseDC( pDC ); 这样能显示,但是会失真,请问有办法修复下吗?? 在image.Draw( pDC->m_hDC,rect)这句前面加一句:pDC->SetStretchBltMode(STRETCH_HALFTONE); 试一下看看 加上一句,改正之前的问题,显示还有一点问题,就是显示显示的只能是图片的一部分,就是从图片的左上角开始算,长和宽 等于控件的长 宽,其余的就显示不出来了,还有就是比如 a b两个图片,a显示部分图片,b的的图片 长 宽小于 控件的长 宽 那b剩余的空间就会显示a的图片??、 对话框/对话框上的控件的尺寸 比 图片的尺寸 小,所以就不能完全显示出来你第一次加载一张图片后,第二次加载要重新刷新加载,把你画图的那部分代码放Onpaint函数中,需要加载的时候,调用Invalidate() 麻烦你帮我分析下这个问题吧, 我在对话框上一个空间用来显示图片,有个按钮可以切换图片,现在图片是能显示出来,就是第一次显示的时候,显示不出来图片,用切换图片按钮,切换下就可以正常了,例如:有 a b c三张图片,想软件启动就显示a,在程序中可以用切换按钮来 实现三个图片的轮流显示,显示现在软件启动时,图片显示不出来,按下切换按钮,显示就正常了 IPicture *m_picture; HGLOBAL m_hglobal; long dwlen; //先读取图片.. //OnInitDialog中读取图片数据... CFile file(m_path,CFile::modeRead);//m_path是CString对象,保存的是图片的路径 dwlen = file.GetLength(); m_hglobal = GlobalAlloc(GMEM_MOVEABLE , dwlen); LPVOID pdata = GlobalLock(m_hglobal); file.ReadHuge(pdata,dwlen); GlobalUnlock(m_hglobal); file.Close();// 显示部份 IStream* m_stream; GlobalUnlock(m_hglobal); CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);//在堆上创流对像 OleLoadPicture(m_stream,dwlen,TRUE,IID_IPicture,(LPVOID*)&m_picture); OLE_XSIZE_HIMETRIC m_width; OLE_YSIZE_HIMETRIC m_height; m_picture->get_Height(&m_height); m_picture->get_Width(&m_width); CWnd* pWnd = GetDlgItem(IDC_STATIC1);//CStatic控件 CDC *pDC = pWnd->GetDC(); CRect rect; pWnd->GetClientRect(rect); m_picture->Render(*pDC,0,0,rect.Width(),rect.Height(),0,m_height,m_width,-m_height,NULL);就是这段代码 CListCtrl控件当选中一项时候如何能知道 抢分问题!(在线等) 如何在线程中调用CListCtrl相关操作? 请问谁有vc++6.0技术内幕配套光盘。发给我一份 数字签名导致LoadLibrary 出问题 想要把一棵二叉树图形输出,请问有什么好算法? 如何检测当前设备的状态? 关于类的初始化的问题。 谁来帮帮我---50分 有没办法设置菜单的region ADO 向数据库添加记录时出现Runtime error错误! 重叠IO中的: if ((Index - WSA_WAIT_EVENT_0) + 1 != EventTotal)想不明白?
void CGDIPictureDlg::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
{
//下面为新添加的加载图片的代码
CDC* pDC = this->GetDC();
CImage img;
img.Load(L"D:\\Liuli\\215.jpg");
img.Draw(pDC->m_hDC,0,0);
}
}还要在对话框类的头文件中加上:#include "atlimage.h"
image.Load( _T("D:\\Software\\MFC Window\\text\\1000000015.jpg") ); //装载路径下图片信息到图片类 RECT rect = { 0 };
rect.bottom = image.GetWidth();
rect.right = image.GetHeight(); CDC* pDC = m_mm.GetWindowDC(); //获得显示控件的DC
image.Draw( pDC->m_hDC,rect); //图片类的图片绘制Draw函数
ReleaseDC( pDC ); 这样能显示,但是会失真,请问有办法修复下吗??
pDC->SetStretchBltMode(STRETCH_HALFTONE); 试一下看看
你第一次加载一张图片后,第二次加载要重新刷新加载,把你画图的那部分代码放Onpaint函数中,需要加载的时候,调用Invalidate()
麻烦你帮我分析下这个问题吧, 我在对话框上一个空间用来显示图片,有个按钮可以切换图片,现在图片是能显示出来,就是第一次显示的时候,显示不出来图片,用切换图片按钮,切换下就可以正常了,例如:有 a b c三张图片,想软件启动就显示a,在程序中可以用切换按钮来 实现三个图片的轮流显示,显示现在软件启动时,图片显示不出来,按下切换按钮,显示就正常了
HGLOBAL m_hglobal;
long dwlen; //先读取图片..
//OnInitDialog中读取图片数据...
CFile file(m_path,CFile::modeRead);//m_path是CString对象,保存的是图片的路径
dwlen = file.GetLength();
m_hglobal = GlobalAlloc(GMEM_MOVEABLE , dwlen);
LPVOID pdata = GlobalLock(m_hglobal);
file.ReadHuge(pdata,dwlen);
GlobalUnlock(m_hglobal);
file.Close();
// 显示部份
IStream* m_stream;
GlobalUnlock(m_hglobal);
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);//在堆上创流对像 OleLoadPicture(m_stream,dwlen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
OLE_XSIZE_HIMETRIC m_width; OLE_YSIZE_HIMETRIC m_height;
m_picture->get_Height(&m_height);
m_picture->get_Width(&m_width);
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
//CStatic控件
CDC *pDC = pWnd->GetDC();
CRect rect;
pWnd->GetClientRect(rect); m_picture->Render(*pDC,0,0,rect.Width(),rect.Height(),0,m_height,m_width,-m_height,NULL);就是这段代码