请教众高手 在MFC中我的工程是以单文档为基础的 我如果想读入一个.bmp或.jpg图片并在客户区显示出来 应当如何操作呢?
解决方案 »
- 急求子类化CFileDialog时用的的ID值。
- ComboBox: 触发CBN_SELCHANGE问题
- 在visual studio2005中如何设置 包含链接库文件WS2_32.lib
- Xp防火墙拦住了我的连接【求助】
- 怎么通过一连接好的 socket 的值找到其相关的 ip 和 port ?不在connnect前后accept中获得。
- vc++与c++是怎样的关系?
- 一个关于CListCtrl的问题
- 创建socket是发生10093错误什么意思
- 动态连接库参数可以为BYTE型吗(In & out)?
- 各位大哥,有没有介绍使用VC IDE技巧的文章??
- 在vc中写界面,比如一个窗体上有很多控件,是不是全部要用代码写呀,不能象delphi那样手工把控件拖上去就行了.是不是效率很低呀?
- 我想做一个截图程序,那个框怎么编写?
//此函数是通过文件对话框获得图像文件路径
//首先定义IStream *m_pstrm 指向一个数据流对象的指针
//IPicture *m_IpPic; 指向一个OLE对象的指针
void CShowpictureDlg::OnBrower()
{
// TODO: Add your control notification handler code here
CWnd* pdlg_edit;
CFileDialog dlg(TRUE,"jpg","*.jpg",
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);
if(dlg.DoModal()==IDOK)
{m_strPath=dlg.GetPathName();
Invalidate();
......
}}
此函数是把图像数据读入到内存区
void CShowpictureDlg::toStream()
{
// TODO: Add your control notification handler code here
CFile file;
CFileStatus fstatus;
LONG cb;
if(m_strPath.GetLength()<=0){return;} //文件路径为空时退出过程 //以只读方式打开图像文件
if(file.Open(m_strPath,CFile::modeRead)==FALSE)
{
file.Close();
return;
}
//检查文件状态,
if(file.GetStatus(m_strPath,fstatus)==FALSE)
{
file.Close();
return;
} cb=fstatus.m_size; //得到文件字节数 HGLOBAL hglobal=GlobalAlloc(GMEM_MOVEABLE, cb); // GMEM_MOVEABLE表示活动的
LPVOID pvData =GlobalLock(hglobal); //锁定内存对象
if(hglobal!=NULL)
{
if(pvData!=NULL)
{
file.ReadHuge(pvData,cb);
GlobalUnlock(hglobal);
CreateStreamOnHGlobal(hglobal,TRUE,&m_pstrm);
if(FAILED(OleLoadPicture(m_pstrm,cb,TRUE,IID_IPicture,(LPVOID*)&m_IpPic)))
return;
}
}
}//以下函数是显示图像
void CShowpictureDlg::toDraw()
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
m_IpPic->get_Width(&hmWidth);
m_IpPic->get_Height(&hmHeight); if(m_IpPic==NULL)return; double fx=0.0,fy=0.0;
CWnd *pwnd=GetDlgItem(IDC_FRAME); //获得控件的对象指针
CDC *pDc=pwnd->GetDC();
pDc->SetBkColor(RGB(0,255,255));
fx=(double)pDc->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDc->GetDeviceCaps(HORZRES)*70.0);
fy=(double)pDc->GetDeviceCaps(VERTRES)*(double)hmWidth/((double)pDc->GetDeviceCaps(VERTRES)*70.0);
if(FAILED(m_IpPic->Render(*pDc,2,8,(DWORD)fx,(DWORD)fy,0,hmHeight,hmWidth,-hmHeight,NULL)))
{
AfxMessageBox("绘画图像过程中发生错误!");
m_IpPic->Release();
}
}