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

隨筆 - 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 閱讀(3188) 評論(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>
              亚洲福利专区| 亚洲国产精品一区制服丝袜 | 欧美日韩一区二区三区在线看 | 国产精品一区2区| 欧美日韩免费| 国产女主播一区| 韩国一区二区三区美女美女秀| 国产在线视频欧美| 亚洲国产欧美一区二区三区同亚洲| 亚洲国产精品高清久久久| 日韩天堂在线视频| 欧美一区二区三区在线观看| 老司机aⅴ在线精品导航| 91久久精品美女高潮| 亚洲手机视频| 久久婷婷国产麻豆91天堂| 欧美日韩精品一区二区| 国产乱码精品| 日韩视频在线一区| 久久精品天堂| 亚洲日本电影| 欧美伊久线香蕉线新在线| 欧美精品18+| 国产欧美 在线欧美| 亚洲精品一区二区三区蜜桃久| 亚洲一区在线免费| 欧美韩日一区| 欧美在线视频不卡| 欧美视频日韩| 最新精品在线| 久久久久久9| 亚洲视频在线观看免费| 你懂的国产精品| 国产自产精品| 亚洲欧美一区二区三区极速播放| 嫩草成人www欧美| 香蕉精品999视频一区二区| 欧美精品久久天天躁| 激情综合色综合久久综合| 亚洲欧美日本国产专区一区| 亚洲高清在线精品| 久久久久久一区二区三区| 国产毛片一区| 亚洲综合欧美日韩| 999亚洲国产精| 欧美成人亚洲成人| 亚洲欧洲免费视频| 久热精品视频在线| 欧美一级日韩一级| 国产日韩欧美a| 欧美一区2区三区4区公司二百 | 亚洲激情在线观看视频免费| 久久动漫亚洲| 国产综合色一区二区三区| 午夜宅男欧美| 亚洲午夜精品福利| 亚洲欧美日本伦理| 一区二区三区久久网| 久久精品视频免费播放| 国产精品一区二区你懂的| 亚洲欧美日韩国产综合| 亚洲精品色婷婷福利天堂| 欧美激情网站在线观看| aa级大片欧美三级| 99国产精品自拍| 国产精品乱码一区二区三区| 亚洲一区二区在线| 亚洲私人黄色宅男| 国产精品亚洲综合一区在线观看| 亚洲欧美亚洲| 久久se精品一区精品二区| 激情国产一区| 亚洲丰满在线| 欧美日韩色综合| 久久福利影视| 麻豆精品视频在线观看| 亚洲毛片av在线| 亚洲视频一区二区| 很黄很黄激情成人| 欧美激情精品久久久久久黑人| 欧美精品一区在线播放| 亚洲私人黄色宅男| 午夜视频在线观看一区二区三区| 狠狠色综合播放一区二区| 亚洲电影下载| 国产精品视频第一区| 久久野战av| 欧美乱大交xxxxx| 欧美一区二区女人| 免费欧美视频| 午夜精品视频在线观看一区二区| 久久精品官网| 在线中文字幕不卡| 久久高清国产| 亚洲视频在线观看| 久久久久久久久一区二区| 一区二区三区免费网站| 欧美亚洲自偷自偷| 99re66热这里只有精品3直播| 亚洲一区国产一区| 亚洲精品视频一区| 久久精品国内一区二区三区| 9i看片成人免费高清| 久久精品一区四区| 亚洲女性喷水在线观看一区| 麻豆精品网站| 久久精品视频在线看| 欧美日韩一区在线视频| 免费观看亚洲视频大全| 国产精品一区在线观看| 亚洲精选视频在线| 亚洲国产精品第一区二区| 亚洲永久免费精品| 亚洲网友自拍| 欧美激情在线狂野欧美精品| 久久婷婷国产麻豆91天堂| 国产精品网站在线| 夜色激情一区二区| 国产午夜亚洲精品理论片色戒| 狼人天天伊人久久| 欧美日韩国产综合视频在线| 久久久精品国产99久久精品芒果| 欧美日韩国产色视频| 蘑菇福利视频一区播放| 国内成人精品2018免费看| 亚洲一区二区三区四区五区午夜 | 亚洲国产婷婷| 欧美在线欧美在线| 久久精品99久久香蕉国产色戒| 欧美日韩国产一区二区三区| 亚洲国产日韩一区二区| 在线欧美亚洲| 久久久午夜精品| 久久夜色精品国产噜噜av| 国产午夜精品全部视频播放 | 一区精品在线| 久久国产视频网站| 开心色5月久久精品| 激情欧美日韩一区| 美女国产精品| 亚洲黄色成人| 一区二区三区精密机械公司 | 一区二区三区欧美日韩| 宅男精品导航| 国产精品乱人伦一区二区 | 亚洲摸下面视频| 国产精品视频午夜| 香蕉久久夜色| 欧美成人免费播放| 亚洲毛片在线观看.| 欧美日韩视频在线第一区| 亚洲影视在线播放| 免费试看一区| 一区二区三区 在线观看视| 国产精品久久久久7777婷婷| 亚洲欧美日韩国产| 免费在线观看日韩欧美| 日韩特黄影片| 国产欧美日韩激情| 快she精品国产999| 99视频超级精品| 久久国产精品久久国产精品| 亚洲第一页自拍| 欧美日韩另类视频| 欧美一区二区大片| 亚洲黄色尤物视频| 欧美一区二区三区免费观看| 在线精品视频一区二区| 欧美猛交免费看| 欧美在线免费观看| 亚洲人成网站精品片在线观看| 午夜欧美不卡精品aaaaa| 在线观看亚洲a| 国产精品久久看| 欧美成人亚洲成人| 午夜久久影院| 日韩一区二区精品葵司在线| 午夜欧美精品| 中文久久精品| 狠狠噜噜久久| 欧美午夜寂寞影院| 另类酷文…触手系列精品集v1小说| 亚洲精品久久久蜜桃 | 99综合精品| 精品成人国产在线观看男人呻吟| 欧美人在线观看| 久久久久久久综合| 亚洲一区二区免费在线| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲欧美自拍偷拍| 亚洲精品国产精品久久清纯直播| 国产一区二区日韩精品| 国产精品久久久久9999| 欧美精品少妇一区二区三区| 久久人人爽人人| 久久本道综合色狠狠五月| 亚洲一区二区三区在线播放| 日韩午夜激情av| 亚洲人成毛片在线播放| 欧美激情一区二区三区四区 |