社区
界面
帖子详情
vc++中怎么把jpg图片做基本对话框的背景图片
luyinglply
2011-01-07 11:31:45
vc++中怎么把jpg图片做基本对话框的背景图片,我不想用bmp类型的 麻烦大家给出代码 多谢了
...全文
792
12
打赏
收藏
vc++中怎么把jpg图片做基本对话框的背景图片
vc++中怎么把jpg图片做基本对话框的背景图片,我不想用bmp类型的 麻烦大家给出代码 多谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luyinglply
2011-01-10
打赏
举报
回复
谢谢大家 我用IPicture接口实现了
lyg_lhc
2011-01-07
打赏
举报
回复
Cximage
varding
2011-01-07
打赏
举报
回复
http://blog.csdn.net/varding/archive/2010/05/06/5562914.aspx
Eleven
2011-01-07
打赏
举报
回复
CImage操作JPG
SunFlower
2011-01-07
打赏
举报
回复
这个必须要学习的
傻X
2011-01-07
打赏
举报
回复
GDI+的话就自带的
如果是VC6.0的话,虽然也是可以用GDI+的,不过还是可以FreeImage的
zzz_zou
2011-01-07
打赏
举报
回复
你没打开图片 不能对图片进行操作的
varding
2011-01-07
打赏
举报
回复
strp.Format("D:\\pb程序备份\\pb乱摊子\\vc\\AU\\rosette.jpg");
把你的路径换成上面的试试,可能少 '\' 了
luyinglply
2011-01-07
打赏
举报
回复
varding
给的网址 我在OnInitDialog()中
CDC* pDC = GetDlgItem(IDC_STC_DUMMY)->GetDC();
CString strp;
strp.Format("D:\\pb程序备份\pb乱摊子\vc\AU\rosette.jpg");
ShowJpgGif(pDC,strp,0,0);
void CAU1Dlg::ShowJpgGif(CDC *pDC, CString strPath, int x, int y)
{
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
//CFile::modeWrite|CFile::typeBinary
try{
if (file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1))
//if (file.Open(strPath,CFile::modeWrite|CFile::typeBinary))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
pvData = GlobalLock(hGlobal);
if (pvData != NULL)
{
file.Read(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
}
}
}
else
{ AfxMessageBox("1");
//return ;
}
}
catch(CFileException* e)
{
e->ReportError();
e->Delete();
}
//显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,
//要显示动画GIF请使用ACTIVE控//件。
IPicture *pPic;
//load image from file stream
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
double fX,fY;
//get image height and width
fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
//use render function display image
if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
{
pPic->Release();
return ;
}
pPic->Release();
}
else
return ;
return ;
}
错误打不开图片file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1))
然后就提示我这个
0x77155600指令引用的“0xcccccccc”内存,该内存不能read
是哪里的问题呐
lcyw
2011-01-07
打赏
举报
回复
楼上的方法都可行, 我都试过
wwgddx
2011-01-07
打赏
举报
回复
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open( "c:\\aa.jpg ", CFile::modeRead ¦ CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture- >get_Width( &nWidth ); // 宽
pPicture- >get_Height( &nHeight ); // 高
////////原大显示//////
CSize sz( nWidth, nHeight );
pDC- >HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
pPicture- >Render(pDC- >m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);
////////按窗口尺寸显示////////
// CRect rect; GetClientRect(&rect);
// pPicture- >Render(pDC- >m_hDC,0,0,rect.Width(),rect.Height(),
// 0,nHeight,nWidth,-nHeight,NULL);
if ( pPicture ) pPicture- >Release();// 释放 IPicture 指针
if ( pStream ) pStream- >Release(); // 释放 IStream 指针,同时释放了 hMem
::CoUninitialize();
Dreadnought
2011-01-07
打赏
举报
回复
IPicture也可以
V
C++
精品例子。。。。。
免费免费,共享一下。有以下内容: 一个可以重命名workspace的程序。 演示了如何生成一个COM组件。 用图形界面的程序装载控制台程序并接收控制台程序的输出。 将tiff转换成PDF的源程序。 简单字处理程序。 调节灰度的滑动条的类。 一个SMPP类库可以用来连接SMPP网关来发送和接收SMS消息。 使用CColorDialog类轻松改变
对话框
背景颜色和字体。 一个基于IE的浏览器,使用了多文档界面的标签,IE界面和XP的工具条等。 一个
C++
OCX控件可以在你应用程序的窗口上绘制
图片
。 模仿Outlook建立分类列表框。 简单的数字时钟程序 基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 列出所有的显示模式并列表出来,通过单击列表来改变显示分辨率。 创建一个按钮,并在上面显示图标。 利用Delphi的代码在VC
中
显示
JPG
图片
,不使用动态连接库。 一个邮件报告程序。 解释了最
基本
的MFC程序流程。 自定义的标签控件
对话框
。 在VC
中
实现Undo和Redo功能。
打开BMP文件的所有源程序
[disp bmp.rar] - c语言写的bmp图像读取显示例程,有助于具体了解bmp文件格式,灵活操作 [readbmp.rar] - 在visual
c++
下读取*.bmp位图的信息,并显示位图,点击“查看”->“信息”菜单,弹出
对话框
中
显示色彩位数、图像高度宽度、文件头大小等等信息。 [load_bmp_WINSDK.rar] - 载入位图的源代码,使用的是bmp格式。可直接编译通过。 [
图片
文件格式文档.zip] -
图片
文件格式说明,包含多种
图片
文件格式,例如:bmp,
JPG
,GIF,WMF,TI [CDialogSK_demo.zip] - 本系统实现了
对话框
界面随着资源res文件夹里面的bmp位图文件来改变,并且可以随意移动
对话框
的位置,还包含如果背景色是绿色可以透明显示! [bmp.rar] - 打开bmp文件源代码,VC实现,相当好用,用于毕业设计及课程设计 [bmp位图文件程序.rar] - 手把手教你了解bmp图形文件结构,C语言文件读写函数应用,一般数据处理方法,如果看不懂,说明我写的还不够具体,以后继续改进. [bmp2jpeg&jpegcoding;.rar] - bmp转换为jpeg,jpeg压缩的源代码 程序用vc实现了bmp
图片
转换成jpeg
图片
[bmpfor3.rar] - 从文件读取并显示bmp位图,然后保存 [运用Opengl和C实现一个人体面部的三维显示.rar] - 通过V
C++
和OPenGL实现人脸的三维显示,在 v
c++
6.0下编译通过
VC PICTURE控件的使用
VC PICTURE控件的使用,如何加载
背景
图片
2009年04月19日 星期日 15:02vc picture控件的分类总结: (一) 非动态显示
图片
(即
图片
先通过资源管理器载入,有一个固定ID) (二) 动态载入
图片
(即只需要在程序
中
指定
图片
的路径即可载入) 为方便说明,我们已经建好一个基于
对话框
的工程,名为Ttest.
对话框
类为CTestDlg (一) vc picture控件非动态载入
图片
. 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张
图片
,ID为IDB_BITMAP2 然后在
对话框
上添加一个picture控件,右键点击打开属性, 将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框, 拉开就会看到所有已经载入好的
图片
, 选择你要的
图片
.运行程序即可看到. 方法2vc picture控件.通过背景图 同样如上,先载入一张
图片
,ID为IDB_BITMAP2 TestDlg.h
中
CBrush m_brBk;//在public
中
定义 TestDlg.cpp
中
在初始化函数OnInitDialog()
中
加入: BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP2); m_brBk.CreatePatternBrush(&bmp); bmp.DeleteObject(); return TRUE; // return TRUE unless you set the focus to a control } 在打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下: HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd == this) { return m_brBk; } return hbr; } (二) vc picture控件动态载入
图片
. 方法3 图像控件(本例用KoDak 图像编辑控件) 1. 首先应该保证系统
中
有这个控件。注意,它不能单独使用,必须和其他几个控件(特别是Imgcmn.dll)一同使用。如果没有,从别的机器上copy过来即可。这几个文件是Imgadmin.ocx,Imgcmn.dll,Imgedit.ocx,Imgscan.ocx,Imgshl.dll,Imgthumb.ocx,Imgutil.dll,把它们copy到windows\system目录下,然后用regsvr32.exe将它们分别注册。 2. 打开工程,进入资源管理器,在
对话框
上单击右键,单击Insert Activex control… 选择Kodak图象编辑控件,大小任意。 3. 在
对话框
上选
中
该控件,为其添加变量:m_ctrlPicture。。 4. 在BOOL CTestDlg::OnInitDialog()添加如下: BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); m_ctrlPicture.SetImage("aa.
jpg
"); //保证图像在工程目录下,也可以写绝对路径 m_ctrlPicture.Display(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } 编译运行就OK了,此种方法的好处就是可能针对多种图像格式. 方法4 vc picture控件通过CBitmap,HBITMAP,直接用OnPaint()绘制 首先在CTestDlg类
中
声明一个变量: CBitmap m_bmp; 然后我们在
对话框
中
加入一个picture 标签,名为IDC_STATIC1 然后: BOOL CDisplayPic::OnInitDialog() { CDialog::OnInitDialog(); if( m_bmp.m_hObject != NULL )//判断 m_bmp.DeleteObject(); /////////载入
图片
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), "c:\\aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE); if( hbmp == NULL ) return FALSE; ///////////////////////该断程序用来取得加载的BMP的信息//////////////////////// m_bmp.Attach( hbmp ); DIBSECTION ds; BITMAPINFOHEADER &bminfo = ds.dsBmih; m_bmp.GetObject( sizeof(ds), &ds ); int cx=bminfo.biWidth; //得到图像宽度 int cy=bminfo.biHeight; //得到图像高度 /////////////////// //////////////////////////////// /////////////得到了图像的宽度和高度后,我们就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张
图片
/////////////////////////// CRect rect; GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect); ScreenToClient(&rect); GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
图片
加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息 void CDisplayPic::OnPaint() { //////////////以下三种情况任选一种会是不同效果(只能一种存在)/////////// //CPaintDC dc(this); //若用此句,得到的是
对话框
的DC,
图片
将被绘制在
对话框
上. CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上 // CDC dc; // dc.m_hDC=::GetDC(NULL); //若用此两句,得到的是屏幕的DC,
图片
将被绘制在屏幕上/////////////////////////////////////////////////////// CRect rcclient; GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient); CDC memdc; memdc.CreateCompatibleDC(&dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height()); memdc.SelectObject( &bitmap ); CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); CDC maskdc; maskdc.CreateCompatibleDC(&dc); CBitmap maskbitmap; maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL); maskdc.SelectObject( &maskbitmap ); maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc, rcclient.left, rcclient.top, SRCCOPY); CBrush brush; brush.CreatePatternBrush(&m_bmp); dc.FillRect(rcclient, &brush); dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &memdc, rcclient.left, rcclient.top,SRCPAINT); brush.DeleteObject(); // Do not call CDialog::OnPaint() for painting messages }
V
C++
学习-外观篇(
对话框
设置
背景
图片
)
VS2013,为
对话框
添加背景图 方法一:ONPAINT() 1.资源视图
中
导入bmp图(
jpg
好像不行) 右键添加资源,导入
图片
2.在onpaint
中
添加代码 void CFASTENERDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGN...
V
C++
MFC
对话框
程序
中
给对话添加
背景
图片
VC
对话框
怎么显示
背景
图片
呢。在MFC
中
实现
背景
图片
,不像C#应用程序那么简单。今天就和朋友们说说如何在VC界面
中
设置
背景
图片
^_^ 工具/原料 Visual
C++
2010 方法一:用Picture控件 1 新建MFC应用程序 2 在应用程序
中
...
界面
15,980
社区成员
115,900
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章