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

天下

記錄修行的印記

窗口銷毀的相關函數與消息

窗口銷毀的相關函數與消息
DestroyWindow函數
DestroyWindow銷毀窗口的正牌函數。
DestroyWindows的MSDN說明如下:
The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain).
If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.
DestroyWindow also destroys modeless dialog boxes created by the CreateDialog function.
A thread cannot use DestroyWindow to destroy a window created by a different thread.
If the window being destroyed is a child window that does not have the WS_EX_NOPARENTNOTIFY style, a WM_PARENTNOTIFY message is sent to the parent.
DestroyWindow的處理過程總結要點如下: 
1. 向父窗口發送WM_PARENTNOTIFY消息(僅當窗口具有WS_EX_NOPARENTNOTIFY樣式); 
2. 向窗口發送WM_DESTROY消息; 
3. 使窗口轉入非活動狀態,移除鍵盤焦點; 
4. 銷毀子窗口(應該是通過遞歸調用DestroyWindow完成); 
5. 銷毀目標窗口資源:銷毀菜單,清空線程的消息隊列,銷毀與窗口過程相關的定時器,解除窗口對剪貼板的擁有權,打斷剪貼板器的查看鏈; 
6. 向窗口發送WM_NCDESTROY消息;
上述條目大致從前往后執行(1、2、3的順序不一定,5、6的順序不一定)。依據是: 
1. 根據WM_PARENTNOTIFY說明:銷毀窗口時,系統在任何銷毀窗口的操作執行前發送WM_PARENTNOTIFY至父窗口; 
2. 根據WM_DESTROY說明:此消息先被發送至目標窗口,然后發送給目標窗口的所有子窗口,處理此消息時,可以假定所有子窗口還存在著; 
3. 根據DestroyWindow說明:函數先銷毀子窗口及所擁有的窗口,然后銷毀目標窗口; 
4. 根據WM_NCDESTROY說明:與WM_DESTROY相反的是,此消息在所有子窗口銷毀之后發送; 沒有去看匯編代碼,只是根據各個MSDN說明來大致推測的,基本夠用了吧。
根據MSDN說明,不能在非創建線程上調用DestroyWindow;若要在其它線程上關閉窗口,不可以直接調用DestroyWindow(錯誤"拒絕訪問"),也不可以只發送WM_DESTROY,因為DestroyWindow才能完整的關閉窗口,WM_DESTROY消息只是關閉流程的一部分,甚至是最"無用"的一部分--WM_DESTROY只是用戶響應的接口,而真正清理窗口的工作由DestroyWindow的其它部分完成。 
要在其它線程上關閉窗口,可以向窗口發送WM_CLOSE消息,若窗口過程未在WM_CLOSE的處理中取消關閉操作,則DefWindowProc會默認調用DestroyWindow(彼時自然是在窗口的創建線程上)。
WM_CLOSE消息
WM_CLOSE的MSDN說明如下:
An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the 
DestroyWindow function only if the user confirms the choice.
By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.
WM_CLOSE消息提供取消關閉窗口操作的接口,也可以作為窗口關閉的關聯處理的統一入口。點擊窗口右上角的關閉按鈕將導致窗口收到WM_CLOSE消息,一般情況下,菜單中的Exit項的處理代碼中也應向窗口發送WM_CLOSE消息,這樣可以使無論何種方式觸發的窗口關閉操作,其程序流均會流入WM_CLOSE消息的處理過程。在WM_CLOSE中可以對程序狀態進行確認,自動或由用戶確認是否取消關閉操作。 
與接下來的其它消息相比,WM_CLOSE的特殊之處在于它發生在銷毀過程啟動之前。用戶處理完WM_CLOSE消息后,如未取消,則DefWindowProc將調用DestroyWindow來關閉窗口,一旦進入DestroyWindow,則關閉過程將不可逆轉。
WM_DESTROY消息
WM_DESTROY的MSDN說明如下:
The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen.
This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.
A window receives this message through its WindowProc function.
If the window being destroyed is part of the clipboard viewer chain (set by calling the SetClipboardViewer function), the window must remove itself from the chain by processing the ChangeClipboardChain function before returning from the WM_DESTROY message.
最后一句值得注意,不過對剪貼板涉獵不多,暫且不究。
WM_PARENTNOTIFY消息
WM_PARENTNOTIFY的MSDN說明如下:
The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place.
A window receives this message through its WindowProc function.
WM_NCDESTROY消息
WM_NCDESTROY的MSDN說明如下:
The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window. The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed. A window receives this message through its WindowProc function. This message frees any memory internally allocated for the window.
關于WM_DESTROY與WM_NCDESTROY,從各種說明可以看出,一個大約充當關閉操作啟動時的通知接口,一個大約充當關閉操作完成時的通知接口。這也是我認為在DestroyWindow的處理流程中,第6條在第5條之后的原因。 
另外,說明中有個值得一提的地方在于:WM_DESTROY用于釋放關聯到(associated to)窗口的已分配內存對象,WM_NCDESTROY用于釋放內部為窗口分配的(internally allocated for)內存。 可以想象,后者應當指窗口的內核數據,但前者則有各種可能,菜單資源?GDI資源?異或是子窗口資源?這個就不好說了。 而且,根據這兩句話的表述,似乎這兩個清理操作是在消息的處理過程中發生的,然而顯然又不是由用戶來完成的工作,那么就應當是在DefWindowProc中完成的了。為什么不直接拿到Destroywindow中來執行呢?
ActiveX控件的銷毀
銷毀控件的最好方法是銷毀宿主窗口。可以通過調用 CWindow::DestroyWindow 或 DestroyWindow API 顯式地進行銷毀,或者讓宿主窗口的父級窗口的毀壞導致其死亡,從而隱式地進行銷毀。這些方法的任何一種都將安全地銷毀寄宿的控件。請注意,CAxWindow 對象的毀壞"不會"導致基礎"AtlAxWin7"窗口的毀壞。 
來自:http://technet.microsoft.com/zh-cn/query/cc468138

posted on 2015-08-01 14:24 天下 閱讀(621) 評論(0)  編輯 收藏 引用 所屬分類: Win32

<2015年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

導航

統計

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久国产精品一区| 久久久久久香蕉网| 久久精品一区二区三区四区| 亚洲精品一区二区在线观看| 欧美激情导航| 欧美护士18xxxxhd| 国产精品美女久久久久久久| 欧美午夜女人视频在线| 国产女主播在线一区二区| 国产在线高清精品| 亚洲黄色av| 亚洲天堂成人| 久久精品一区蜜桃臀影院| 欧美成人黄色小视频| 亚洲精品字幕| 亚洲欧美国产日韩中文字幕| 久久久精品视频成人| 欧美激情一区二区| 久久在精品线影院精品国产| 欧美天天在线| 国内成人自拍视频| 99热这里只有成人精品国产| 欧美在线观看一区| 亚洲福利电影| 亚洲精品无人区| 欧美在线黄色| 国产精品ⅴa在线观看h| 亚洲承认在线| 久久成人18免费观看| 亚洲国产乱码最新视频| 欧美亚洲在线视频| 国产精品h在线观看| 在线观看亚洲精品视频| 国产日韩欧美一区| 亚洲午夜极品| 亚洲黄色成人网| 久久久久久亚洲精品不卡4k岛国| 欧美激情视频在线播放| 国产在线视频欧美一区二区三区| 中国女人久久久| 欧美电影在线播放| 久久久久网址| 伊人成年综合电影网| 欧美影院视频| 亚洲一区二区黄色| 欧美日韩一区二区高清| 日韩一区二区福利| 亚洲国产日韩欧美在线图片| 久久伊人亚洲| 在线观看日韩av| 另类尿喷潮videofree| 欧美在线免费视频| 国模私拍视频一区| 久久一综合视频| 久久精品电影| 亚洲第一黄网| 亚洲国产高清一区二区三区| 蜜桃视频一区| 亚洲国产欧美日韩精品| 欧美成年人网| 牛牛影视久久网| 亚洲久久成人| 国产精品爽黄69| 久久国产精品久久久| 国产亚洲欧美一区| 久久久久久久久久久久久9999 | 欧美一区二视频| 在线视频精品一区| 国产精品乱子久久久久| 性欧美18~19sex高清播放| 亚洲一区二区在线免费观看视频 | 欧美一二三区在线观看| 国产欧美日韩激情| 久久美女性网| 欧美伊人久久久久久久久影院| 亚洲欧美一区二区三区在线| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩精选| 欧美一区二区三区精品电影| 欧美一区在线看| 亚洲激情六月丁香| 欧美成人综合| 欧美体内she精视频在线观看| 亚洲欧美变态国产另类| 亚洲欧美综合国产精品一区| 国内精品亚洲| 亚洲精品视频在线观看免费| 国产精品一香蕉国产线看观看| 久久九九热re6这里有精品| 久久男人av资源网站| 一区二区三区不卡视频在线观看| 日韩一级免费观看| 欧美剧在线免费观看网站| 亚洲永久免费视频| 久久看片网站| 亚洲欧美日韩天堂一区二区| 欧美一区二区精品在线| 亚洲欧洲日韩女同| 亚洲欧美成aⅴ人在线观看| 一区二区视频免费完整版观看| 91久久在线| 国产一区在线免费观看| 亚洲精品乱码久久久久久黑人| 国产欧美日韩专区发布| 亚洲激情中文1区| 激情文学一区| 亚洲一区二区三区色| 日韩网站在线| 久久久免费观看视频| 午夜日韩在线| 欧美日韩国产综合视频在线观看| 久久久噜噜噜久久| 国产精品女人网站| 亚洲精品久久久久久久久久久| 黑人操亚洲美女惩罚| 亚洲视频免费看| 99视频在线精品国自产拍免费观看 | 国产精品欧美经典| 亚洲国产精品一区二区第四页av| 国产日韩高清一区二区三区在线| 亚洲精品在线视频| 1204国产成人精品视频| 好吊一区二区三区| 99视频有精品| 欧美国产日韩一区| 欧美aⅴ一区二区三区视频| 国产日韩欧美| 欧美亚洲专区| 久久人人九九| 国产欧美综合在线| 亚洲免费在线视频| 午夜国产一区| 欧美视频网站| 中文欧美字幕免费| 亚洲一区二区久久| 国产精品久久激情| 在线不卡a资源高清| 久久一区激情| 欧美一区二区免费观在线| 欧美日韩一区免费| 一本久道久久综合狠狠爱| 亚洲伦理中文字幕| 欧美日韩国产bt| 亚洲视频999| 久久av红桃一区二区小说| 国产三级精品三级| 久久久伊人欧美| 免费观看亚洲视频大全| 亚洲精品系列| 欧美日韩伊人| 亚洲欧美视频| 女人色偷偷aa久久天堂| 亚洲精品日韩激情在线电影| 欧美日韩国内| 午夜精品久久久久影视| 久久这里只精品最新地址| 在线观看欧美成人| 欧美日韩精品久久久| 亚洲欧美激情一区| 一区二区激情| 国产人久久人人人人爽| 麻豆国产精品777777在线| 亚洲国产日韩欧美| 亚洲午夜精品久久| 国内精品国语自产拍在线观看| 老司机午夜免费精品视频| 亚洲美女在线一区| 久久精品国产亚洲精品| 亚洲精品国产欧美| 国产精品系列在线| 欧美大片18| 欧美一级成年大片在线观看| 亚洲国产精品一区在线观看不卡 | 久久精品视频在线看| 亚洲国产视频一区| 国产精品一区久久久| 欧美国产国产综合| 久久av资源网| 亚洲私人影院| 亚洲第一视频网站| 欧美在线你懂的| 99国产精品久久久久久久成人热| 国产午夜精品久久久| 欧美日韩成人综合在线一区二区| 久久xxxx| 亚洲永久在线| 亚洲精品视频免费观看| 免费人成精品欧美精品| 午夜精品免费在线| 一本色道婷婷久久欧美| 极品少妇一区二区三区| 国产精品日韩精品欧美在线| 欧美精品一区二区三区在线播放 | 国内外成人在线| 欧美午夜不卡在线观看免费| 久久久久久亚洲综合影院红桃| 亚洲精品一区在线观看香蕉| 久久九九99视频| 午夜视频在线观看一区二区| 日韩亚洲精品视频|