六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在VC++下完成高彩色工具條

[摘要]郎銳  引言  一些Windows系統自帶程序如資源管理器、Internet Explorer等程序的工具條看上去和其他一些程序的工具條不太一樣,在顏色上要漂亮許多。其實這些程序的工具條上的圖標均為256色,而普通應用程序在工具欄上所顯示圖標的顏色通常只有16色,這就決定了后者在視覺上遠沒有前者美...
郎銳

  引言

  一些Windows系統自帶程序如資源管理器、Internet Explorer等程序的工具條看上去和其他一些程序的工具條不太一樣,在顏色上要漂亮許多。其實這些程序的工具條上的圖標均為256色,而普通應用程序在工具欄上所顯示圖標的顏色通常只有16色,這就決定了后者在視覺上遠沒有前者美觀。由于Windows隨系統而帶的程序也是由開發人員編寫的應用程序,這就說明通過程序編碼可以實現256色甚至更多色彩的圖標在工具欄上的顯示。為此筆者經過摸索,通過MFC編程在應用程序中實現了高彩色工具條。現將實現的主要方法介紹如下,以饗廣大讀者。

  基本設計思路

  在實現高彩色工具條之前,先研究一下普通16色的工具條的實現過程,并從中總結出改進方法。在VC的資源視圖中工具條是一個資源名為IDR_MAINFRAME的Toolbar型資源,并可通過在編輯按鈕上的圖標來完成工具條上圖標的繪制。雖然在資源視圖中工具條上各按鈕的圖標是相互獨立的,但在存儲時并非像圖標一樣保存為ico格式文件而是以bmp位圖格式保存在磁盤上的。該位圖是一個由工具條上的按鈕圖標組成的長條型位圖圖像,中間沒有任何縫隙,在程序運行和在資源視圖對工具條進行編輯時該圖像首先裝載到一個圖像列表中,然后工具欄根據索引依次從圖像列表中將圖像顯示到工具條的各個按鈕上。由于VC限制工具欄上的圖標不能超出16色,因此不論是在資源視圖直接編輯位圖還是用復制粘貼等手段均無法獲取超出256色的工具條(注:用復制粘貼的方法雖然在編輯視圖中可以暫時顯示出256色的圖標,但在程序運行時仍會退化成16色)。

  由于不能在資源視圖中通過編輯Toolbar資源實現16色以上的圖標,加之工具條在顯示時有并不直接從Toolbar獲取圖標而是從圖像列表中讀取,因此可以通過其他一些圖像處理軟件做好類似于工具條的bmp圖像(僅顏色比普通工具條bmp圖像豐富,其余完全一樣),并以位圖的形式加入到程序資源。在使用時,先將其讀取到圖像列表,這樣圖像列表中用于顯示到工具條上的圖標的顏色就可以是256、24位、甚至32位色的了。由于工具條缺省時將直接加載資源名為IDR_MAINFRAME的Toolbar型資源作為圖標的來源,因此還必須通過SetImageList()函數將含有高彩色工具條位圖的圖像列表指定為工具條的圖標來源。

  真彩工具條的實現

  由于工具條的創建是在主框架類的OnCreate()函數中完成的,因此高彩色圖像的裝載和圖像列表的替換工作必須也在此進行。在進行程序設計之前,需要做好各種準備工作,比如高彩色工具條位圖的繪制、高彩色位圖加入到資源等。繪制工具條位圖時,必須控制好圖像的尺寸,如需要有N個邊長為 M的圖標,那么需要繪制的位圖尺寸為長=N*M;寬=M。真彩位圖在加入到工程之后就不能再在VC的資源視圖中進行編輯了。由于這個彩色位圖僅起到美化界面的作用,因此具體對的事件響應等工作還要通過設置原有的Toolbar資源來完成。

  準備工作就緒后,先要把工具條位圖裝載到圖像列表,這樣才能被工具條做獲取。在作這一步時,必須用::LoadImage()函數去加載工具條位圖,并通過宏MAKEINTRESOURCE()來指定具體要加載哪一個資源位圖:

HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_TOOLBAR), //加載IDB_TOOLBAR
IMAGE_BITMAP, //按位圖格式
0,0, // cx,cy
LR_CREATEDIBSECTION LR_LOADMAP3DCOLORS );

LoadImage返回一個位圖句柄HBITMAP,但在MFC下使用CBitmaps會更加方便,可創建一個
CBitmap對象并用Attach()成員函數將它與位圖句柄聯系起來:

CBitmap bm;
bm.Attach(hbm);

  MFC加載工具欄位圖時使用了一個內部函數AfxLoadSysColorBitmap()將缺省顏色設定為16色,因此為了顯示16色以上的圖像,必須在調用圖像列表類CImageList的Create()函數創建圖像列表時對圖像清單做進一步的處理:

m_ilToolBar.Create(32,32,ILC_COLOR8, 4, 4);
m_ilToolBar.Add(&bm,(CBitmap*)NULL);

  這里用ILC_COLOR8標明了創建的圖像列表是256色的,在VC的commctrl.h中對其有定義,并且還提供有其他幾種顏色位深度的預定義:

#define ILC_COLOR4 0x0004 //16色
#define ILC_COLOR8 0x0008 //256色
#define ILC_COLOR16 0x0010 //16位色
#define ILC_COLOR24 0x0018 //24位色
#define ILC_COLOR32 0x0020 //32位色

  如果使用的工具條位圖只有256色(對于多數程序這樣已經足夠),則顯然沒有必要再使用更高級別的位深度定義。最后一步,也是最關鍵的一步,必須通過SetImageList()函數指定工具條m_wndToolBar的圖標來源不再是原來缺省的圖像列表而是含有高彩色位圖的圖像列表m_ilToolBar:

m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

  到此為止就可以通過MFC在自己編寫的程序中實現類似于IE等軟件的漂亮的工具條了。

  小結

  本文通過對作為工具條圖標來源的圖像列表的替換,實現了在普通MFC應用程序中具備了以往只有Windows系統自帶程序才具備的高彩色工具條。較好地美化了程序的界面。本文程序在Windows 98下,由Microsoft Visual C++ 6.0編譯通過。


主站蜘蛛池模板: 我想看一级毛片免费的 | 特片网在线观看 | 最近日本韩国观看 | 在线观看中文字幕第一页 | 午夜高清免费观看视频 | 青青草视频免费在线 | 日韩第一页在线 | 性大特级毛片视频 | 在线视频国产一区 | 日本www在线视频 | 欧美一级三级在线观看 | 天天射天天操天天色 | 性感美女视频黄.免费网站 性感保姆正片 | 亚洲图片 中文字幕 | 四虎国产精品一区二区 | 中文字幕不卡免费高清视频 | 亚洲激情欧美 | 欧美丝袜一区二区 | 日本欧美色 | 四虎免费影院4hu永久免费 | 午夜在线日韩免费精品福利 | 欧美一级淫片免费观看 | 色香蕉在线| 日韩毛片免费在线观看 | 四虎永久免费网站免费观看 | 日韩高清在线播放不卡 | 亚洲国产日韩欧美在线a乱码 | 色欧美综合 | 最新国产福利片在线观看 | 日韩免费视频一区 | 午夜在线观看免费观看大全 | 日本欧美一区二区三区视频 | 欧美一级xxxx俄罗斯一级 | 四虎永久影院永久影库 | 亚洲色大成网站www 亚洲三级中文字幕 | 一本久久精品一区二区 | 日韩欧美在线视频观看 | 日韩伦理片 | 日韩欧美在线综合网 | 天堂网男人 | 天天射天天怕 |