vc中怎样把a.bmp中的文件画在CDC上(100分)

  • 主题发起人 主题发起人 一生中最爱
  • 开始时间 开始时间

一生中最爱

Unregistered / Unconfirmed
GUEST, unregistred user!
想看看vc,却连这么简单的问题也搞不通,还是delphi好啊。
但还是希望各位给看看
 
a.bmp是外部文件还是资源中的图片?
 
外部文件
 
转帖:

回复人: kind_li(蓝色程序员) ( ) 信誉:100 2002-11-18 15:36:04 得分:20

//在对话框内显示位图
void CShowBmpInDlgDlg::ShowBmpInDlg()
{
CBitmap hbmp;
HBITMAP hbitmap;

//装载资源 MM.bmp是我的一个文件名,用你的替换
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

hbmp.Attach(hbitmap);

//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);

CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);

CRect lRect;
GetClientRect(&lRect);
lRect.NormalizeRect();

//显示位图
GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

dcMem.SelectObject(&poldBitmap);
}

//在Staic控件内显示位图,IDC_IMAGE是你的Staic控件名
void CShowBmpInDlgDlg::ShowBmpInStaic()
{
CBitmap hbmp;
HBITMAP hbitmap;

//将pStatic指向要显示的地方
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);

//装载资源 MM.bmp是我的一个文件名,用你的替换
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

hbmp.Attach(hbitmap);

//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);

CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);

CRect lRect;
pStaic->GetClientRect(&lRect);
lRect.NormalizeRect();

//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

dcMem.SelectObject(&poldBitmap);
}
 
谢谢zw84611,使用ShowBmpInDlg(),编译通不过
d:/myvc1/h/hDoc.cpp(187) : error C2660: 'GetDC' : function does not take 0 parameters
d:/myvc1/h/hDoc.cpp(191) : error C2660: 'GetClientRect' : function does not take 1 parameters
d:/myvc1/h/hDoc.cpp(195) : error C2660: 'GetDC' : function does not take 0 parameters
d:/myvc1/h/hDoc.cpp(195) : error C2227: left of '->StretchBlt' must point to class/struct/union
delphi用习惯了,对vc感觉太吃力,能帮忙调一下么,再次感谢
 
当碰到不好解决的问题时,可以看看VCL源码,
一般能找到所需要的东西
 
是在vc中,不是vcl.
要是在delphi下,我也就不问了,该死的微软,该死的vc。
这么简单的问题(delphi下),在vc下...
 
注意上面的代码是基于CDialog的,你的程序可能不是对话框类型的,是SDI的?
 
是SDI的,应该怎么办?谢谢
 
我写VC程序时,很多不知道怎么做的东西,就是看了VCL源码,
才知道怎么做的,
虽然语言不同,但思路和调用的API都是差不多的
 
我试了一下是可以的,要加在View中,不能加在Doc中。
 
多人接受答案了。
 
后退
顶部