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

萬星星@豌豆莢 歡迎加入我們
一個吃軟飯的男人!!!!!我只想寫程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0

存在的必是合理的,都值得我們學習。學什么不重要,重要的是有一技之長。
如果你認為MFC垃圾請不要繼續看。
如果你認為文檔視圖結構丑陋請不要繼續看。
如果你認為ATL過時了請不要繼續看。

庖丁解牛的藝術
庖丁為文惠君解牛,分解牛體時手接觸的地方,肩靠著的地方,腳踩踏的地方,膝抵住的地方,都發出砉砉的聲響,快速進刀時刷刷的聲音,無不像美妙的音樂旋律,符合桑林舞曲的節奏,又合于經首樂曲的樂律。庖丁的解釋是:我所喜好的是摸索事物的規律,比起一般的技術、技巧又進了一層。我開始分解牛體的時候,所看見的沒有不是一頭整牛的。幾年之后,就不曾再看到整體的牛了。現在,我只用心神去接觸而不必用眼睛去觀察,眼睛的官能似乎停了下來而精神世界還在不停地運行。最喜歡這句:以無厚入有間,恢恢乎其于游刃必有余地矣。

我的MFC經歷
我的大學專業是軟件工程,作為一個C++開發人員學習MFC是必然的。記得上大二的時候,有些課程和大三師哥們一起上,總能看到牛師哥們手里捧一本《深入淺出MFC》,羨慕不已。當時數據結構實習,人家都基于Windows做,而自己只能在Console下做,十分尷尬,覺得自己很落后,現在想來有點可笑。
這里要說的是MFC是對WIN32 API的封裝,為什么不從WIN32 API開始學呢?很多人是這樣做,也見過一些人在這上面氣餒而放棄C++轉向Java。我是從MFC開始的,當我對MFC比較熟悉的時候,我心里就明白MFC是如何對WIN32 API封裝的,進入MFC源碼,里面全部調用的API,自然明白了API的功能及用法。學習編程就得由簡到難,對MFC深入后,WIN32 API自然淺出。
我是大三開始接觸MFC的,當時感覺是MFC是一個龐然大物,拿一些快速進階之類的書籍東拼西湊學一點技巧,三個月后也沒有入門。VC6向導生成的一個多文檔程序代碼比起自己寫過的數據結構代碼是一個天文數字,不知道如何下手??粗赃吽奚岱怯嬎銠C專業的學生用VB就能寫一個時鐘,羨慕啊,自卑啊,氣憤之下開始VB的學習。然而倔強的心里告訴自己怎么可以這樣認輸呢?在一個星期過去后,我重新開始了MFC的學習。MFC向導可以生成三種應用工程:對話框、單文檔、多文檔。默認的是微軟最為驕傲的多文檔,但是這個確實害人不淺。其他編程開發環境沒有文檔視圖的概念,都是窗體、Form,這個結構要簡單不少,可以快速入門,找到快感,不至于氣餒。我當時就是從對話框開始學習的,向導生成的類比較簡單,一個App,一個Dlg。我開始在對話框上學習各種控件,Button、Edit、ListCtrl等,終于算是Windows編程了。大概用了半年時間學習對話框,在對話框編程有一定了解的時候可以用它來做一些數據庫、Socket編程,經典例子就是管理系統和聊天工具。對MFC有一些了解后開始學習文檔視圖模型,開始從單文檔入手,然后進入到多文檔。文檔視圖主要是開發企業應用,要考慮菜單、工具欄、??織l、文檔數據到視圖更新以及鼠標鍵盤交互等,考慮很多消息事件處理,掌握起來確實要花不少功夫。
大四我進入公司實習,當時以為對MFC很了解,覺得自己很了不起。當遇到稍微深一點的問題,斷點進入MFC源碼的時候便手無所措,原來自己只是對MFC的輪廓有一點了解,并不解其內部規律。當時受了打擊,這使我靜下心來深入研究MFC,再一次看《深入淺出MFC》、操練各種類型應用程序、分類學習WIN32 API、看MFC源碼(不敢說很仔細看,至少比較細的瀏覽一邊),當我可以進入到MFC源碼調試的時候,我很高興,因為我進步了。當我接觸到BCG庫和XTREME庫的時候,我都要進入它的源代碼看,發現里面很多代碼和MFC源碼一樣,我想寫庫的那些人對MFC應該算是很了解。而后我又花了半年時間學習COM,用ATL做項目。
現在每當我拿到一款軟件的時候,我總要用Spy++去看看它的構造,想一下如果是自己能否做出這樣的軟件。軟件設計不是靠蠻力,而是靠技巧,懂得借力省力。軟件好比一頭牛,模塊之間的松耦合就像牛骨頭依靠筋皮肉連接一樣,當你了解其構造后,你看到的是每一個模塊具有什么功能,可以拿來做什么,一個軟件可以有那些模塊拼湊,彼此間如何通信?;只趾跗溆谟稳斜赜杏嗟匾?

文檔視圖的剝離(App平臺 文檔視圖插件)
軟件開發講究分工合作,因為要考慮開發周期及市場。一個企業軟件有幾種業務:三維瀏覽、二維數據編輯、網絡控制。作為企業軟件應該有統一的框架,像.NET集成VB.NET、C#、VC.NET一樣,這樣就需要把框架和文檔視圖分離,在一個框架上,不同開發部門開發不同應用最后集成到統一應用框架。
首先來看看用向導生成的一個多文檔程序,主框架和文檔視圖子框架的聯系其實只有很少代碼:

CMultiDocTemplate * ?pDocTemplate;
pDocTemplate?
= ? new ?CMultiDocTemplate(
?IDR_TESTTYPE,
?RUNTIME_CLASS(CTestDoc),
?RUNTIME_CLASS(CChildFrame),?
// ?custom?MDI?child?frame
?RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);

我們把這一段代碼刪除,并且刪除關聯的CTestDoc、CChildFrame、CTestView類。這時候我們得到一個空框架的應用程序。
很明顯框架需要的只是文檔視圖子框架運行時的類信息,我們的文檔視圖插件需要遵守這樣一個規則,于是我們定義一個插件接口:

interface ?IDocView?:?IUnknown
{
?[id(
1 ),?helpstring( " method?GetDocCls " ),?hidden]?HRESULT?GetDocCls([ out ,?retval] long * ?pDocCls);
?[id(
2 ),?helpstring( " method?GetViewCls " ),?hidden]?HRESULT?GetViewCls([ out ,?retval] long * ?pViewCls);
?[id(
3 ),?helpstring( " method?GetChldFrm " ),?hidden]?HRESULT?GetChldFrm([ out ,?retval] long * ?pChldFrm);

為了插件查找以及管理,需要一個類別,所有支持的插件都屬于這個類別:

BEGIN_CATEGORY_MAP(CManager)
?IMPLEMENTED_CATEGORY(CATID_DocViewCategory)
END_CATEGORY_MAP()

下面就可以實現文檔視圖插件了,生產一個ATL項目,添加文檔視圖子框架類,添加一個組件Manager,實現插件接口:

STDMETHODIMP?CManager::GetDocCls( long * ?pDocCls)
{
?
* pDocCls? = ?( long )RUNTIME_CLASS(CMyDocument);
?
return ?S_OK;
}


STDMETHODIMP?CManager::GetViewCls(
long * ?pViewCls)
{
?
* pViewCls? = ?( long )RUNTIME_CLASS(CMyFormView);
?
return ?S_OK;
}


STDMETHODIMP?CManager::GetChldFrm(
long * ?pChldFrm)
{
?
* pChldFrm? = ?( long )RUNTIME_CLASS(CChildFrame);
?
return ?S_OK;
}


這樣就主框架就可以遍歷組件類別下面所有文檔視圖插件,通過

pDocTemplate? = ? new ?CMultiDocTemplate(
??IDR_MAINFRAME,
??(CRuntimeClass
* )nDocCls,
??(CRuntimeClass
* )nChldFrm,
??(CRuntimeClass
* )nViewCls);
AddDocTemplate(pDocTemplate);

加入到主框架。
這里有一個問題:一個應用可能有20種文檔視圖,是不是應用一起來就查找所有支持插件并加載呢?從內存消耗和人的習慣思考來看都不應該是這樣的。可能一個用戶打開應用只編輯一類文檔,這時候其他19種文檔就不需要加載。這就需要一點技巧來處理這類問題。
簡單做法可以這樣處理:應用框架加載的時候便利所有插件,這時候不加載。當新建文件的時候查找新建的插件是否已經加載,如果沒有加載則先加載。打開文件的時候做類似操作。有如下三個函數完成操作:

// ?遍歷所有文檔插件,不加載
void ?EnumAllDocViews();
// ?根據插件CLSID加載文檔視圖插件
CMultiDocTemplate * ?AddDocViewByCLSID(CLSID?clsid);
// ?根據CLSID查找插件是否加載
DocMgrData?FindDocByCLSID(CLSID?clsid);

插件管理之插件類別:

打開界面:

打開文檔:

代碼下載。里面有說明文件。

posted on 2006-07-06 10:06 萬連文 閱讀(2479) 評論(11)  編輯 收藏 引用 所屬分類: MFC

FeedBack:
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 11:48 | LOGOS
呵呵.你的內容不錯.
不過我發現留言比較少,所以給你留一個,希望你能堅持寫blog,不然我就沒得欣賞了.  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 12:47 | 問題男
以下評論針對文中的編程感悟

感悟給自己看,沒什么意義,給別人看,沒什么幫助

在此推薦一網上流傳的短文,《Teach Yourself Programming in Ten Years》(http://www.norvig.com/21-days.html),簡單深刻的描述了如何提高編程技能

除了保持興趣地學習至少十年,就沒有其他路可走了,中間的過程、方法真的沒有那么重要,積累到一定階段,自然會感覺越來越通透

btw:

在下絕非信口開河,95-06,今年已是我學習編程的第十一個年頭了,所以,對此我感受頗深

另,文中提到mfc和win32sdk先學what的問題,我個人與樓主看法不同,我認為如果條件允許,先難后易比先易后難要好得多,想當初(95年),為了修改游戲的代碼(實現無敵狀)自學了x86匯編(也是我學的第一門編程語言),之后學習c時,指針什么的自然就融會貫通了,除了編程語言,對操作系統的理解也能上升到n個層次(如果學習硬件知識則更上層樓)

看樓主字里行間透露出很高的水平,故有此冒昧進言,不當之處,還望一笑了之  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 13:30 | 萬連文
部分贊成你的觀點。
我想我十年后能看到現在的思想,所以留下,凡走過必留下足跡。
由于我本身是2002年才才開始接觸計算機,第一門語言是C++,由于沒有C的基礎幾乎廢了。我2002年過年沒有回家一個人在學校寢室學習C語言,還記得當時手凍的發腫。就是那之后我才可以在編程上穩住。中國有中庸思想,學習也應該如此,選擇中間然后上下開壑。我們在不同年代開始接觸計算機,不敢想象現在的人從匯編接觸編程會是什么結果,牛人除外。我沒有學過匯編,也曾經拿起來過,在VC6里面嘗一下,但是由于工作性質緣由始終沒有仔細研究。
ps:謝謝你也留下你的學習感悟,畢竟你是編程前輩。  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 18:01 | flyingxu
這篇文章,是為了強調doc view與frame的剝離,還是plugin的應用?
doc view與frame的剝離我在實際應用中,看不到太大的優勢,除了加載時資源的占用
plugin在mfc中的應用,我倒是蠻感興趣的
  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 18:12 | 萬連文
未完待續,用plugin技術剝離MFC框架,用APC集成剝離體到VBA,實現MFC ATL VBA結合。  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-06 18:34 | 旁觀者
我發現你的文字表達能力很不錯,希望你能夠有精彩的延續,同時也希望你能夠日漸成熟,軟件開發需要有持久的耐力與迎接挑戰的信心,每天我都會關注你的進展。另外,一定要處理好工作、生活與愛情之間的關系……  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-09 01:46 | flyingxu
@萬連文
那我慢慢等,等你寫完
隨便問一下,你對插件/主程序之間的消息映射/響應有沒有什么要寫的?我比較疑惑  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-09 11:25 | 萬連文
主框架所起的作用無外乎提供事件、命令、通知消息,只要按照Window消息機制制定接口就可以了,框架管理插件,通過接口傳遞消息驅動插件。  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2006-07-12 16:51 | Arcrest
文學表達很好,
侯捷的書籍受歡迎的原因除了深入淺處的分析外,就是文筆
樓主的技術鉆研精神也值得偶們學習
  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離[未登錄]
2008-03-10 10:28 | 風語者
感謝提供源碼可以研究  回復  更多評論
  
# re: 庖丁解MFC--(一)文檔視圖與應用框架剝離
2008-10-16 11:21 | rex
確實很不錯!向你多多學習1  回復  更多評論
  
簡歷下載
聯系我

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(66)

隨筆分類

隨筆檔案

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品视频你懂的| 在线色欧美三级视频| 亚洲色图综合久久| 亚洲精品在线观看视频| 欧美精品日日鲁夜夜添| 亚洲三级影片| 日韩一级裸体免费视频| 欧美日本高清视频| 午夜精品三级视频福利| 午夜天堂精品久久久久 | 巨胸喷奶水www久久久免费动漫| 欧美一二三视频| 激情久久婷婷| 亚洲精品一区二| 欧美午夜美女看片| 久久精品国产综合| 免费观看在线综合| 中文精品视频一区二区在线观看| 一区二区日本视频| 国产一区二区三区不卡在线观看| 欧美成人黄色小视频| 欧美巨乳在线| 久久精品观看| 免费日韩精品中文字幕视频在线| 中国成人在线视频| 欧美制服第一页| 99国产精品99久久久久久| 一区二区三区四区蜜桃| 激情另类综合| 一区二区三区欧美成人| 娇妻被交换粗又大又硬视频欧美| 亚洲区国产区| 国产在线观看91精品一区| 最新国产拍偷乱拍精品| 国产日韩一区二区三区| 亚洲乱码国产乱码精品精可以看| 国产亚洲欧美日韩精品| 亚洲精品日韩一| 极品日韩久久| 亚洲在线国产日韩欧美| 亚洲精品国产系列| 久久成人在线| 中文精品一区二区三区| 玖玖在线精品| 久久精品国产亚洲aⅴ| 欧美日韩国产成人在线| 久久综合狠狠综合久久综合88| 欧美日韩国产综合网| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品久久国产三级国电话系列| 免费人成网站在线观看欧美高清| 国产精品一区视频| 亚洲免费观看在线观看| 亚洲欧洲日本专区| 久久久午夜电影| 久久成人18免费网站| 欧美视频在线观看免费| 亚洲国产精品激情在线观看| 一区二区三区我不卡| 午夜精品久久久99热福利| 亚洲一区二区三区在线视频| 免费看成人av| 亚洲国产成人在线视频| 亚洲国产天堂久久国产91| 久久久久成人精品| 久久久久久久久伊人| 国产亚洲一区二区三区在线播放| 亚洲一区二区三区777| 亚洲一区二区少妇| 欧美午夜视频网站| 亚洲一区二区日本| 亚洲欧美日本国产有色| 国产精品久久久一区二区三区| 一区二区高清在线| 亚洲在线播放| 国产日韩欧美一区| 先锋影音久久| 久久综合九色| 亚洲福利视频三区| 欧美成人在线免费视频| 最新国产乱人伦偷精品免费网站| 亚洲精品在线视频| 欧美揉bbbbb揉bbbbb| 亚洲视频久久| 欧美在线一二三区| 精品69视频一区二区三区| 久久久久久久精| 欧美激情一区二区三级高清视频 | 久久综合伊人77777麻豆| 欧美www在线| 日韩午夜在线视频| 欧美日韩亚洲综合一区| 亚洲欧美日韩在线播放| 久久亚洲不卡| 一本久久a久久精品亚洲| 欧美午夜宅男影院| 欧美在线视频一区二区| 欧美激情1区2区3区| 一区二区三区蜜桃网| 国产农村妇女毛片精品久久麻豆| 久久国产精品久久久久久| 欧美一区二视频| 亚洲国产精品成人精品| 欧美精品大片| 先锋影音国产一区| 亚洲国产精品一区二区三区| 午夜精品久久久久久99热软件| 国内精品视频在线播放| 欧美另类专区| 久久精品国产一区二区三区免费看| 亚洲第一视频网站| 久久99伊人| 这里只有精品丝袜| 黑人操亚洲美女惩罚| 欧美久久久久中文字幕| 亚洲欧美激情诱惑| 亚洲精品国产欧美| 久久综合久久综合久久| 亚洲自拍电影| 亚洲欧洲在线一区| 国产亚洲一区二区三区| 欧美日韩一区二区在线观看| 久久久久久久久久久久久9999| 日韩视频在线免费观看| 欧美sm重口味系列视频在线观看| 午夜精品久久久久久久男人的天堂| 在线亚洲一区二区| 国产日韩欧美一二三区| 欧美视频免费看| 免费亚洲电影在线| 久久精品综合网| 欧美一二三区在线观看| 一区二区三区视频在线观看| 亚洲欧洲一区二区三区| 欧美成年人网站| 久久综合精品一区| 久久精品免费| 欧美一区二区精品在线| 亚洲一区在线播放| 亚洲午夜视频| 一区二区欧美在线观看| 亚洲最新视频在线| 亚洲狼人综合| 日韩视频免费观看高清在线视频 | 玖玖精品视频| 久久久久久伊人| 欧美在线亚洲在线| 亚洲欧美日韩成人| 亚洲欧美日本日韩| 亚洲免费网站| 午夜精品美女自拍福到在线| 亚洲一区二区三区四区五区午夜 | 亚洲精品在线观| 亚洲精品乱码| 一本一本久久a久久精品牛牛影视| 亚洲免费观看| 亚洲视频一区| 性高湖久久久久久久久| 久久久久亚洲综合| 玖玖精品视频| 欧美另类极品videosbest最新版本| 欧美sm视频| 欧美理论大片| 国产精品每日更新在线播放网址| 国产精品久久久久久久久搜平片| 国产精品每日更新| 狠狠网亚洲精品| 亚洲激情视频网| 在线亚洲激情| 久久久999国产| 亚洲承认在线| 一区二区不卡在线视频 午夜欧美不卡在 | 一区二区不卡在线视频 午夜欧美不卡在| 亚洲精品久久久久久久久久久| 日韩一级在线观看| 亚洲欧美日韩国产成人精品影院| 久久疯狂做爰流白浆xx| 免费在线看成人av| 亚洲免费成人av| 欧美亚洲一区| 欧美激情视频网站| 国产精品美女视频网站| 狠狠久久五月精品中文字幕| 日韩视频在线永久播放| 欧美在线视频二区| 91久久亚洲| 欧美一级大片在线免费观看| 欧美激情亚洲国产| 国产午夜精品视频免费不卡69堂| 亚洲日韩欧美视频| 欧美在线|欧美| 亚洲欧洲综合另类在线| 欧美一区二区| 欧美日韩在线三区| 在线观看亚洲精品| 欧美一区二区三区精品| 亚洲日韩视频| 久久一二三四| 国产一区欧美| 亚洲午夜精品久久久久久app|