用VC实现更改应用程序背景和控件颜色

ZDNet软件频道 时间:2002-09-05 作者:黄书强 |  我要评论()
本文关键词:
在一般的VC开发的应用程序中,用MFC自动生成的界面一般比较单调,控件的颜色也比较单一。为了生成我们自己喜欢的界面以及给控件加上自己喜欢的颜色,可以利用VC中相关的函数实现。
在一般的VC开发的应用程序中,用MFC自动生成的界面一般比较单调,控件的颜色也比较单一。为了生成我们自己喜欢的界面以及给控件加上自己喜欢的颜色,可以利用VC中相关的函数实现。

给应用程序加上自己喜欢的背景

更改背景常有两种加载方法,从位图资源中加载背景和直接选择bmp文件。对于文档视图结构和基于对话框的应用程序都对应着相应的WINDOWS消息WM_ERASEBKGND,对该消息进行映射就可以用于背景的修改。只要在OnEraseBkgnd()函数中加上相应的代码,就可以得到满意的效果。

(1):直接从位图资源中加载背景。其方法如下:

BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)

{   

CBitmap  bitmap;

  CRect    client;

  CDC      dc;

            GetClientRect(&client);

BITMAP   hb;

bitmap.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP1为资源中背景位图资源的ID号

dc.CreateCompatibleDC(pDC);

            dc.SelectObject(&bitmap);

bitmap.GetObject(sizeof(hb),&hb);

            pDC->StretchBlt(0,0,client.right-client.left,client.bottom-client.top,

                     &dc,

                            0,0,hb.bmWidth,hb.bmHeight,SRCCOPY);

   return TRUE;

}

(2):从BMP文件中加载背景。其方法如下:调用OnCustomBk()函数.

void CMyDlg::OnCustomBk()

//该函数用于打开背景文件,并读入内存

{

// TODO: Add your control notification handler code here

CString      sfilter="(*.bmp)|*.bmp|";

CFileDialog  openfile(TRUE,0,0,OFN_FILEMUSTEXIST,(LPCTSTR)sfilter,this);

CFile        file;

CString      strPathName;

if(openfile.DoModal()!=IDOK)

       return;

    zxbj=TRUE;

    strPathName=openfile.GetFileName();

HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),

     strPathName,IMAGE_BITMAP,0,0,

     LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);

ASSERT(hBitmap!=NULL);

if(m_pbmp)

   {

     m_pbmp->DeleteObject();

       delete m_pbmp;

     m_pbmp=NULL;

   }

m_pbmp=new CBitmap();

m_pbmp->Attach(hBitmap);

RedrawWindow(NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ERASENOW);

}

RedrawWindow()自动调用OnEraseBkgnd()函数。

 

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134