weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          更改窗口客戶區(qū)的背景

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

          from:

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

          主站蜘蛛池模板: 巨野县| 宁强县| 高台县| 浮山县| 嫩江县| 临夏县| 咸宁市| 山东省| 乌鲁木齐市| 高州市| 鹿泉市| 长沙市| 绵竹市| 灵台县| 库尔勒市| 余姚市| 通河县| 临西县| 瓦房店市| 尚志市| 双辽市| 渭南市| 新乡市| 金沙县| 乾安县| 白河县| 黄梅县| 邢台县| 北碚区| 石林| 长寿区| 浑源县| 惠水县| 高阳县| 邹平县| 洞口县| 墨脱县| 昌黎县| 义马市| 仙桃市| 揭阳市|