青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 67  文章 - 171  trackbacks - 0
<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

連接資料

最新隨筆

搜索

  •  

最新隨筆

最新評論

void CTransDlg::SetupRegion(CDC *pDC /*對話框窗口DC*/, UINT BackBitmapID /*背景位圖資源ID*/,
UINT MaskBitmapID /*區域處理位圖資源ID*/, COLORREF TransColor = 0x00000000 /*透明顏色值,默認為黑色*/)。
{
 //我們暫時認為MaskBitmapID等同于BackBitmapID。
 //其核心工作是根據MaskBitmapID指示位圖的象素顏色進行區域組合。
 CDC memDC;
 CBitmap cBitmap;
 CBitmap* pOldMemBmp = NULL;
 COLORREF cl;
 CRect cRect;
 UINT x, y;
 CRgn wndRgn, rgnTemp;
 //取得窗口大小
 GetWindowRect(&cRect);
 //背景位圖資源ID
 UINT m_BackBitmapID = BackBitmapID;
 //裝載位圖
 cBitmap.LoadBitmap(MaskBitmapID);
 memDC.CreateCompatibleDC(pDC);
 pOldMemBmp = memDC.SelectObject(&cBitmap);
 //首先創建默認的完整區域為完整的窗口區域
 wndRgn.CreateRectRgn(0, 0, cRect.Width(), cRect.Height());
 //下面的兩層循環為檢查背景位圖象素顏色,進行透明區域處理;
 //當象素顏色為指定的透明值時,即將該點從區域中剪裁掉。
 int m_MaskLeftOff=0,m_MaskTopOff=0;
 int m_MaskRightOff=0,m_MaskBottomOff=0;
 int m_FrameWidth=0,m_CaptionHeight=0;
 for(x= m_FrameWidth+m_MaskLeftOff;x<=cRect.Width() - m_FrameWidth-m_MaskRightOff; x++)
 {
  for(y = m_CaptionHeight+m_MaskTopOff; y<=cRect.Height() - m_FrameWidth-m_MaskBottomOff; y++)
   {
    //取得坐標處象素的顏色值
    cl = memDC.GetPixel(x - m_FrameWidth-m_MaskLeftOff,y - m_CaptionHeight-m_MaskTopOff);
    if(col == TransColor)
    {
     //象素顏色為指定的透明色,創建透明“微區域”
     rgnTemp.CreateRectRgn(x, y, x+1, y+1);
     //“扣像”,從完整的區域中“扣除”透明的“微區域”
     wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);
     //刪除剛創建的透明“微區域”,釋放系統資源
     rgnTemp.DeleteObject();
    }
      }
 }
 if (pOldMemBmp)
  memDC.SelectObject(pOldMemBmp);
 //用設定窗口為指定的區域
 SetWindowRgn((HRGN)wndRgn, TRUE);
}
//即添加WM_ERASEBKGND消息處理過程
OnEraseBkgnd(CDC* pDC)
{
 // TODO: Add your message handler code here and/or call default
 CRect rect;
 CDC memDC;
 CBitmap cBitmap;
 CBitmap* pOldMemBmp = NULL;
 GetWindowRect(&rect);
 //裝載背景位圖
 cBitmap.LoadBitmap(m_BackBitmapID);
 memDC.CreateCompatibleDC(pDC);
 pOldMemBmp = memDC.SelectObject(&cBitmap);
 //將背景位圖復制到窗口客戶區
 pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRC/DownloadFiles\a\2001-10-12\COPY);
 if (pOldMemBmp)
  memDC.SelectObject( pOldMemBmp );
 //刪除系統卻省的OnEraseBkgnd功能
 //return CDialog::OnEraseBkgnd(pDC);
 return TRUE;
}
//接下來是在WM_PAINT的消息處理函數OnPaint()中添加代碼。
//由于當背景位圖比較大時,進行區域處理比較耗時,所以只在啟動時進行一次處理。
//一種方法是OnInitDialog()處理,但這樣會在從啟動程序到窗口出現有相當的延遲,
//易引起程序尚未啟動的誤解。
//再一種方法就是在OnPaint()處理,但為了避免重復處理,可以加上一個判斷標志。
//以下是OnPaint()的代碼,正體為AppWizard生成,粗體為自己添加內容。
//
void CTransDlg::OnPaint()
{
 if (IsIconic()){……}
 else
 {
  if(m_nFirstRun)
  {
   //首次運行標志//修改鼠標光標為等待方式BeginWaitCursor();
   //設置背景區域
   SetupRegion(GetWindowDC(),IDB_BACKBMP, IDB_BACKBMP,0x00FFFFFF /*白色*/);
    //恢復鼠標光標為正常模式
   EndWaitCursor();
   m_nFirstRun = 0;
  }
  CDialog::OnPaint();
 }
}
//剩下的工作就是根據背景位圖的大小來設置對話框窗口的大小和位置
//這可以在OnInitDialog()中通過調用MoveWindow()來實現
//但有些情況下又需要不同的樣式,如有標題欄、邊框等,或者只作局部的處理
//這就是前面兩個成員變量m_FrameWidth和m_CaptionHeight作用
BOOL CTransBmpDlg::OnInitDialog()
{
 // TODO: Add extra initialization here
 m_nFirstRun = 1;
 //數據設置,窗口左上角坐標:
 m_Left=0;
 m_Top=0;
 //背景位圖寬高:
 m_Width=535;
 m_Height=105;
 SetSize(0, 0, 535, 105);
 //蒙板處理區域與窗口邊框的距離
 m_MaskLeftOff=m_MaskTopOff=m_MaskRightOff=m_MaskBottomOff=0;
 //窗口邊框與標題欄象素值
 m_FrameWidth = m_CaptionHeight = 0;
 //取得窗口樣式
 LONG style = ::GetWindowLong(this->m_hWnd, GWL_STYLE);
 //如保留窗口風格樣式,則根據不同的窗口邊框類型
 //選取不同的m_FrameWidth和m_CaptionHeight值,
 //也可以根據處理位置的需要進行付值
 if((style & WS_BORDER) == WS_BORDER)
  m_FrameWidth = ::GetSystemMetrics(SM_CXBORDER);
 if((style & WS_THICKFRAME) == WS_THICKFRAME)
  m_FrameWidth = ::GetSystemMetrics(SM_CXFIXEDFRAME);
 if((style & DS_MODALFRAME) == DS_MODALFRAME)
  m_FrameWidth = ::GetSystemMetrics(SM_CXFIXEDFRAME);
 if((style & WS_CAPTION) == WS_CAPTION)
 {
  m_FrameWidth = ::GetSystemMetrics(SM_CXFIXEDFRAME);
  m_CaptionHeight = ::GetSystemMetrics(SM_CYSMCAPTION);
 }
 m_CaptionHeight += m_FrameWidth * 2;
 //重置窗口的位置和大小
 MoveWindow(m_Left, m_Top, _FrameWidth * 2m_Width + m, m_Height + m_CaptionHeight, TRUE);
 ……return TRUE;
 // return TRUE unless you set the focus to a control
}
//使窗口樣式不僅僅受背景位圖顏色的控制。
//通過指定SetupRegion()的MaskBitmapID 為一個我們稱之為“蒙板”的雙色位圖
posted on 2008-08-04 11:56 cpsprogramer 閱讀(3189) 評論(3)  編輯 收藏 引用 所屬分類: VC++

FeedBack:
# re: vc異形界面代碼整理![未登錄] 2008-08-05 09:22 Louis
不如試用一下layerwindow吧,效果很好,不過對系統版本有一定要求  回復  更多評論
  
# re: vc異形界面代碼整理! 2008-08-10 10:27 葉付海的C++
@Louis
沒這么聽過!  回復  更多評論
  
# re: vc異形界面代碼整理! 2012-03-08 14:36 冬雷
代碼寫的寫的太爛了
crect 沒有width
col沒定義  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              免费日韩av| 91久久极品少妇xxxxⅹ软件| 亚洲欧美国产另类| 一区二区三区导航| 国产精品99久久久久久人| 一本久久青青| 亚洲综合电影一区二区三区| 亚洲欧美中文字幕| 久久精品免费| 欧美xx视频| 欧美日韩不卡| 国产一区二区成人| 亚洲黄色一区| 亚洲一区二区在线播放| 久久国产精品一区二区| 国产欧美日韩综合一区在线播放 | 久久青青草综合| 免费欧美网站| 亚洲最黄网站| 欧美中在线观看| 久久精品视频在线观看| 性一交一乱一区二区洋洋av| 欧美午夜不卡视频| 亚洲黄网站在线观看| 国内外成人在线| 亚洲高清123| 国产精品99久久久久久有的能看| 亚洲一级影院| 麻豆精品91| 亚洲一区在线看| 欧美不卡激情三级在线观看| 国产精品porn| 亚洲日本va午夜在线电影| 亚洲欧美日韩精品久久亚洲区| 国产精品综合av一区二区国产馆| 黄色国产精品| 久久激情久久| 欧美一区日韩一区| 欧美极品在线观看| 亚洲国产精品一区二区www在线| 亚洲在线视频一区| 一本色道久久| 国产一区二区中文| 欧美一区免费视频| 红桃视频成人| 亚洲国产欧美日韩精品| 欧美1区2区3区| 久久久久久成人| 影院欧美亚洲| 亚洲影院污污.| 国产一区二区三区高清播放| 老司机午夜精品视频在线观看| 亚洲人成在线播放网站岛国| 亚洲高清在线| 一本色道精品久久一区二区三区 | 欧美日本不卡| 亚洲第一精品在线| 久久偷窥视频| 久久精品在线观看| 伊人春色精品| 免费h精品视频在线播放| 欧美在线观看视频一区二区| 国产伦精品一区二区三区| 午夜亚洲精品| 午夜精品久久久久久久白皮肤| 国产精品欧美日韩| 性久久久久久久久久久久| 一本色道久久综合狠狠躁篇怎么玩 | 香蕉成人伊视频在线观看| 99riav1国产精品视频| 欧美日本一区二区高清播放视频| 亚洲毛片一区二区| 99国产一区| 国产精品专区一| 久久久夜精品| 欧美成人精品在线观看| 日韩一区二区高清| 一个人看的www久久| 国产精品国产三级国产专区53| 先锋资源久久| 久久阴道视频| 亚洲视频在线观看网站| 亚洲欧美自拍偷拍| 亚洲国产日韩欧美在线图片| 亚洲电影毛片| 国产精品啊啊啊| 久久久久免费| 欧美精品国产一区| 欧美在线地址| 免费久久精品视频| 亚洲自拍偷拍色片视频| 欧美在线短视频| 亚洲最新视频在线| 欧美一级一区| 99热在这里有精品免费| 亚洲男人第一网站| 91久久国产综合久久| 中文日韩在线| 亚洲激情网址| 羞羞视频在线观看欧美| 亚洲日本精品国产第一区| 亚洲自拍偷拍视频| 亚洲日韩视频| 久久国产一区二区| 国产精品99久久久久久www| 欧美自拍丝袜亚洲| 亚洲婷婷综合色高清在线| 性做久久久久久| 欧美国产一区二区在线观看 | 欧美成人免费全部| 欧美一级免费视频| 欧美精品成人91久久久久久久| 午夜一级久久| 欧美日韩精品免费观看视频| 久久影音先锋| 国产伦精品一区二区三区视频黑人 | 午夜天堂精品久久久久| 欧美精品1区2区| 久久中文字幕一区| 国产欧美日韩专区发布| 99成人精品| 亚洲精品综合久久中文字幕| 久久精品成人欧美大片古装| 亚洲欧美日韩国产一区二区三区 | 久久国产精品久久国产精品| 欧美精品一区二| 亚洲高清在线| 亚洲成人在线视频播放| 香蕉av福利精品导航| 午夜精品久久久久久久久久久| 欧美激情在线| 亚洲激情一区二区三区| 亚洲国产小视频在线观看| 久久精品二区三区| 久久久久久9| 国产一区二区久久精品| 午夜国产不卡在线观看视频| 午夜在线视频观看日韩17c| 国产精品成人va在线观看| 99国产精品自拍| 午夜精品99久久免费| 国产精品久久久爽爽爽麻豆色哟哟| 99国内精品| 欧美一区二粉嫩精品国产一线天| 国产精品久久久久高潮| 亚洲主播在线| 久久夜精品va视频免费观看| 黄色在线一区| 欧美va亚洲va国产综合| 亚洲国产精品久久久久久女王| 日韩一区二区久久| 欧美午夜三级| 久久aⅴ国产紧身牛仔裤| 麻豆久久久9性大片| 91久久精品一区| 欧美视频免费在线| 欧美在线免费视频| 91久久亚洲| 欧美一级黄色录像| 亚洲夫妻自拍| 欧美视频精品在线| 欧美在线视频二区| 亚洲国产综合在线| 亚洲欧美日韩国产一区二区三区 | 欧美视频在线一区二区三区| 亚洲欧洲精品一区二区三区| 麻豆成人在线观看| 欧美国产日韩一区| 亚洲经典视频在线观看| 欧美国产日韩一二三区| 99精品国产一区二区青青牛奶| 午夜精品亚洲| 亚洲福利视频三区| 欧美性大战久久久久| 欧美在线视频一区二区三区| 欧美成人午夜激情视频| 亚洲一区二区三区四区五区午夜| 国产拍揄自揄精品视频麻豆| 女仆av观看一区| 亚洲一二三四久久| 欧美gay视频激情| 午夜精品福利在线| 91久久国产综合久久| 国产精品自拍网站| 欧美精品一区三区| 欧美在线免费观看亚洲| av不卡免费看| 欧美激情视频免费观看| 欧美一区在线看| 99亚洲视频| 亚洲人体影院| 在线精品福利| 国产一区在线观看视频| 欧美日韩专区| 美女尤物久久精品| 欧美影院成年免费版| 中日韩高清电影网| 亚洲黄一区二区三区| 久久免费一区| 久久米奇亚洲|