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

系統理解Win32 API和MFC(上)

系統理解Win32 API和MFC(上)
作者: 溫昱
作者主頁: lcspace.diy.163.com

Win32 API是微軟的操作系統Windows提供給開發人員的編程接口,它決定了我們開發的Windows應用程序的能力。MFC是微軟為開發人員提供的類庫,在某種意義上是對Win32 API的封裝。本文試圖從全局角度對Win32 API和MFC進行理解──給出二者的概念模型。
本文使用UML描述概念模型。Win32 API本不是面向對象的,我用面向對象的觀點去理解它,無非是想表達其全局。
本文參考了MSDN、相關書籍和網上的一些資料,在此一并感謝。

一、Win32 API的概念模型

Win32 API的object有3種:user obj,gdi obj,kernel obj。但是,如果一點不考慮OS本身的支持,就會在有些問題上疑惑,因此,我這里把“operation system負責將中斷封裝成message”加上。

1、user obj、gdi obj、kernel obj、system 4者的關系

由于是kernel obj部分負責將另外3者聯系起來,因此我們在下圖中直接深入到kernel obj部分內部。

從圖中看到,在內存中運行的,除了“負責將中斷封裝成message”的system支持部分,還有另外3類object:kernel obj、user obj和gdi obj,每個obj都有一個句柄handle與之對應。其中,gdi obj建立了待開發的Windows 應用和外部輸出設備的聯系,kernel obj中的file建立了內存和永久存儲設備的聯系。具體說,內存中的file從可以從硬盤上來,如果這個file是可執行文件,它將生成module,module運行起來就是process,process可以包含多條thread,而thread的運行映象最終還是來自于file。thread是kernel obj中最重要的一個,因為消息隊列就是thread擁有的,只有thread才能夠接受message。對gdi obj、urser obj和file的操作,也是發生在thread中的。所以書都講,process至少擁有一個thread。

2、展開“system負責將中斷封裝成message”部分

下面展開“system負責將中斷封裝成message”部分,盡早解除對“message到底是怎么形成的”的困惑。


3、展開“gdi obj”部分

開發人員可以通過gdi obj將app的信息反饋給User。

從圖中看到,gdi obj有8種,其中7種為:bmp,brush,pen,region,font,palette,path。另一種比較特殊的是DC,它可以被理解為一種容器,程序員通過調用SelectPallette()將pallte放入容器,通過調用BeginPath()和EndPath()將path放入容器,其它5種gdi obj,是通過調用SelectObject()放入容器的。DC又具體分為4種,其中DisplayDC就是最常用的用來支持我們“畫Window”的DC。 另外,如果覺得不好理解,請參考composite設計模式。

4、展開user obj部分

4.1 第1次迭代

window在Windows應用開發中占有重要地位。

從圖中看到,window可分為3種:desktop,top-level window,child window。所有window被OS組織成tree,有專門的數據結構來管理。desktop就是樹根,desktop的子節點是top-level window,top-level window的子節點是child window,child window仍然可以有子節點,同樣歸屬于child window。tree數據結構中還記錄了4種重要信息,是4種指針:parent指針、child指針、brother指針、owner指針。這樣,從任何一個window就能很容易地找到其它window了。

好了,暫且得到 window = desktop + topLevel + child 的結論,看看全局先。畢竟,一步到位有時候并不好。
從圖中看到,window確實占有重要地位。從邏輯是講,thread是window的擁有者;但是,所有window一起決定了屏幕看起來是上面樣子,何況點擊任何一個window都會使window得相互覆蓋關系發生變化,對所用window進行統一管理是必須的,所以OS又不得不統一用window tree來管理window,反映復雜的window關系。每個window都必須有一個且只能有一個客戶區,還可能有一個title bar。

 

再來看看CreateWindow()函數的interface spec透露了哪些信息。

 


從圖中看到,CreateWindow()負責為window建立與窗口類的聯系。每個window都有一個窗口類與之對應,而一個窗口類可以對應多個window。窗口類中記錄了窗口函數和菜單等資源信息,而由file生成的module正是窗口函數和資源的老家。

 

4.2 第2次迭代

考察消息種類。

從圖中看到,每個message都是發送給某個window的。注意,msg可由SYS代碼產生,也可以由API函數產生。

進一步考察window,深入topLevel和child。


從圖中看到,OVERLAPPED風格的window是top-level window的一種,而另一種POPUP風格的window從本質上(行為上)是特殊的一種OVERLAPPED風格的window,雖然我們從coding的角度常常不這么認為。

還是不好,因為當我們調用CreateWindow() API函數時,明明感覺CHILD、OVERLAPPED、POPUP是“window style”。我再畫一張圖。

從圖中看到,control必須是CHILD風格的,dialog必須是POPUP風格的,而一般性的window卻可以是任意風格的。

4.3 第3次迭代

總結user obj:


CreateDialog()函數示意:

從圖中看到,CreateDialog()和CreateWindow()最大的區別就是,它有對話框模板支持方便地定制dialog界面。注意,Dialog是特殊的window,窗口類它一定也是有的。

posted on 2008-11-01 15:37 wrh 閱讀(216) 評論(0)  編輯 收藏 引用


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


導航

<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久亚洲精品一区二区三区 | 亚洲第一精品夜夜躁人人爽| 136国产福利精品导航网址应用| 欧美视频专区一二在线观看| 亚洲欧美激情视频| 亚洲伦伦在线| 一区二区三区四区五区视频| 模特精品裸拍一区| 老司机午夜精品视频在线观看| 欧美一级理论性理论a| 在线一区观看| 亚洲视频狠狠| 亚洲永久精品国产| 亚洲欧美日韩综合| 亚洲激情在线视频| 亚洲国产欧美在线| 亚洲精品美女久久7777777| 亚洲国产日韩欧美在线99| 在线观看日产精品| 91久久久久| 日韩网站在线| 国内精品久久久久伊人av| 欧美日韩mp4| 欧美偷拍一区二区| 国产精品欧美日韩一区二区| 国产免费观看久久| 国产主播一区二区| 曰韩精品一区二区| 亚洲美女91| 亚洲欧美日韩一区二区三区在线| 亚洲永久精品国产| 欧美日本不卡高清| 国产精品网站在线观看| 国产一区二区三区视频在线观看 | 美女久久一区| 欧美高清在线视频观看不卡| 久久精品久久99精品久久| 久久天堂成人| 欧美日韩中字| 激情成人av| 亚洲视频欧美视频| 久久精品麻豆| 亚洲人成人99网站| 亚洲午夜未删减在线观看| 久久精品国产99| 欧美精品一区三区| 欧美性猛交视频| 欧美久久精品午夜青青大伊人| 国产精品久久久久久av下载红粉| 国产精品一区在线播放| 亚洲国产婷婷| 欧美一区日本一区韩国一区| 裸体歌舞表演一区二区| 在线性视频日韩欧美| 亚洲乱码视频| 久久综合久久美利坚合众国| 国产精品电影网站| 亚洲国产精品尤物yw在线观看| 亚洲视频在线播放| 老司机精品视频网站| 这里是久久伊人| 欧美电影免费| 激情欧美一区二区三区| 亚洲女人天堂成人av在线| 免费日韩精品中文字幕视频在线| 亚洲色图自拍| 欧美韩国日本综合| 激情欧美日韩| 久久天天躁狠狠躁夜夜av| 一区二区三区精品在线| 久热精品在线| 韩国一区电影| 久久精品亚洲一区| 亚洲视频精选| 欧美日韩亚洲三区| 艳妇臀荡乳欲伦亚洲一区| 美女被久久久| 久久久久www| 欧美视频一区在线| 在线日本成人| 久久综合一区| 久久久亚洲欧洲日产国码αv| 国产精品一区二区三区免费观看| 亚洲视屏一区| 一本久道综合久久精品| 欧美日韩免费区域视频在线观看| 国产麻豆综合| 性欧美超级视频| 亚洲一区二区三区精品在线| 欧美午夜电影一区| 亚洲在线免费观看| 亚洲视频国产视频| 一本一本a久久| 久久综合伊人77777蜜臀| 欧美一级理论性理论a| 国产色视频一区| 久久噜噜噜精品国产亚洲综合| 午夜精品成人在线| 国内成+人亚洲+欧美+综合在线| 久久都是精品| 久久精品亚洲精品| 亚洲国产精品va在线看黑人动漫| 欧美成人情趣视频| 久久综合99re88久久爱| 亚洲成人在线| 亚洲精品系列| 欧美激情中文字幕一区二区 | 校园春色综合网| 激情成人亚洲| 91久久精品国产91性色| 国产精品成人在线| 久久男人av资源网站| 欧美高清在线观看| 欧美自拍偷拍午夜视频| 久久久久一区| 一区二区三区欧美亚洲| 亚洲欧美久久久| 最新69国产成人精品视频免费| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩在线一区二区| 欧美亚洲自偷自偷| 久久天天综合| 亚洲欧美日韩国产成人| 久久亚洲综合网| 亚洲性图久久| 免费观看日韩av| 欧美在线视频一区| 亚洲欧美一区二区激情| 欧美成人高清视频| 国产欧美日韩一区二区三区在线观看 | 欧美另类视频| 欧美国产日韩精品| 悠悠资源网久久精品| 午夜免费久久久久| 欧美一级黄色录像| 国产美女高潮久久白浆| 亚洲视频在线一区观看| 在线亚洲成人| 欧美日韩国产综合久久| 99精品视频免费在线观看| 亚洲调教视频在线观看| 欧美日韩国产免费观看| 亚洲精品久久久久中文字幕欢迎你| 日韩写真在线| 欧美日韩精品一区视频| 一本久久综合| 久久不射2019中文字幕| 国产亚洲视频在线| 久久人体大胆视频| 最新日韩av| 日韩视频免费观看高清完整版| 亚洲免费成人| 国产精品www色诱视频| 亚洲午夜精品久久| 久久精品中文字幕一区二区三区| 国产日韩一区二区| 久久久天天操| 99xxxx成人网| 久久精品99国产精品| 在线高清一区| 欧美日本国产| 中文欧美字幕免费| 久久精品国产在热久久| 亚洲第一在线| 欧美午夜女人视频在线| 欧美一区二区三区在线视频 | 国产手机视频一区二区| 久久精品三级| 亚洲另类黄色| 久久香蕉国产线看观看网| 91久久视频| 国产精品手机视频| 欧美3dxxxxhd| 午夜精品久久久久久久| 欧美激情小视频| 欧美在线一级视频| 亚洲看片网站| 韩日欧美一区| 国产精品国产三级国产专播品爱网 | 午夜精品国产| 亚洲精品欧美| 久久综合久久综合这里只有精品| 亚洲精品视频中文字幕| 国产一区二区三区高清在线观看| 免费亚洲电影在线观看| 欧美一区二区日韩| 夜夜躁日日躁狠狠久久88av| 看片网站欧美日韩| 欧美一区二区三区四区在线| 亚洲美女91| 亚洲激情专区| 国产一区二区三区久久精品| 欧美日韩中文字幕在线| 欧美顶级艳妇交换群宴| 亚洲欧美日韩在线观看a三区 | 亚洲精品小视频| 欧美成人69av| 久久亚洲精品中文字幕冲田杏梨| 午夜宅男久久久| 这里只有精品丝袜|