给窗口添加背景图的案例

HINSTANCE 介绍

是“句柄型”介绍数据类型。相当于装入到了内存的资源的IDHINSTANCE对应的资源是instance.句柄实际上是一个 无符号长整数

AfxGetInstanceHandle()函数的介绍

HINSTANCE AfxGetInstanceHandle( );

返回值 :代表应用程序的当前实例的HINSTANCE值。如果是从与MFCUSRDLL版本连接的DLL内调用的,则返回代表DLLHINSTANCE值。

说明 :这个函数使你能够获得当前应用程序的实例句柄。AfxGetInstanceHandle总是返回代表你的可执行文件(.EXE)的HINSTANCE值,除非它从与MFCUSRDLL版本连接的DLL内调用的。在这种情况下,它返回的是DLLHINSTANCE

LoadImage()函数的介绍

函数功能:该函数装载图标,光标,或位图。

函数原型:HANDLE LoadImage

HINSTANCE hinst

LPCTSTR lpszName

UINT uType

int cxDesired

int cyDesired

UINT fuLoad

);

参数编辑

1、hinst:处理包含被装载图像模块的实例。若要装载OEM图像,则设此参数值为0

2、lpszName:处理图像装载。如果参数hinstnon-NULL,而且参数fuLoad省略LR_LOADFROMFILE的值时,那么参数lpszName是一个指向保留在hinst模块中装载的图像资源名称,并以NULL为结束符的字符串。

如果参数hinst为空,并且LR_LOADFROMFILE未被指定,那么这个参数低位字一定是被装载的OEM图像标识的。OEM图像标识符是在WINUSER.H头文件中定义的,下面列举出前缀的含义:

OBM_ OEM:位图;OIC_OEM图标;OCR_OEM:光标。

如果参数fuLoad包含LR_LOADFROMFILE值,那么参数lpszName是包含有图像的文件名。

3、uType:指定被装载图像类型。此参数可以为下列值,其含义如下:

IMAGE_BITMAP:装载位图;IMAGE_CURSOR:装载光标;IMAGE_ICON:装载图标。

4、cxDesired:指定图标或光标的宽度,以像素为单位。如果此参数为零并且参数fuLoad值为LR_DEFAULTSIZE,那么函数使用SM_CXICONSM_CXCURSOR系统公制值设定宽度;如果此参数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源宽度。

5、cyDesired:指定图标或光标的高度,以像素为单位。如果此参数为零并且参数fuLoad值为LR_DEFAULTSIZE,那么函数使用SM_CXICONSM_CXCURSOR系统公制值设定高度;如果此参数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源高度。

6、fuLoad:根据下面复合值列表指定函数值,值含义如下:

LR_DEFAULTCOLOR:缺省标志;它不作任何事情。它的含义是“无LR_MONOCHROME”。

LR_CREATEDIBSECTION:当参数uType指定为IMAGE_BITMAP时,使得函数返回一个DIB部分位图,而不是一个兼容的位图。这个标志在装载一个位图,而不是映射它的颜色到显示设备时非常有用。

LR_DEFAULTSIZE:若cxDesiredcyDesired被设为零,使用系统指定的公制值标识光标或图标的宽和高。如果这个参数不被设置且cxDesiredcyDesired被设为零,函数使用实际资源尺寸。如果资源包含多个图像,则使用第一个图像的大小。

LR_LOADFROMFILE:根据参数lpszName的值装载图像。若标记未被给定,lpszName的值为资源名称。

LR_LOADMAP3DCOLORS:查找图像的颜色表并且按下面相应的3D颜色表的灰度进行替换。

颜色替代:Dk Gray RGB128128128COLOR_3DSHADOWGray RGB192192192COLOR_3DFACELt Gray RGB223223223COLOR_3DLIGHT LR_LOADTRANSPARENT;找到图像中的一个像素颜色值并且根据颜色表中系统的缺省颜色值替代其相应接口的值。图像中所有使用这种接口的像素的颜色都变为系统的缺省窗体颜色。此至仅用来申请相应的颜色表。

fuLoad包括LR_LOADTRANSPARENTLR_LOADMAP3DCOLORS两个值,则LRLOADTRANSPARENT优先。但是,颜色表接口由COLOR_3DFACE替代,而不是COLOR_WINDOW

LR_MONOCHROME:装载黑白图。

LR_SHARED:若图像将被多次装载则共享。如果LR_SHARED未被设置,则再向同一个资源第二次调用这个图像时就会再装载一遍这个图像且返回不同的句柄。

不要对不同标准尺寸的图像使用LR_SHARED,装载后可能会有改变,或是从文件中被装载。

返回值:如果函数运行成功,返回值是相关资源的数据的句柄。如果函数运行失败,返回值为NULL。若想获得更多的错误信息,请调用GetLastError函数。


一个单文档程序在view类中重载OnEraseBkgnd()函数即可:

<span style="font-size:18px;">BOOL CdddView::OnEraseBkgnd(CDC* pDC)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值


    CString string("b.bmp"); 
    HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string, 
        IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE); 
    //VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION 
    CPaintDC dc(this); 
    if(hbitmap==NULL) 
        return FALSE; 
    CBitmap bitmap; 
    bitmap.Attach(hbitmap); 
    BITMAP bmp; 
    bitmap.GetBitmap(&bmp); 
    CDC memDc;

    memDc.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = memDc.SelectObject(&bitmap);
    CRect rect;
    GetClientRect(&rect);
    pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
    pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
        &memDc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    memDc.SelectObject(pOldBitmap);
    memDc.DeleteDC();                                      //删除DC
    return TRUE; 
}</span>
  

给工程换一个名字的代码:重载PreCreateWindow()函数即可

<span style="font-size:18px;">BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWndEx::PreCreateWindow(cs) )
        return FALSE;
    // TODO: 在此处通过修改
    //  CREATESTRUCT cs 来修改窗口类或样式
    cs.style &=~FWS_ADDTOTITLE;

    cs.lpszName = _T("XXX系统");

    return TRUE;
}</span>




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值