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

天下

記錄修行的印記

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

窗口銷毀的相關函數與消息
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 天下 閱讀(630) 評論(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>
            免费视频亚洲| 免费一区二区三区| 一区二区三区四区五区视频| 一区二区av| 久久久999精品| 欧美激情国产高清| 亚洲一区二区三区影院| 久久蜜臀精品av| 欧美午夜视频| 亚洲黄色视屏| 香蕉视频成人在线观看| 欧美电影免费观看高清| 亚洲综合视频网| 欧美成年人在线观看| 国产欧美日韩高清| 99视频在线精品国自产拍免费观看 | 国产中文一区二区| 一区二区三区欧美激情| 亚洲综合导航| 亚洲破处大片| 久热国产精品视频| 亚洲中无吗在线| 在线精品在线| 久久久999精品视频| 免费国产自线拍一欧美视频| 亚洲性感激情| 亚洲精品一区二区三区樱花 | 亚洲天堂偷拍| 欧美激情区在线播放| 韩国三级在线一区| 欧美专区亚洲专区| 亚洲免费人成在线视频观看| 一区免费观看视频| 欧美1区3d| 久热精品视频在线| 亚洲品质自拍| 欧美一区二区免费观在线| 国产精品久久久久久久app| 一区二区三区国产| 久久久久久亚洲综合影院红桃| 国产有码一区二区| 99精品免费| 欧美午夜不卡视频| 欧美国产日韩精品| 国产在线不卡精品| 亚洲淫片在线视频| 亚洲午夜极品| 欧美日产一区二区三区在线观看 | 国产一区二区黄色| 久久综合国产精品| 牛牛精品成人免费视频| 久久蜜臀精品av| 美女视频黄免费的久久| 亚洲精品日韩精品| 亚洲一区免费网站| 亚洲在线视频免费观看| 欧美在线视频全部完| 欲色影视综合吧| 亚洲人成网站色ww在线| 亚洲精品国产精品乱码不99按摩 | 国产精品爱啪在线线免费观看| 欧美激情一区二区三区在线视频观看| 国产午夜精品久久久| 欧美激情视频在线播放| 精品成人一区二区三区| 久久精品一区二区三区不卡| 亚洲免费精品| 亚洲欧美视频在线观看| 欧美三区视频| 另类av一区二区| 在线看一区二区| 美日韩免费视频| 亚洲黄网站在线观看| 国产精品在线看| 亚洲国产一区二区三区在线播| 国产精品欧美日韩一区二区| 欧美成人自拍| 亚洲欧洲精品一区二区三区不卡| 免费成人在线观看视频| 亚洲国产成人精品女人久久久| 国产精品av一区二区| 亚洲一区二区在线| 久久亚洲综合色| 亚洲区一区二| 国产精品第三页| 欧美在线观看日本一区| 欧美韩国日本综合| 亚洲天堂网在线观看| 久久乐国产精品| 亚洲精品九九| 欧美自拍偷拍| 最近中文字幕日韩精品| 国产精品chinese| 久久精品中文字幕一区| 亚洲人www| 久久九九国产| 9国产精品视频| 国产亚洲电影| 欧美激情网友自拍| 午夜精品亚洲一区二区三区嫩草| 亚洲一区日韩在线| 国产日韩欧美中文在线播放| 美女露胸一区二区三区| 亚洲免费视频在线观看| 欧美黄色免费网站| 欧美在线日韩| 日韩一级免费观看| 欧美日本韩国| 亚洲美女黄色片| 久久久亚洲一区| 中文精品视频| 亚洲高清123| 欧美国产日韩一区二区在线观看| 欧美高清在线观看| 欧美一级欧美一级在线播放| 亚洲免费观看视频| 原创国产精品91| 国产午夜亚洲精品羞羞网站| 欧美日韩日本网| 亚洲欧美成人综合| 亚洲精品影院| 欧美国产先锋| 久久综合色播五月| 欧美在线视频一区二区三区| 一区二区三区毛片| 亚洲三级毛片| 精品不卡在线| 好吊色欧美一区二区三区视频| 国产精品久久久久aaaa九色| 欧美日本韩国| 欧美日韩国产色视频| 欧美激情影院| 欧美成黄导航| 欧美国产精品专区| 免费精品99久久国产综合精品| 久久黄金**| 一本久久综合| 另类尿喷潮videofree| 欧美在线观看视频在线| 亚洲国产精品一区二区三区| 国产综合婷婷| 激情久久中文字幕| 在线免费观看日本一区| 韩国av一区二区| 激情综合电影网| 一区二区自拍| 亚洲全黄一级网站| 亚洲精品国产拍免费91在线| 91久久精品一区| 亚洲精品亚洲人成人网| 99re66热这里只有精品4| 夜色激情一区二区| 亚洲字幕一区二区| 久久av老司机精品网站导航| 久久国产一区二区| 亚洲图片欧美日产| 亚洲欧美激情在线视频| 亚洲国产日韩综合一区| 91久久视频| 一区二区三区日韩精品| 欧美亚洲专区| 久久综合九色综合欧美就去吻| 欧美国产乱视频| 99亚洲视频| 欧美一区二区| 欧美jizz19hd性欧美| 欧美午夜精品久久久久久久| 国产女精品视频网站免费| 在线观看欧美视频| 一区二区不卡在线视频 午夜欧美不卡在| 中日韩美女免费视频网址在线观看| 亚洲欧美综合精品久久成人| 日韩一级黄色大片| 欧美一区亚洲| 亚洲丰满在线| 亚洲性视频网址| 另类av导航| 国产精品一区二区三区观看| 在线日韩成人| 亚洲欧美高清| 亚洲高清免费| 性欧美xxxx大乳国产app| 免费欧美网站| 国产视频在线观看一区二区| 亚洲美女免费视频| 久久久蜜桃一区二区人| 亚洲精品永久免费| 久久综合九色综合欧美就去吻| 国产精品福利在线| 亚洲激情电影在线| 久久久久久久精| 一本到高清视频免费精品| 久久天天狠狠| 国产午夜精品久久久| 亚洲自拍偷拍网址| 最新高清无码专区| 久久一二三国产| 国产在线不卡视频| 午夜精品999| 一级成人国产|