如何给对话框添加位图

方法一:  
1、声明成员变量CBrush m_brush; 2、在InitDialog中添加代码:  
CBitmap bmp; 
bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加 m_brush.CreatePatternBrush(&bmp);  
3、重载对话框的OnCtlColor,改最后的返回值:  
return (HBRUSH)m_brush;   
方法二:  
把下面这段代码加进OnPaint()里就行了 CPaintDC dc(this); CBitmap bitmap;  
bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加 CBrush brush;  
brush.CreatePatternBrush(&bitmap);  
CBrush* pOldBrush = dc.SelectObject(&brush);  
dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小  dc.SelectObject(pOldBrush);  
方法三:使用StretchBlt()函数,具有图像自适应窗体功能 CPaintDC dc(this); CBitmap m_bmpBK; 
m_bmpBK.LoadBitmap(IDB_BITMAP1);  
CRect rect; 
GetClientRect(&rect);//获得目标尺寸,即窗口客户区的坐标  
BITMAP bitMap;//位图结构体 
m_bmpBK.GetBitmap(&bitMap);//获得原图片尺寸  
CDC dcMem; //目标DC 
dcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DC 
dcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DC 
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);  
函数参考: 

 

 


 
GetClientRect 
  函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)   函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect); 
  在Visual Studio 2005中,该函数的原型为 void GetWindowRect(LPRECT lpRect) const;   参数: 
  hWnd是程序窗口的句柄。lpRect是一个指标,指向一个RECT型态的 rectangle结构.该结构有四个LONG字段,分别为left,top,right和bottom.GetClientRect将这四个字段设定为窗口显示区域的尺寸。left和top字段通常设定为0。right和bottom字段设定为显示区域的宽度和高度(像素点数)。 StretchBlt 
  函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。  函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);  参数:  hdcDest:指向目标设备环境的句柄。  nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。  nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。  nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。  nHeightDest:指定目标矩形的高度,按逻辑单位表示高茺。  hdcSrc:指向源设备环境的句柄。  nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。  nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。  nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。  nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。  dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考 BitBlt可了解常用的光栅操作码列表。  返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。Windows NT:若想获得更多的错误信息,请调用GetLastError函数。  速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。演示代码:CYourView::OnDraw(CDC* pDC) { 
CDC memDC;//定义一个兼容DC 
memDC.CreateCompatibleDC(pDC);//创建DC CBitmap bmpDraw; 
bmpDraw.LoadBitmap(ID_BMP) //装入DDB 
CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw)  //保存原有DDB,并选入新DDB入DC 
pDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY)  //将源DC中(0,0,20,20) 复制到目的DC(0,0,20,20) pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND); 
//将源DC中(0,0,20,20)和目的DC(20,20,40,40)中区域进行AND操作 memDC.SelectObject(pbmpOld) //选入原DDB }CreateCompatibleDC 
  函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。   函数原型:HDC CreateCompatibleDC(HDC hdc); 

 

 


  参数: 
  hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。   返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL。   Windows NT:若想获得更多错误信息,请调用GetLastError函数。   注释:内存设备上下文环境是仅在内存中存在的设备上下文环境,当内存设备上下文环境被创建时,它的显示界面是标准的一个单色像素宽和一个单色像素高,在一个应用程序可以使用内存设备上下文环境进行绘图操作之前,它必须选择一个高和宽都正确的位图到设备上下文环境中,这可以通过使用CreateCompatibleBitmap函数指定高、宽和色彩组合以满足函数调用的需要。 
  当一个内存设备上下文环境创建时,所有的特性都设为缺省值,内存设备上下文环境作为一个普通的设备上下文环境使用,当然也可以设置这些特性为非缺省值,得到它的特性的当前设置,为它选择画笔,刷子和区域。 
  CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用 GetDeviceCaps函数来确定一个设备是否支持这些操作。 
  当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。 
  ICM:如果通过该函数的hdc参数传送给该函数设备上下文环境(Dc)对于独立颜色管理(ICM)是能用的,则该函数创建的设备上下文环境(Dc)是ICM能用的,资源和目标颜色间隔是在Dc中定义。 
  速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。  
SelectObject   函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。 
  函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);   参数: 
  hdc:设备上下文环境的句柄。 
  hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。 
  位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。 
  画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。   字体:CreateFont, CreateFontIndirect。   笔:CreatePen, CreatePenIndirect。 
  区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。   返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值; 
  SIMPLEREGION:区域由单个矩形组成;COMPLEXREGION:区域由多个矩形组成。NULLREGION:区域为空。 
  如果发生错误并且选择对象不是一个区域,那么返回值为NULL,否则返回GDI_ERROR

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MFC对话框添加CStatic控件,可以按照以下步骤进行: 1. 打开MFC对话框资源文件(一般为*.rc文件)。 2. 在资源编辑器中,从工具箱中拖拽一个Static控件到对话框上。 3. 在属性窗口中,修改控件的ID,比如可以将它命名为IDC_STATIC_IMAGE1。 4. 然后在对话框的类文件中添加一个成员变量来表示这个控件,比如CStatic m_staticImage1。 5. 在OnInitDialog()函数中,使用变量m_staticImage1的SetBitmap()函数来设置控件显示的位。 下面是一个示例代码,可以在对话框中显示两张片: ```cpp // MyDialog.h #pragma once #include "afxwin.h" class CMyDialog : public CDialogEx { public: CMyDialog(CWnd* pParent = NULL); enum { IDD = IDD_MYDIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: DECLARE_MESSAGE_MAP() protected: CStatic m_staticImage1; CStatic m_staticImage2; public: virtual BOOL OnInitDialog(); }; // MyDialog.cpp #include "stdafx.h" #include "MyDialog.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialogEx(CMyDialog::IDD, pParent) { } void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_IMAGE1, m_staticImage1); DDX_Control(pDX, IDC_STATIC_IMAGE2, m_staticImage2); } BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) END_MESSAGE_MAP() BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // Load the bitmaps HBITMAP hBitmap1 = (HBITMAP)LoadImage(NULL, _T("image1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); HBITMAP hBitmap2 = (HBITMAP)LoadImage(NULL, _T("image2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // Set the bitmaps to the static controls m_staticImage1.SetBitmap(hBitmap1); m_staticImage2.SetBitmap(hBitmap2); // Free the bitmaps DeleteObject(hBitmap1); DeleteObject(hBitmap2); return TRUE; } ``` 其中,IDC_STATIC_IMAGE1和IDC_STATIC_IMAGE2是在对话框资源文件中添加的两个Static控件的ID。在OnInitDialog()函数中,我们首先使用LoadImage()函数来加载两张位,然后使用SetBitmap()函数将它们显示到两个Static控件上。最后,我们使用DeleteObject()函数释放位资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值