今天客戶需要在軟體上需要新增乙個自己公司的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函式如下,紅色表示的部分為增...