輕鬆製作24位真彩色工具欄

2021-04-12 22:57:56 字數 3621 閱讀 4246

製作

24位真彩色工具欄,網上的資料可真是多啊。我寫這篇文章前就想放棄寫了,雖然我是做出來,可人家早就做出來了啊。

這段時間呢,由於無事可幹,老闆看著我閒著也是閒著,就叫我先做乙個軟體介面出來,抱著學習與工作的心態,就開始做了。看到

acrobat reader 5.1

,就想著我也能不能將工具欄做成和它的一模一樣呢?想法當然是可行的了,做法也是可行的。網上這方面的資料很快我就輕鬆獲取到了(多虧了

google

沒被**)。依葫蘆畫瓢,工具欄做出來了。效果是不錯,不過呢,工具在無效時那圖形真的好醜,醜的勝過東施,一點都不像

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的...