TransparentBlt函式的使用注意事項

2022-04-07 05:01:54 字數 1091 閱讀 4408

今天客戶需要在軟體上需要新增乙個自己公司的logo,要求使用鏤空透明的形式展現,本來以為很簡單的工作沒想到在mfc下這麼複雜。

logo為bmp格式,白色背景。

以為和在按鈕上顯示控制項差不多,先導入bitmap資源,比如叫idb_bitmap1,按鈕名比如叫idc_button1,

按鈕上貼圖的**:

cbitmap m_bmp;

m_bmp.loadbitmap(idb_bitmap1);

hbitmap hbitmap = (hbitmap)m_bmp.getsafehandle();

((cbutton*)getdlgitem(idc_button1))->setbitmap(hbitmap);

本來以為和delphi裡面的按鈕一樣,設定熟悉為transparent以後會自動根據bmp左上角的畫素顏色作為透明色,結果是讓人失望的。

這個屬性只有在顯示文字時有用。

無奈只好派生cstatic類過載onpaint函式,在函式裡使用transparentblt將白色設定為透明色。

**大致如下:

cpaintdc dc(this);

cdc memdc;

memdc.createcompatibledc(&dc);

bitmap bm;

m_bitmap.getbitmap(&bm);

memdc.selectobject(&m_bitmap);

dc.transparentblt(10, 10, bm.bmwidth, bm.bmheight, &memdc, 0, 0, bm.bmwidth, bm.bmheight, rgb(255, 255, 255));

修改完成後執行程式,居然顯示不出影象,怎麼回事?改為bitblt測試一切正常。經過除錯後發現原來是transparentblt引數的問題。

原來transparentblt的倒數第2,3個引數必須小於實際大小,這個行為和bitblt不同,需要格外注意。修改完成後,執行達到要求。

忘了還有,#pragma comment( lib, "msimg32.lib" )。transparentblt函式需要載入這個類庫。

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...

cvCreateVideoWriter函式使用

cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...

CentimetersToPoints函式出錯

在word開發中,碰到centimeterstopoints函式呼叫出錯,提示未指定的錯誤的問題。解決辦法為修改centimeterstopoint函式 匯入msword.olb後的centimeterstopoint函式如下 修改後的centimeterstopoint函式如下,紅色表示的部分為增...