MFC PictureControl控件问题
有一些图片,放在一个指定的目录文件下,我需要创建一个模态对话框,该对话框无边框,也没有关闭取消等按钮,程序运行过程中一直存在于内存中,需要显示时它显示用:picDlg->ShowWindow(SW_SHOW);不需要显示时隐藏:picDlg->ShowWindow(SW_HIDE);有如下问题:图片大小不一致,在显示的时候,我需要对对话框进行大小的重新设定,即先获取图片大小然后将对话框大小设置为匹配图片大小;
如何在知道图片路径及名称以及后缀名的情况下,将图片资源读取并显示在对应的pictrueControl控件中,每次显示图片要动态更新,该方案不将图片素材加入工程;
是否有比较全的功能代码,能够显示jpg格式图片最好,显示部分我暂时用的代码段如下:(当前代码运行一段时间后会触发中断)
程序代码:
void CPictureControl::OnPaint() { mPictureViewer.SetBitmap(NULL);//((CStatic*)GetDlgItem(IDC_STATIC_PHOTO))->SetBitmap(NULL); this->RedrawWindow(); //定义变量存储图片信息 BITMAPINFO *pBmpInfo; //记录图像细节 BYTE *pBmpData; //图像数据 BITMAPFILEHEADER bmpHeader; //文件头 BITMAPINFOHEADER bmpInfo; //信息头 CFile bmpFile; //记录打开文件 //以仅仅读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据 if(!bmpFile.Open(m_filename, CFile::modeRead|CFile::typeBinary)) return; if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER)) return; if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER)) return; pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)]; //为图像数据申请空间 memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER)); DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits; pBmpData = (BYTE*)new char[dataBytes]; bmpFile.Read(pBmpData,dataBytes); bmpFile.Close(); //显示图像 CWnd *pWnd=GetDlgItem(IDC_PIC); //获得pictrue控件窗体的句柄 CRect rect; pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域 CDC *pDC=pWnd->GetDC(); //获得pictrue控件的DC pDC->SetStretchBltMode(COLORONCOLOR); StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY); }