萬星星@豌豆莢 歡迎加入我們
一個吃軟飯的男人!!!!!我只想寫程序####
微博:
http://weibo.com/wanlianwen
C++博客
首頁
新文章
新隨筆
聚合
管理
posts - 172, comments - 1253, trackbacks - 0
BCG Skin插件機制研究過程
首先聲明講的是思考問題的思路,具體skin無非采用hook subclass技術。對于一個事情全局把握,點到為止,個人覺得順藤摸瓜,抓住有效線索對于學習技術很重要。
今天無聊,想起BCG有個Skin Application,于是研究了下。
開始不明白怎么回事,用向導生產了一個Skin,看了下程序結構:
class
?CwlwSkin?:?
public
?CBCGPVisualManager
這個是Skin實現應該了,暫且不管,因為主要想看看機制。
有這些函數:
CTestSkinApp?theApp;
CRuntimeClass
*
?__stdcall?BCGCBProGetSkinClass?(
int
?iIndex)
{
????
switch
?(iIndex)
????
{
????
case
?
0
:
????????
return
?RUNTIME_CLASS?(CwlwSkin);
????
//
?TODO:?return?other?skin?classes?here
????
????}
????
return
?NULL;
}
//
*************************************************************************************
int
?__stdcall?BCGCBProGetSkinCount?()
{
????
return
?
1
;
}
//
*************************************************************************************
LPCTSTR?__stdcall?BCGCBProGetSkinName?(
int
?iIndex)
{
????
switch
?(iIndex)
????
{
????
case
?
0
:
????????
return
?_T(
"
wlwSkin
"
);
????
//
?TODO:?return?other?skin?names?here
????
????}
????
return
?NULL;
}
//
*************************************************************************************
BOOL?__stdcall?BCGCBProGetSkinVersion(
int
&
?iVersionMajor,
int
&
?iVersionMinor)
{
????iVersionMajor?
=
?_BCGCBPRO_VERSION_MAJOR;
????iVersionMinor?
=
?_BCGCBPRO_VERSION_MINOR;
????
return
?TRUE;
}
//
*************************************************************************************
BOOL?__stdcall?BCGCBProIsUNICODE()
{
#ifdef?_UNICODE
????
return
?TRUE;
#else
????
return
?FALSE;
#endif
}
//
*************************************************************************************
BOOL?__stdcall?BCGCBProPreviewSkin?(CDC
*
?pDC,?
int
?iIndex,?CRect?rectPreview)
{
????AFX_MANAGE_STATE(AfxGetStaticModuleState?())
????
switch
?(iIndex)
????
{
????
case
?
0
:
????????
{
????????????CBitmap?bmpPreview;
????????????bmpPreview.LoadBitmap?(IDB_WLWSKIN_PREVIEW);
????????????pDC
->
DrawState?(rectPreview.TopLeft?(),?rectPreview.Size?(),?
????????????????????????????
&
bmpPreview,?DSS_NORMAL);
????????}
????????
return
?TRUE;
????
//
?TODO:?preview?other?skins?here
????
????}
????
return
?FALSE;
}
//
*************************************************************************************
LPCTSTR?__stdcall?BCGCBProGetSkinAuthor?(
int
?
/**/
/*
iIndex
*/
)
{
????
return
?_T(
"
萬連文,?微軟可以么
"
);
}
//
*************************************************************************************
LPCTSTR?__stdcall?BCGCBProGetSkinAuthorURL?(
int
?
/**/
/*
iIndex
*/
)
{
????
return
?_T(
"
m.shnenglu.com/wlwlxj
"
);
}
//
*************************************************************************************
LPCTSTR?__stdcall?BCGCBProGetSkinAuthorMail?(
int
?
/**/
/*
iIndex
*/
)
{
????
return
?_T(
"
mail.google.com
"
);
}
//
*************************************************************************************
int
?__stdcall?BCGCBProGetSkinUpdate?()
{
????
return
?
1
;
}
初一看以為是導出函數(其實確實是,不過導出方法就有點隱晦,下面提到),大概是一個動態庫吧,按照一般Skin都是需要在程序里面初始化,于是匆匆生產一個程序調用。
結果發現根本沒有導出函數聲明,在回去看看原以為導出的函數,shit,上當了,不是導出函數啊???讀一下函數,BCGCBProGetSkinClass?嫌疑最大,但是怎么調用呢??一時間不可能在化大力氣去研究整個BCG吧。
突然想到以前看到過BCG帶的一個例子--BCGPSkins在安裝目錄下,于是打開源碼希望有所發現,里面確實實現了幾種Skin風格,然而它是一個完整的exe,在想想我剛生成的第一個skin是否也是一個exe??于是打開Setting,發現link->output file name:F:\Program Files\Common Files\BCGsoft\Skins\TESTSKIN.dll(我的OS是F:),哦,確實是一個dll,那我怎么改造成exe呢??
思維再次堵住,索性到那個目錄下看看,哦,發現好多Skin啊,放這里做什么??想了一下,是不是BCG有一種機制可以Custom界面成為這些風格啊??于是再次生成一個exe,這一次一步一步細心走向導,終于發現最后一步有一項:Use Skin Manager,勾上,選擇缺省目錄應該就是剛到的那個目錄了吧。
運行,選擇Customize,找一下,發現了一個按鈕Visualization,按一下,oh yeah,就是了,原來是皮膚插件管理機制,通過那幾個函數實現的。
至此研究過程基本結束,大概化1.5小時。又思考了下那些函數到底如何導出,開始還以為是BCG那個頭文件里面預定義導出的,于是搜索了一下BCGCBProGetSkinClass?,發現root.def,這個是向導模版里面的文件,打開發現在這里導出的。
EXPORTS
????BCGCBProGetSkinClass????????@
1
????BCGCBProGetSkinCount????????@
2
????BCGCBProGetSkinName????????????@
3
????BCGCBProGetSkinVersion????????@
4
????BCGCBProPreviewSkin????????????@
5
????BCGCBProGetSkinAuthor????????@
6
????BCGCBProGetSkinAuthorMail????@
7
????BCGCBProGetSkinAuthorURL????@
8
????BCGCBProGetSkinUpdate????????@
9
????BCGCBProIsUNICODE????????????@
10
開心,覺得有一種成就感!
posted on 2006-08-25 00:25
萬連文
閱讀(2064)
評論(0)
編輯
收藏
引用
所屬分類:
MFC
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
VC8中MFC集成ATL組件注冊時注意的一個問題
未來界面應該是這樣的
純技術討論com控件創建過程
界面終于出來一點拉
自己畫的好友列表
用WLWUI庫描述kugoo界面
上班半個月的總結
用MFC實現WebGUI--(CDHtmlDialog)
閑暇時間做的幾個界面
轉孫輝老師《十年MFC經歷認識的Microsoft技術》
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
簡歷下載
聯系我
<
2006年7月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(66)
給我留言
查看公開留言
查看私人留言
隨筆分類
.NET(6)
ACDK(6)
ATL(11)
MFC(29)
richedit(9)
WTL(1)
亂七八糟(61)
模板(8)
小作品(40)
隨筆檔案
2013年3月 (2)
2012年9月 (2)
2012年8月 (2)
2012年7月 (2)
2012年6月 (3)
2012年5月 (2)
2011年9月 (2)
2011年8月 (1)
2011年6月 (2)
2011年5月 (4)
2011年4月 (2)
2011年3月 (2)
2010年12月 (1)
2009年9月 (1)
2009年8月 (2)
2009年7月 (2)
2009年6月 (2)
2009年5月 (1)
2009年4月 (1)
2009年1月 (1)
2008年12月 (5)
2008年11月 (2)
2008年10月 (1)
2008年9月 (7)
2008年8月 (2)
2008年3月 (3)
2008年2月 (2)
2008年1月 (3)
2007年12月 (6)
2007年11月 (1)
2007年10月 (3)
2007年9月 (1)
2007年8月 (5)
2007年7月 (5)
2007年6月 (3)
2007年5月 (5)
2007年4月 (5)
2007年3月 (4)
2007年2月 (2)
2007年1月 (2)
2006年12月 (4)
2006年11月 (8)
2006年10月 (1)
2006年9月 (9)
2006年8月 (7)
2006年7月 (10)
2006年6月 (1)
2006年5月 (2)
2006年4月 (10)
2006年3月 (3)
2006年2月 (3)
2006年1月 (2)
2005年12月 (8)
相冊
new
個人相冊
搜索
最新評論
1.?re: 用MFC實現WebGUI--(CDHtmlDialog)
前輩好,代碼下載之后怎么用啊?我生成的exe打開是空白的頁面,菜單新建不知道建的啥,打開一個html頁面也沒有反應,我的環境是vs2010
--王同林
2.?re: 使MFC變漂亮一:MFC與Flash交互示例
能不能把Flash源文件共享一下,要不然Flash端變量不知道怎么操作
--ddd
3.?re: 甘特圖第一版本發布
你這個附件有什么功能限制?
--xrczld
4.?re: 并行編程--MPI開發入門
我是用的vs+MPICH2,用wmpiexec運行我的exe的時候,不能連接到主機是什么鬼啊。。求回復
--M琨M
5.?re: 基于Chrome開源提取的界面開發框架 三(.3)
豌豆莢非常不錯的應用
--mmocake
閱讀排行榜
1.?基于Chrome開源提取的界面開發框架開篇(32426)
2.?用MFC實現WebGUI--(CDHtmlDialog)(26049)
3.?并行編程--MPI開發入門(19201)
4.?使MFC變漂亮二:MFC與HTML交互示例(17530)
5.?FreeType2研究(16114)
評論排行榜
1.?我把初戀搞丟了(原創)(55)
2.?一個小型繪圖程序(45)
3.?并行編程--MPI開發入門(42)
4.?我得C++學習心得(41)
5.?用MFC實現WebGUI--(CDHtmlDialog)(40)
Copyright ©2025 萬連文 Powered By
博客園
模板提供:
滬江博客
99精品国产免费久久久久久下载
|
人妻精品久久久久中文字幕69
|
一本久久久久久久
|
亚洲综合熟女久久久30p
|
久久超碰97人人做人人爱
|
久久久国产精品网站
|
九九热久久免费视频
|
狠狠色狠狠色综合久久
|
精品无码久久久久久午夜
|
国产精品久久久久久吹潮
|
久久九九青青国产精品
|
思思久久99热免费精品6
|
精品少妇人妻av无码久久
|
久久精品成人一区二区三区
|
久久久无码精品亚洲日韩京东传媒
|
久久无码人妻一区二区三区午夜
|
国产激情久久久久影院小草
|
无遮挡粉嫩小泬久久久久久久
|
久久精品国产亚洲av影院
|
欧美亚洲另类久久综合婷婷
|
精品午夜久久福利大片
|
乱亲女H秽乱长久久久
|
久久国产香蕉视频
|
国产精品久久久久久福利69堂
|
国内精品伊人久久久久妇
|
久久久久亚洲av毛片大
|
久久婷婷国产麻豆91天堂
|
久久久久99精品成人片试看
|
伊人色综合久久天天人守人婷
|
狠狠人妻久久久久久综合
|
99久久99久久
|
久久亚洲精品中文字幕
|
久久精品国产男包
|
2020国产成人久久精品
|
亚洲国产精品无码久久九九
|
国产成人精品白浆久久69
|
日韩人妻无码一区二区三区久久99
|
久久国产视屏
|
久久精品国产亚洲Aⅴ香蕉
|
国产午夜精品久久久久九九
|
国产69精品久久久久99
|