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

隨筆 - 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>
              久久精品国产一区二区电影 | 欧美亚洲一区二区三区| 亚洲国产天堂久久综合网| 两个人的视频www国产精品| 欧美大胆a视频| 欧美黑人在线观看| 中文亚洲视频在线| 欧美一区二区三区四区夜夜大片 | 久久免费国产精品| 亚洲国产专区校园欧美| 亚洲国产精品第一区二区三区| 欧美国产视频日韩| 香蕉精品999视频一区二区| 久久激情五月激情| 亚洲乱码国产乱码精品精可以看| 一卡二卡3卡四卡高清精品视频| 国产精品你懂的在线欣赏| 久久人人97超碰精品888| 另类av一区二区| 亚洲图片欧美一区| 久久久精品五月天| 亚洲图片欧洲图片日韩av| 久久精品首页| 亚洲一区国产一区| 久热精品在线| 欧美一区二区三区在线| 久久综合九色综合网站| 亚洲欧美视频一区二区三区| 久久免费99精品久久久久久| 亚洲欧美日韩国产中文在线| 久久久久一本一区二区青青蜜月| 一区二区冒白浆视频| 91久久黄色| 久久久久久久久久久久久9999 | 亚洲高清不卡在线| 国产精品老女人精品视频| 欧美a级片网站| 国产精品一区三区| 日韩系列在线| 最新国产乱人伦偷精品免费网站| 亚洲欧美在线一区| 这里只有精品在线播放| 久久一区视频| 久久久噜噜噜久久久| 国产精品一区二区久激情瑜伽| 亚洲精品视频在线播放| 亚洲国产精品久久久| 欧美一区二区三区四区高清| 性欧美大战久久久久久久免费观看| 欧美jjzz| 亚洲国产导航| 日韩亚洲成人av在线| 久久午夜电影| 欧美成人一区二区| 伊人久久婷婷| 美女黄网久久| 欧美国产日韩一二三区| 一区二区三区在线视频观看| 欧美专区日韩专区| 久久国产色av| 国产精品一香蕉国产线看观看| 一区二区三区**美女毛片| 一区二区三区 在线观看视频| 母乳一区在线观看| 欧美激情一区二区三级高清视频| 黄色av成人| 狂野欧美性猛交xxxx巴西| 久热精品视频在线| 影音先锋日韩有码| 久久久精品国产99久久精品芒果| 久久亚洲欧美| 亚洲激情偷拍| 欧美日韩国产色站一区二区三区| 亚洲日本黄色| 亚洲免费网址| 国产综合在线看| 久久综合国产精品| 亚洲黄色精品| 亚洲一区二三| 国产日韩欧美日韩| 久久久久在线| 亚洲国产精品久久久久婷婷884 | 久久久www成人免费精品| 国产视频在线观看一区二区三区| 欧美在线国产精品| 亚洲第一在线综合网站| 一区二区激情小说| 国产色综合久久| 猛男gaygay欧美视频| 亚洲美女区一区| 久久精品一二三区| 亚洲欧洲一二三| 国产精品一页| 免费不卡在线观看| 亚洲一区二区三区涩| 美女成人午夜| 亚洲午夜激情在线| 蜜桃视频一区| 久久久亚洲午夜电影| 亚洲第一色在线| 国产精品久久久久aaaa樱花| 欧美一级艳片视频免费观看| 欧美激情视频在线播放 | 国产亚洲精品美女| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美1级日本1级| 亚洲女同在线| 亚洲国产精品一区| 久久高清一区| 一区二区免费在线观看| 韩日成人av| 国产精品久久久久久av下载红粉 | 亚洲免费福利视频| 黑人一区二区| 国产乱理伦片在线观看夜一区| 亚洲精品视频在线看| 久久精品99国产精品日本| 亚洲黄色高清| 久久影院午夜论| 亚洲欧美激情视频在线观看一区二区三区| 国产资源精品在线观看| 欧美肉体xxxx裸体137大胆| 久久天堂av综合合色| 性做久久久久久久久| 日韩一级片网址| 亚洲成人在线视频播放 | 欧美激情一区二区三区蜜桃视频| 午夜精品久久久久99热蜜桃导演| 亚洲茄子视频| 在线日本成人| 伊人成人在线视频| 国产亚洲一区二区三区在线观看| 国产精品高潮呻吟| 欧美日韩国产专区| 欧美女激情福利| 国产精品中文字幕在线观看| 亚洲午夜精品久久久久久浪潮| 亚洲国产精品123| 欧美va天堂在线| 免费看成人av| 玖玖玖国产精品| 久久精品一区二区三区不卡牛牛| 午夜欧美电影在线观看| 亚洲一区二区三区精品在线| 99亚洲伊人久久精品影院红桃| 亚洲黄一区二区三区| 亚洲大片av| 亚洲欧洲精品一区二区| 91久久在线观看| 亚洲最黄网站| 亚洲一区二区三区影院| 亚洲尤物精选| 午夜久久久久| 久久久91精品国产一区二区三区 | 亚洲欧美制服中文字幕| 亚洲欧美精品在线| 欧美在线视频导航| 久久美女性网| 欧美激情亚洲| 欧美亚洲第一页| 国产香蕉久久精品综合网| 韩国免费一区| 99国产一区| 午夜精品久久久久久久蜜桃app | 亚洲黄色精品| 亚洲欧美国产日韩中文字幕| 久久av一区| 亚洲激情小视频| 亚洲欧美制服另类日韩| 久久综合九色| 欧美日韩日本网| 国产一区日韩二区欧美三区| 最新国产精品拍自在线播放| 亚洲中无吗在线| 蜜桃av噜噜一区| 一本色道久久综合亚洲精品高清| 欧美亚洲视频在线观看| 欧美不卡一卡二卡免费版| 国产精品国产a| 暖暖成人免费视频| 亚洲一区黄色| 久久视频在线免费观看| 欧美gay视频| 亚洲深夜av| 久久综合网色—综合色88| 欧美视频在线观看免费网址| 国产日韩欧美夫妻视频在线观看| 亚洲国产精品久久久久秋霞不卡| 亚洲天堂视频在线观看| 久久香蕉精品| 一区二区欧美亚洲| 麻豆久久久9性大片| 国产精品女主播| 在线欧美不卡| 久久精品国产久精国产爱| 亚洲美女在线观看| 久久中文在线| 国内精品久久久久影院薰衣草| 亚洲一二三区视频在线观看| 猛男gaygay欧美视频|