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

            小步慢跑

             

            UpdateLayeredWindow

             

            1.  在對話框初始化中

            	m_hModule = LoadLibrary("User32.DLL");
            	m_pUpdateLayeredWindow = (functionpointer)GetProcAddress(m_hModule, "UpdateLayeredWindow");
            
            	const DWORD WS_EX_LAYERED = 0x00080000;
            	DWORD dwExStyle  = GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE|WS_EX_TRANSPARENT);
            	SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,dwExStyle|WS_EX_LAYERED);
            
            	UpdateView();

             

            2. 實現(xiàn) UpdateView方法


             

            void UpdateView()
            {
                CRect rc;
                GetWindowRect(rc);
                POINT ptDest ={rc.left,rc.top};
                SIZE  sizeDest = {rc.Width(),rc.Height()};
                HDC hDC         = ::GetDC(GetSafeHwnd());
                HDC hMemDc      = ::CreateCompatibleDC(hDC);
                BITMAPINFO bmpinfo;
                bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
                bmpinfo.bmiHeader.biWidth = rc.Width();
                bmpinfo.bmiHeader.biHeight = rc.Height();
                bmpinfo.bmiHeader.biPlanes = 1;
                bmpinfo.bmiHeader.biBitCount = 32;//32bpp
                bmpinfo.bmiHeader.biCompression = BI_RGB;
                void* pBits = NULL;
                HBITMAP hBitmap = CreateDIBSection(hDC,&bmpinfo,DIB_RGB_COLORS,&pBits,NULL,0);
                HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDc,hBitmap);
              

               DrawSurface(hMemDc);
              

                BLENDFUNCTION blf;
                blf.BlendOp = AC_SRC_OVER;
                blf.BlendFlags = 0;
                blf.SourceConstantAlpha = 255;
                blf.AlphaFormat = 1;//AC_SRC_ALPHA;
                POINT ptSrc = {0,0};
                m_pUpdateLayeredWindow(GetSafeHwnd(),hDC,&ptDest,&sizeDest,hMemDc,&ptSrc,0,&blf,2/*ULW_ALPHA*/);
                ::SelectObject(hMemDc,hOldBitmap);
                ::DeleteObject(hBitmap);
                DeleteDC(hMemDc);
                ::ReleaseDC(GetSafeHwnd(),hDC);
            }

            3   在 DrawSurface 方法中實現(xiàn)所有的繪制邏輯。

                CRect rcClient;
                GetClientRect(rcClient);

                SolidBrush br(Color(25,255,0,0));

                 Graphics g(hDC);
                 g.FillRectangle(&br,rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height());

            4 每當(dāng)想要更新的時候 ,調(diào)用 UpdateView 方法.

             

            注意: 1. GDI 不支持 alpha通道,所以所有的顏色的alpha通道值都是0(代表全透明),所以要使用GDIPlus繪制,或自己寫DiBsection設(shè)置Alpha通道的值。

                      2. 窗口全透明的位置默認(rèn)鼠標(biāo)穿透。

                      3. 如果非全透明的位置想實現(xiàn)鼠標(biāo)穿透,相應(yīng)WM_NCHITTEST消息 ,返回 HTTRANSPARENT

            posted on 2012-12-03 10:38 zaccheo 閱讀(3791) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類(23)

            隨筆檔案(26)

            文章分類(1)

            文章檔案(1)

            csdn

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久人人爽人人爽人人AV东京热 | 久久久不卡国产精品一区二区 | 国内精品久久久久影院薰衣草| 99精品久久久久久久婷婷| 久久久精品国产sm调教网站 | 久久人人爽人人爽人人爽| 无码专区久久综合久中文字幕 | AV色综合久久天堂AV色综合在| 91久久香蕉国产熟女线看| 综合久久一区二区三区| 久久精品视频网| 久久精品国产99国产精品亚洲| 久久免费高清视频| 九九久久自然熟的香蕉图片| 亚洲欧美国产精品专区久久| 日韩亚洲欧美久久久www综合网| 亚洲AV无码成人网站久久精品大| 久久精品亚洲欧美日韩久久| 少妇人妻88久久中文字幕| 久久精品国产乱子伦| 国产精品久久久久蜜芽| 国内精品久久久久久麻豆| 精品久久久久久中文字幕| 国产综合久久久久久鬼色| 久久人人爽人人人人爽AV| 亚洲精品WWW久久久久久| 欧美久久天天综合香蕉伊| 国产精品成人99久久久久 | 99久久久国产精品免费无卡顿 | 性高湖久久久久久久久AAAAA| 国产成人香蕉久久久久| 久久91精品综合国产首页| 国产—久久香蕉国产线看观看| 亚洲狠狠久久综合一区77777| 久久青青草原综合伊人| 99久久精品午夜一区二区| 国产精品美女久久久久久2018| 久久av无码专区亚洲av桃花岛| 无码人妻久久久一区二区三区 | 久久99久久99精品免视看动漫 | 一本久久a久久精品综合夜夜|