weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數據加載中……

          更改窗口客戶區的背景

          看多了簡單的純白色背景客戶區,有沒有想過讓自己的程序中的客戶區變成以位圖(BMP)作為背景呢?那么下面提供的方法可以幫得到你。
          接下來我會用兩種方法來實現將位圖加入顯示到客戶區中。不過首先要說的是,在此之前我們要準備好一張需要加到客戶區的位圖,并把它加入到程序的資源文件中。
          第一種方法以BitBlt來實現。我
          們新建一個單文檔MFC程序,把位圖加入到資源后,我們重點把代碼寫進C××View(此為繼承于CView的類)中的OnDraw函數中。也就是說在窗口重繪時就將圖片加進客戶區。
          我們看源代碼:
          void CLoadBitmapView::OnDraw(CDC* pDC) {
          ?CLoadBitmapDoc* pDoc = GetDocument();
          ?ASSERT_VALID(pDoc);
          ?// TODO: add draw code for native data here?
          ?CBitmap bitmap;
          ?//這里的IDB_BITMAP_TEXT是我的工程中的位圖資源
          ?//將位圖資源加入到CBitmap的對象中
          ?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
          ?//創建一個設備對象
          ?CDC drawDC;
          ?//為指定設備創建信息上下文。這提供了一種不創建設備上下文即獲取有關設備信息的快速方式
          ?drawDC.CreateCompatibleDC(pDC);
          ?//加入位圖對象到DC對象
          ?drawDC.SelectObject(&bitmap);
          ?BITMAP bmpInfo;
          ?//獲取位圖信息
          ?bitmap.GetObject(sizeof(bmpInfo),&bmpInfo);
          ?//指定要執行的光柵操作。光柵操作代碼定義GDC如何合并輸出操作中的顏色,包括當前畫刷、可能的源位圖和目標位圖。
          ?pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&drawDC,0,0,SRCCOPY);
          }
          測試一下,位圖是不是已經加入了客戶區呢?
          第二種方法,是通過畫刷來對客戶區進行填充來實現的。
          我們來看源代碼:
          void CLoadBitmapView::OnDraw(CDC* pDC)
          {
          ?CLoadBitmapDoc* pDoc = GetDocument();
          ?ASSERT_VALID(pDoc);
          ?// TODO: add draw code for native data here
          ?//選入設備
          ?CBitmap bitmap;
          ?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
          ?CBrush bru;
          ?CRgn rgn;
          ?CRect rect;
          ?//獲取客戶區的區域信息
          ?GetClientRect(&rect);
          ?rgn.CreateRectRgnIndirect(&rect);
          ?//位圖指定的模式初始化畫刷
          ?bru.CreatePatternBrush(&bitmap);
          ?//用指定畫刷和指定區域來填充
          ?pDC->FillRgn(&rgn,&bru);
          }
          運行一下,是不是同樣可以實現呢?

          from:

          posted on 2006-11-16 20:03 weidagang2046 閱讀(936) 評論(0)  編輯  收藏 所屬分類: Windows

          主站蜘蛛池模板: 涿鹿县| 屯留县| 加查县| 茂名市| 韶山市| 平阴县| 綦江县| 景宁| 武义县| 赤水市| 杨浦区| 多伦县| 泰兴市| 额济纳旗| 临海市| 垣曲县| 墨竹工卡县| 连平县| 高要市| 云南省| 上饶市| 井陉县| 瑞丽市| 高邮市| 剑河县| 牡丹江市| 乐东| 新蔡县| 中西区| 商城县| 朝阳区| 孟津县| 彭阳县| 宿松县| 栾川县| 通山县| 乐陵市| 高要市| 英山县| 衡阳县| 漳平市|