• <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>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 175949
            • 排名 - 151

            最新評論

            閱讀排行榜

            這個是此換膚方法的基礎函數: 相關資料:Microsoft Knowledge Base Article - Q79212
            ///{{{{  for global function
            ///HOWTO: Drawing Transparent Bitmaps 
            see: Microsoft Knowledge Base Article - Q79212
            // TransparentBlt - Copies a bitmap transparently onto the destination DC
            // hdcDes - Handle to destination device context
            // xDes  - x-coordinate of destination rectangle's upper-left corner
            // yDes  - y-coordinate of destination rectangle's upper-left corner
            // width - Width of destination rectangle
            // height - height of destination rectangle
            // hbmSrc - Handle of the source bitmap
            // xSrc  - x-coordinate of source rectangle's upper-left corner
            // ySrc  - y-coordinate of source rectangle's upper-left corner
            // crTrans  - The transparent color
            // hPal     - Logical palette to be used with bitmap. Can be NULL
            BOOL TransparentBitBlt(HDC hdcDes,
                    int xDes,
                    int yDes,
                    int width,
                    int height,
                    HBITMAP hbmSrc,
                    int xSrc,
                    int ySrc,
                    COLORREF crTrans,
                    HPALETTE hPal
                    )

            {
             ASSERT(hdcDes!=NULL);//if(hdcDes == NULL) return FALSE;
             ASSERT(hbmSrc!=NULL);//if(hbmSrc == NULL) return FALSE;

             CDC dc, memDC, maskDC, tempDC;
             dc.Attach(hdcDes);
             maskDC.CreateCompatibleDC(&dc);
             CBitmap maskBmp;
             
             //add these to store return of SelectObject() calls
             CBitmap *pOldMemBmp = NULL;
             CBitmap *pOldMaskBmp = NULL;
             HBITMAP hOldTempBmp = NULL;
             
             memDC.CreateCompatibleDC(&dc);
             tempDC.CreateCompatibleDC(&dc);
             CBitmap bmpImage;
             bmpImage.CreateCompatibleBitmap(&dc, width, height);
             pOldMemBmp = memDC.SelectObject(&bmpImage);
             
             // Select and realize the palette
             if( dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE && hPal )
             {
              ::SelectPalette(dc, hPal, FALSE);
              dc.RealizePalette();
              
              ::SelectPalette(memDC, hPal, FALSE);
             }
             
             hOldTempBmp = (HBITMAP)::SelectObject(tempDC.m_hDC, hbmSrc);
             
             memDC.BitBlt(0, 0, width, height, &tempDC, xSrc, ySrc, SRCCOPY);
             
             // Create monochrome bitmap for the mask
             maskBmp.CreateBitmap(width, height, 1, 1, NULL);
             pOldMaskBmp = maskDC.SelectObject(&maskBmp);
             memDC.SetBkColor(crTrans);
             
             // Create the mask from the memory DC
             maskDC.BitBlt(0, 0, width, height, &memDC, 0, 0, SRCCOPY);
             
             // Set the background in memDC to black. Using SRCPAINT with black
             // and any other color results in the other color, thus making
             // black the transparent color
             memDC.SetBkColor(RGB(0,0,0));
             memDC.SetTextColor(RGB(255,255,255));
             memDC.BitBlt(0, 0, width, height, &maskDC, 0, 0, SRCAND);
             
             // Set the foreground to black. See comment above.
             dc.SetBkColor(RGB(255,255,255));
             dc.SetTextColor(RGB(0,0,0));
             dc.BitBlt(xDes, yDes, width, height, &maskDC, 0, 0, SRCAND);
             
             // Combine the foreground with the background
             dc.BitBlt(xDes, yDes, width, height, &memDC, 0, 0, SRCPAINT);
             
             
             if (hOldTempBmp)
              ::SelectObject(tempDC.m_hDC, hOldTempBmp);
             if (pOldMaskBmp)
              maskDC.SelectObject(pOldMaskBmp);
             if (pOldMemBmp)
              memDC.SelectObject(pOldMemBmp);
             
             dc.Detach();

             maskBmp.DeleteObject();
             bmpImage.DeleteObject();

             maskDC.DeleteDC();
             memDC.DeleteDC();
             tempDC.DeleteDC();

             pOldMemBmp = NULL;
             pOldMaskBmp = NULL;
             hOldTempBmp = NULL;

             return TRUE;
            }

            ///}}} for global function

             

            另三個很有意思的類,從高手那“盜”來的,呵呵:


            class CWinRect: public CRect
            {
            public:
             CWinRect(HWND hWnd)
             {
              ::GetWindowRect(hWnd, this);
             }
             CWinRect(const CWnd *pWnd)
             {
              ::GetWindowRect(pWnd->GetSafeHwnd(), this);
             }

            };

            class CWinText: public CString
            {
            public:
             CWinText(HWND hWnd)
             {
              (CWnd::FromHandle(hWnd))->GetWindowText(*this); 
             }
             CWinText(const CWnd *pWnd)
             {
              pWnd->GetWindowText(*this);
             }
            };


            class CClientRect: public CRect
            {
            public:
             CClientRect(HWND hWnd)
             {
              ::GetClientRect(hWnd, this);
             }
             CClientRect(CWnd *pWnd)
             {
              ::GetClientRect(pWnd->GetSafeHwnd(), this);
             }
            };

            posted on 2006-12-26 21:43 erran 閱讀(1561) 評論(0)  編輯 收藏 引用 所屬分類: WinCE
            亚洲精品蜜桃久久久久久| 伊人久久大香线蕉av不卡 | 国产一区二区三区久久精品| 久久精品aⅴ无码中文字字幕不卡| 欧美亚洲国产精品久久高清| 精产国品久久一二三产区区别| 亚洲国产精品无码久久久不卡| 狠狠久久亚洲欧美专区| 久久婷婷五月综合成人D啪| 色88久久久久高潮综合影院| 久久九九有精品国产23百花影院| 亚洲精品NV久久久久久久久久| 久久婷婷五月综合国产尤物app | 2021国产精品久久精品| 国产精品久久亚洲不卡动漫| 亚洲国产精品无码久久九九| 精品久久久久香蕉网| 亚洲一区精品伊人久久伊人 | 久久精品国产亚洲AV电影| 久久久久18| 四虎国产精品免费久久久| 久久精品国产99国产精品导航 | 狠狠色丁香久久婷婷综合| 久久精品国产清自在天天线| 国产精品久久久久…| 久久久精品2019免费观看| 久久这里的只有是精品23| 无夜精品久久久久久| 久久无码精品一区二区三区| 99久久婷婷国产一区二区| 九九99精品久久久久久| 久久精品毛片免费观看| 亚洲AV无一区二区三区久久| 国产精品久久久久久五月尺| 午夜精品久久久久| 精品人妻伦九区久久AAA片69| 亚洲国产综合久久天堂| 国产精品久久久久蜜芽| 久久久久波多野结衣高潮| 久久WWW免费人成一看片| 麻豆av久久av盛宴av|