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

笑看風(fēng)云淡

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

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

  程序支持動態(tài)換膚

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

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

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

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)

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

  皮膚的裝載與動態(tài)更換

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

m_bmpBack=(HBITMAP)LoadImage(AfxGetInstanceHandle(), //應(yīng)用程序?qū)嵗浔?br>"back.bmp",IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);

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

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

  當(dāng)皮膚已經(jīng)顯示到工具欄上而對其進(jìn)行動態(tài)更換,則只需要簡單的調(diào)用拷貝文件函數(shù)將新的皮膚插件以覆蓋的形式復(fù)制到back.bmp,并再次調(diào)用上述兩步對新的皮膚插件進(jìn)行重新裝載即可實現(xiàn)對程序的動態(tài)皮膚更換。拷貝文件函數(shù)一般用API函數(shù)CopyFile()來實現(xiàn),該函數(shù)的前兩個參數(shù)分別為源文件路徑和目的文件路徑。最后一個布爾型參數(shù)指定文件拷貝的方式,在此需要指定為FALSE,即如果目的文件已存在則對其覆蓋,否則將無法實現(xiàn)對皮膚的更換。

  小結(jié)

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            亚洲激情视频网| 欧美国产日韩在线观看| 免费日韩成人| 久久亚洲电影| 欧美成人国产一区二区| 麻豆亚洲精品| 欧美成人精品不卡视频在线观看| 欧美xx69| 日韩亚洲精品在线| 亚洲男人的天堂在线观看| 亚洲欧美卡通另类91av| 久久精品噜噜噜成人av农村| 欧美aaaaaaaa牛牛影院| 欧美日韩亚洲一区二| 国产精品国产自产拍高清av| 国产一区二区三区不卡在线观看 | 免费欧美在线视频| 欧美大片在线影院| 91久久精品日日躁夜夜躁国产| 亚洲国产欧美久久| 在线一区二区三区四区| 国产三级欧美三级日产三级99| 亚洲一区二区三区乱码aⅴ| 香蕉国产精品偷在线观看不卡| 久久九九热免费视频| 亚洲国产一区视频| 亚洲性线免费观看视频成熟| 久久国产精品久久w女人spa| 欧美日本国产精品| 国产综合欧美| 亚洲一区免费网站| 欧美激情第一页xxx| 亚洲午夜性刺激影院| 欧美成人免费视频| 国产亚洲精久久久久久| 亚洲视频网站在线观看| 欧美**人妖| 亚洲欧美区自拍先锋| 欧美国产免费| 亚洲第一区色| 久久av资源网站| 日韩亚洲视频在线| 久久人人爽人人爽| 国产区在线观看成人精品| 亚洲伦理一区| 欧美不卡视频一区| 久久成人av少妇免费| 国产精品露脸自拍| 亚洲天堂男人| 亚洲人体大胆视频| 久热精品视频在线| 激情视频一区二区| 久久精品视频在线| 亚洲欧洲av一区二区三区久久| 欧美三级在线视频| 亚洲视频专区在线| 一本色道**综合亚洲精品蜜桃冫| 欧美成人在线影院| 亚洲精品资源美女情侣酒店| 亚洲第一狼人社区| 欧美精品激情在线观看| 99视频有精品| 99国内精品久久| 国产精品乱子久久久久| 欧美一级二级三级蜜桃| 午夜精品国产更新| 国产一区二区三区最好精华液| 欧美中文在线字幕| 久久不射电影网| 亚洲电影专区| 亚洲精品黄网在线观看| 欧美日韩一区在线视频| 亚洲小说欧美另类社区| 亚洲午夜在线观看视频在线| 国产精品婷婷| 久久久久久久久伊人| 另类春色校园亚洲| 亚洲国产一成人久久精品| 亚洲欧洲精品成人久久奇米网| 欧美片网站免费| 亚洲男人的天堂在线aⅴ视频| 亚洲一卡二卡三卡四卡五卡| 久久午夜精品一区二区| 国产精品无人区| 久久综合伊人77777蜜臀| 久久综合色8888| 夜夜嗨av色综合久久久综合网| 日韩写真视频在线观看| 国产偷自视频区视频一区二区| 你懂的视频一区二区| 欧美日韩中文在线| 久久久久久69| 欧美久久久久免费| 久久九九精品| 欧美精品日韩综合在线| 欧美在线视频观看| 欧美激情亚洲自拍| 久久久国产精品一区二区中文| 乱码第一页成人| 亚洲欧美成人网| 免播放器亚洲| 欧美伊人影院| 欧美日韩国产片| 久久九九国产精品| 欧美日韩在线播| 欧美成人精品在线| 国产精品青草久久| 亚洲国产91| 亚洲香蕉网站| 一区二区欧美日韩视频| 久久久精品免费视频| 亚洲欧美怡红院| 欧美日韩国产区| 亚洲激情亚洲| 在线观看日产精品| 亚洲欧美在线观看| 亚洲一区二区三区午夜| 欧美成人一二三| 美脚丝袜一区二区三区在线观看| 国产精品美女久久久浪潮软件| 亚洲七七久久综合桃花剧情介绍| 伊人夜夜躁av伊人久久| 亚洲欧美国产精品va在线观看| 99精品免费网| 欧美国产日韩二区| 嫩模写真一区二区三区三州| 国内精品视频666| 小黄鸭精品aⅴ导航网站入口| 亚洲女人小视频在线观看| 欧美激情精品久久久久久大尺度 | 久久久久国产精品午夜一区| 欧美视频在线观看视频极品| 亚洲精品国产精品久久清纯直播| 亚洲第一在线综合网站| 久久久精品999| 久色婷婷小香蕉久久| 国内精品久久久| 久久久噜噜噜久久狠狠50岁| 麻豆久久精品| 亚洲精品乱码久久久久久蜜桃91| 欧美顶级少妇做爰| 亚洲三级影片| 亚洲婷婷在线| 国产精品视频一区二区三区| 亚洲男人影院| 久久综合伊人77777| 国产精品99久久久久久白浆小说| 欧美.www| 亚洲毛片在线观看.| 欧美精品www| 99精品国产99久久久久久福利| 宅男噜噜噜66一区二区| 欧美午夜一区二区| 午夜电影亚洲| 欧美a级片网| 一区二区三区精品视频在线观看| 欧美午夜一区二区| 欧美在线播放高清精品| 美乳少妇欧美精品| 亚洲精品视频啊美女在线直播| 欧美激情一区二区| 中文亚洲视频在线| 久久琪琪电影院| 日韩亚洲视频| 国产精品女人久久久久久| 欧美一区二区三区在线视频| 免费视频亚洲| 亚洲网友自拍| 尤物在线精品| 欧美香蕉视频| 久久午夜激情| 亚洲自拍偷拍麻豆| 欧美激情一二三区| 欧美亚洲一区二区在线| 亚洲电影下载| 国产麻豆午夜三级精品| 久久综合亚州| 亚洲欧美在线x视频| 亚洲风情亚aⅴ在线发布| 欧美亚洲视频在线看网址| 亚洲国产中文字幕在线观看| 国产精品欧美日韩| 欧美刺激性大交免费视频| 午夜精品一区二区三区在线播放 | 国产精品成人va在线观看| 久久免费视频网| 亚洲欧美日韩一区二区三区在线观看 | 国产精品色一区二区三区| 免费在线亚洲欧美| 亚洲一区在线直播| 亚洲日韩视频| 欧美福利视频在线| 久久黄色级2电影| 亚洲自拍都市欧美小说| 亚洲精品偷拍| 亚洲欧洲日产国产网站| 精品福利av| 国产欧美一区二区三区另类精品| 欧美区视频在线观看| 久久综合伊人|