製作
24位真彩色工具欄,網上的資料可真是多啊。我寫這篇文章前就想放棄寫了,雖然我是做出來,可人家早就做出來了啊。
這段時間呢,由於無事可幹,老闆看著我閒著也是閒著,就叫我先做乙個軟體介面出來,抱著學習與工作的心態,就開始做了。看到
acrobat reader 5.1
,就想著我也能不能將工具欄做成和它的一模一樣呢?想法當然是可行的了,做法也是可行的。網上這方面的資料很快我就輕鬆獲取到了(多虧了
沒被**)。依葫蘆畫瓢,工具欄做出來了。效果是不錯,不過呢,工具在無效時那圖形真的好醜,醜的勝過東施,一點都不像
reader5。
怎麼辦?方法還是有的,並且實現起來也真的好容易。唉,要是早知道那麼容易我就不說上面的一小堆話了。j
製作這東西,我們還是分三步走好點。 一、
製作的原理
製作原理,呵呵。其實就是向
*******
物件傳送訊息,當然這訊息不是你定的,是微軟定的。
mfc提供了很多有關工具欄操作的訊息,大概有幾十個吧,看看
msdn
吧,裡面以
tb_開頭的訊息都是針對工具欄的。我要在這裡只用到三個訊息,分別如下:
tb_setimagelist
:設定工具按扭預設狀態下的圖形
wparam = 0;
lparam = (lparam)(himagelist) himlnew;
tb_sethotimagelist
:設定工具按扭取得熱點後的圖形
wparam = 0;
lparam = (lparam)(himagelist) himlnewhot;
tb_setdisabledimagelist
:設定工具按扭無效時的圖形
wparam = 0;
lparam = (lparam)(himagelist) himlnewdisabled;
二、如何傳送訊息
發關訊息
當然還是用
sendmessage
函式。函式定義如下:
lresultsendmessage
(uintmessage,wparamwparam
=0,lparamlparam
=0);
引數的意思就不多解釋了,不懂的話看看
msdn。
三、關於工具欄
工具欄有三種狀態,所以我們要三套。這三套的大小要一致
(當然說的是象素
),工具按扭的位置要一致。有一點要注意的是,在中按扭之間是沒有分隔條的,都是緊緊地連在一起的。你怕出錯?沒事的,這玩意兒都是美工的事,叫美工做去吧。不過照著
res/*******.bmp
檔案來畫還是乙個不錯的選擇。
這三套都得新增到資源檔案中去。我在裡分別把它們命名為
idb_*******_cold(
預設狀態) 、
idb_*******_hot (
取得熱點)、
idb_*******_disable(
無效時)
三步走完了,最後一步就是拷**了。 //
請將以下這段**新增到
cmainframe::oncreate
函式中的最未尾處。
// set up hot bar image lists.
cimagelist
imagelist;
cbitmap
bitmap;
// create and set the normal ******* image list.
bitmap
.loadbitmap
(idb_*******_cold
);
imagelist
.create
(21, 20,
ilc_colorddb
|ilc_mask
, 13, 1);
imagelist
.add
(&bitmap
, rgb(192,192,192)
);//
rgb(192,192,192)
是win98
的按扭顏色
m_wnd*******.
sendmessage
(tb_setimagelist
, 0, (
lparam
)imagelist
.m_himagelist
);
imagelist
.detach
();
bitmap
.detach
();
// create and set the hot ******* image list.
bitmap
.loadbitmap
(idb_*******_hot
);
imagelist
.create
(21, 20,
ilc_colorddb
|ilc_mask
, 13, 1);
imagelist
.add
(&bitmap
, rgb(192,192,192)
);
m_wnd*******
.sendmessage
(tb_sethotimagelist
, 0, (
lparam
)imagelist
.m_himagelist
);
imagelist
.detach
();
bitmap
.detach
();
//create and set the disable ******* image list
bitmap
.loadbitmap
(idb_*******_disable
);
imagelist
.create
(21, 20,
ilc_colorddb
|ilc_mask
, 13, 1);
imagelist
.add
(&bitmap
, rgb(192,192,192)
);
m_wnd*******
.sendmessage
(tb_setdisabledimagelist
, 0, (
lparam
)imagelist
.m_himagelist
);
imagelist
.detach
();
bitmap
.detach
();
24 32位真彩色
24 32位真彩色 1.24位定位 dword pixel addr 3 x y lpitch video buffer pixel addr blue video buffer pixel addr 1 green video buffer pixel addr 2 red 知識回顧 lpitch...
24位真彩色工具欄
以位圖的形式新增到資源裡 然後在初始化函式裡進行下列操作 m createex this,tbstyle flat,ws child ws visible cbrs top 建立工具欄 m load idr 1 載入資源 cimagelist imgs cbitmap bmp bmp.loadbit...
真彩色與偽彩色的概念
真彩色簡介 真彩色是指影象中的每個畫素 值都分成r g b三個基色分量,每個基色分量直接決定其基 色的強度,這樣產生的色彩稱為真彩色。計算機表示顏色也是用二進位制 16位色的髮色總數是65536色,也就是2的16次方 24位色被稱為真彩色,它可以達到人眼分辨的極限,髮色數是1677萬多色,也就是2的...