青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

笑看風云淡

寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
posts - 96, comments - 48, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理
引言

  如果能在自己的程序中也具備動態更換皮膚的能力,將使軟件平添幾分亮點從而更易博得用戶的青睞。具筆者了解,當前介紹這種技術的文章資料較少,與其流行程度很不協調,而且現有的少量資料也多是針對對話框進行的,無非是在對話框上覆蓋一層圖片,并通過更換圖片來實現程序的動態換膚。雖然這也是動態換膚的一種,但由于技術過于簡單,本文將著重介紹另外一種動態換膚技術--工具欄的動態換膚技術,這也是IE瀏覽器等軟件所普遍采用的一種換膚技術。

  程序支持動態換膚

  由于換膚功能是對程序框架的擴展,所以相關處理代碼理所當然地要在主框架類中進行。為了使程序能具備換膚的能力,必須首先使程序具備換膚的基本條件。首先可以明確的是:處理對象為普通的工具條,其基類為CToolBar。通過MSDN幫助可以了解到該類及其"近親"的繼承關系如圖所示。通過對這幾個相關類的查閱,可以發現CReBar類比較特殊,它本身并不用于顯示,而主要用于包容其他的工具條,例如,可以通過其成員函數AddBar()將工具條(ToolBar)、對話條(DialogBar)等類型的工具條加入到復合條(ReBar),使工具欄中可以顯示多個工具條。所以可以得出這樣的設計思路:程序框架的工具欄不再直接以工具條來實現,而是以復合條為基礎,并通過CReBar的AddBar()函數將原先的工具條加入其中。皮膚則可以通過設置與CReBar相關的REBARBANDINFO結構而平鋪于復合條之上,由于有工具條覆于其上,因此必須在創建工具條時修改其風格(Style),使其背景為透明,這樣才能透出位于下層的皮膚。

  由于在程序設計時使用了CReBar,在普通程序中實現起來比較麻煩,可以在創建工程時在第四步選中"Internet Explorer ReBars"選項,這樣創建的工具欄將在復合條上添加一個工具條和一個對話條。只需從主框架類的頭文件和實現文件的OnCreate()函數里將對話條CDialogBar的實例對象m_wndDlgBar的聲明部分和部分相關代碼去除即可。

  接下來在工具條創建時需要特別指定TBSTYLE_TRANSPARENT等窗口風格來使其背景透明,并在創建完復合條后通過AddBar()函數將背景透明的工具條添加其中:

m_wndToolBar.CreateEx(this,
TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,
WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP,
CRect(0,0,0,0),AFX_IDW_TOOLBAR)
……
m_wndReBar.AddBar(&m_wndToolBar,
NULL,NULL,
RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP|RBBS_BREAK)

  經過上述幾步處理對程序的主框架作了改造,使其基本具備了動態換膚的必要條件。

  皮膚的裝載與動態更換

  皮膚一般是以外部資源的形式發布,在使用時再由程序動態裝載。皮膚加載到工具欄的過程大致可分兩步:先將皮膚從文件裝載到內存,然后再由內存位圖直接繪制到復合條上去。對于第一步,可用API函數LoadImage將外部文件back.bmp從文件按位圖的格式裝載到內存,返回的句柄可通過強制轉換得到HBITMAP型的位圖句柄m_bmpBack:

m_bmpBack=(HBITMAP)LoadImage(AfxGetInstanceHandle(), //應用程序實例句柄
"back.bmp",IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);

  皮膚裝載到內存后,需要通過對REBARBANDINFO結構進行設置,才能實現皮膚位圖在復合條中的平鋪,該結構有二十多個成員變量,但在此只是用于設置背景位圖的平鋪,因此只需設置fMask為RBBIM_BACKGROUND以指定hbmBack有效,并將前面裝載到內存的位圖句柄m_bmpBack傳遞給該成員變量就完成了對皮膚的裝載與顯示,下面就是這部分實現的詳細代碼:

CReBarCtrl& rc=m_wndReBar.GetReBarCtrl(); //獲取復合條控件指針
REBARBANDINFO info;
memset(&info,0,sizeof(REBARBANDINFO)); //清零
info.cbSize=sizeof(info);
info.fMask=RBBIM_BACKGROUND; //指定hbmBack有效
//如果位圖句柄不可用則仍為銀灰色背景,否則以此位圖作為復合條的背景
info.hbmBack=m_bmpBack!=INVALID_HANDLE_VALUE?m_bmpBack:NULL;
rc.SetBandInfo(0,&info); //進行設置
rc.UpdateWindow(); //更新窗口

  當皮膚已經顯示到工具欄上而對其進行動態更換,則只需要簡單的調用拷貝文件函數將新的皮膚插件以覆蓋的形式復制到back.bmp,并再次調用上述兩步對新的皮膚插件進行重新裝載即可實現對程序的動態皮膚更換??截愇募瘮狄话阌肁PI函數CopyFile()來實現,該函數的前兩個參數分別為源文件路徑和目的文件路徑。最后一個布爾型參數指定文件拷貝的方式,在此需要指定為FALSE,即如果目的文件已存在則對其覆蓋,否則將無法實現對皮膚的更換。

  小結

  本文通過對復合條及CReBar類的使用實現了在VC下對應用程序的動態皮膚更換。CReBar類的功能非常豐富,本文限于篇幅未能做深入的介紹,關于該類的詳細情況請參閱微軟公司的MSDN幫助。本文所述程序在Windows 98下,由Microsoft Visual C++ 6.0編譯通過。


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人a视频| 亚洲大胆人体视频| 一片黄亚洲嫩模| 亚洲欧美日韩在线| 欧美成人综合网站| 亚洲女人天堂av| 最近中文字幕mv在线一区二区三区四区 | 一本色道久久综合亚洲91 | 亚洲欧美乱综合| 亚洲人体影院| 这里只有精品丝袜| 亚洲一区在线播放| 亚洲专区国产精品| 欧美在线播放视频| 蜜桃伊人久久| 亚洲国产精品久久久久| 亚洲黄色小视频| 日韩一级黄色片| 欧美伊久线香蕉线新在线| 美国十次成人| 欧美亚洲第一页| 激情综合色综合久久| 亚洲美女视频| 久久成人亚洲| 亚洲电影第三页| 亚洲欧美清纯在线制服| 蜜桃av一区二区在线观看| 欧美视频在线一区二区三区| 国产精品实拍| 日韩午夜免费| 免费在线观看成人av| 亚洲免费观看在线视频| 久久精品国产一区二区三区| 欧美精品一区二区三| 国产欧美日韩一区| 一区二区三区精品视频| 欧美a级理论片| 亚洲欧美日产图| 欧美久久久久| 在线免费观看成人网| 亚洲一区二区精品| 亚洲国产一区二区精品专区| 午夜免费电影一区在线观看| 欧美午夜激情在线| 久久一二三四| 一本大道久久精品懂色aⅴ| 久久国产精品久久国产精品| 国产精品大片wwwwww| 91久久中文字幕| 免费的成人av| 久久国产成人| 国产亚洲精品v| 欧美制服丝袜| 亚洲综合色激情五月| 国产精品av免费在线观看| 一本久道久久综合婷婷鲸鱼| 亚洲国产精品电影| 欧美99在线视频观看| 亚洲人线精品午夜| 欧美韩国日本一区| 蜜桃久久精品乱码一区二区| 亚洲国产另类久久精品| 欧美国产日韩a欧美在线观看| 午夜在线精品| 国内精品久久久| 免费短视频成人日韩| 久久综合色天天久久综合图片| 永久555www成人免费| 免费亚洲一区| 欧美成人精品h版在线观看| 亚洲国产成人久久| 欧美激情在线狂野欧美精品| 免费观看在线综合| 亚洲全黄一级网站| 亚洲乱码国产乱码精品精98午夜| 欧美精品成人| 亚洲欧美激情在线视频| 在线视频中文亚洲| 国产伦精品一区二区三区四区免费 | 99re66热这里只有精品3直播| 欧美二区视频| 一本色道久久综合一区| 亚洲视频在线观看三级| 国产精品一区二区三区久久久| 久久成人资源| 欧美电影在线免费观看网站| 99re在线精品| 亚洲欧美中文在线视频| 极品日韩久久| 亚洲免费观看高清完整版在线观看| 欧美私人网站| 久久夜色精品国产| 欧美国产精品人人做人人爱| 在线视频精品| 久久精品视频在线| 在线一区亚洲| 久久精品视频免费| 亚洲视频播放| 久久久久国产精品一区三寸| 亚洲毛片播放| 亚洲欧美一区二区精品久久久| 一色屋精品亚洲香蕉网站| 亚洲黄色免费电影| 国产精品资源| 午夜久久tv| 亚洲黄色高清| 亚洲欧美区自拍先锋| 亚洲国产成人精品久久久国产成人一区| 亚洲国产一成人久久精品| 国产视频精品xxxx| 一本综合精品| 亚洲国内高清视频| 亚洲欧美一区二区视频| 亚洲精品小视频在线观看| 亚洲一区二区在线看| 亚洲日本va在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲日本成人女熟在线观看| 新67194成人永久网站| 亚洲一区二区三区在线| 欧美肥婆在线| 久久久精品欧美丰满| 欧美午夜一区二区福利视频| 欧美国产欧美综合| 亚洲风情在线资源站| 久久久久高清| 老牛国产精品一区的观看方式| 国产精品免费一区豆花| 一区二区三区国产在线观看| 亚洲人成精品久久久久| 久久免费视频这里只有精品| 欧美一区二区高清| 国产精品午夜春色av| 亚洲婷婷在线| 欧美一区二区黄| 国产精品视频一区二区高潮| 中文在线资源观看网站视频免费不卡| 亚洲国产日韩美| 欧美69wwwcom| 亚洲电影自拍| 亚洲乱码精品一二三四区日韩在线| 久久人人97超碰精品888| 久久久91精品国产一区二区精品| 国产精品高潮在线| 亚洲一二三区精品| 午夜精品久久久久久久男人的天堂| 欧美乱人伦中文字幕在线| 亚洲国产精品一区二区久| 亚洲精品视频免费观看| 欧美成人午夜激情在线| 亚洲激情在线播放| av成人天堂| 国产精品外国| 久久综合久久美利坚合众国| 欧美激情在线观看| 亚洲一级特黄| 国产乱码精品1区2区3区| 欧美怡红院视频| 欧美激情一区二区三区不卡| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲激情午夜| 亚洲综合精品一区二区| 国产女同一区二区| 99国产成+人+综合+亚洲欧美| 欧美淫片网站| 久久国产乱子精品免费女| 久久人体大胆视频| 在线成人免费观看| 欧美精品97| 亚洲专区一区| 欧美成人自拍| 亚洲欧美日韩精品久久| 国产一区日韩欧美| 欧美日韩成人网| 久久国产福利国产秒拍| 亚洲欧洲一区二区三区久久| 午夜亚洲性色视频| 亚洲高清视频中文字幕| 欧美日韩国产区一| 久久精品国产亚洲5555| 最新成人在线| 久久亚洲一区| 欧美亚洲自偷自偷| 亚洲精品美女久久久久| 国产日韩欧美a| 欧美日韩精品一区| 久久一综合视频| 亚洲一区在线免费| 亚洲欧洲精品一区| 久久最新视频| 久久精品成人欧美大片古装| 亚洲精品日韩久久| 亚洲成人在线视频网站| 国产精品美女久久久浪潮软件 | 欧美国产视频日韩| 久久久国产精彩视频美女艺术照福利 | 欧美另类高清视频在线| 看片网站欧美日韩| 欧美资源在线观看| 午夜精品福利一区二区蜜股av|