MFC UI對話框

文章目錄

  • 對話框
    • 模態對話框
      • 創建
      • 銷毀
      • 關閉
        • CDialog::OnCancel()
          • EndDialog()
          • CDialog::DestroyWindow()
    • 非模態對話框
      • 創建
      • 銷毀
      • 關閉
          • delete this

對話框

模態對話框

??阻塞父窗口??,強制用戶先處理對話框。關閉前父窗口無法響應事件。

創建

推薦:非指針方式(棧內存)

CMyDialog dlg;
dlg.DoModal();

銷毀

對象在函數結束時自動銷毀(棧內存自動回收)。
調用OnOK()OnCancel()后,MFC自動觸發EndDialog()并銷毀窗口。

關閉

用戶點擊標題欄關閉按鈕(“X”)或 代碼調用SendMessage(WM_CLOSE) =》系統發送 WM_CLOSE 消息 =》觸發CDialog::OnClose() =》CDialog::OnCancel()

CDialog::OnCancel()

=》 EndDialog(IDCANCEL)關閉??對話框 =》CDialog::DestroyWindow() 銷毀窗口資源 =》向系統發送 WM_DESTROY 消息 =》CDialog::OnDestroy() 釋放動態資源(如內存、句柄)=》 CWnd::OnDestroy() =》PostNcDestroy()

EndDialog()

EndDialog(IDCANCEL)
關閉??對話框。僅隱藏窗口。不立即銷毀窗口。結束模態消息循環(RunModalLoop),使 DoModal()返回。IDCANCEL會作為DoModal()的返回值。

CDialog::DestroyWindow()

銷毀窗口資源。銷毀窗口句柄(HWND)。但 CDialog 對象仍存在(需手動 delete)???

非模態對話框

與父窗口??獨立存在??,可同時交互。

創建

要求:使用指針方式(堆內存)。

CMyDialog* pDlg = new CMyDialog;
pDlg->Create(IDD_DIALOG_ID, this);
pDlg->ShowWindow(SW_SHOW);

銷毀

由程序員顯式控制,需手動delete。

必須重寫??OnCancel(),以調用 DestroyWindow()關閉窗口, 并配合 PostNcDestroy() 中調用 delete this刪除對象,才能安全銷毀窗口和對象。

void CMyDialog::OnCancel() {DestroyWindow(); // 銷毀窗口,而非隱藏
}void CMyDialog::PostNcDestroy() {CDialog::PostNcDestroy();delete this;     // 釋放堆內存
}

vs 模態對話框:不調用EndDialog()。

關閉

用戶點擊標題欄關閉按鈕(“X”)或 代碼調用SendMessage(WM_CLOSE) =》系統發送 WM_CLOSE 消息 =》觸發CDialog::OnClose() =》CDialog::OnCancel()

=》DestroyWindow()銷毀窗口資源 =》向系統發送 WM_DESTROY 消息 =》OnNcDestroy 釋放動態資源(如內存、句柄) =》PostNcDestroy()delete this

delete this

PostNcDestroy() 中釋放對象內存,避免泄漏。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90961.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RabbitMQ--@RabbitListener及@RabbitHandle

兩者區別 在 Spring AMQP 中,RabbitListener 和 RabbitHandler 是處理 RabbitMQ 消息的核心注解,但職責和使用場景完全不同。以下從 定義、區別、場景、示例 逐層解析:一、核心定義1. RabbitListener作用:標記 方法或類 為 Ra…

【基于CKF的IMM】MATLAB例程,CV和CT兩個模型下的IMM,二維,濾波使用CKF(容積卡爾曼濾波),附下載鏈接

本程序實現了基于交互多模型(IMM)容積卡爾曼濾波(CKF)的多模型融合定位方法,并與純CV?CKFCV-CKFCV?CKF(勻速模型)和CT?CKFCT-CKFCT?CKF(勻角速度轉彎模型)方法對比。…

AI資訊日報 - 2025年07月28日

AI資訊日報 | 2025年07月28日 周一 今日核心要點 精華提煉 技術突破 ? 騰訊混元:開源發布、3D技術 ? 書生Intern:開源發布、多模態 企業動態 ? AI工具集:協同創作、視頻生成 數據概覽分類數量重點關注技術突破2 條開源發布、3D技術企業動態…

大語言模型 LLM 通過 Excel 知識庫 增強日志分析,根因分析能力的技術方案(1):總體介紹

文章大綱 1. 核心目標 2. 系統總體架構 3. Google Cloud 端到端方案(含無 RAG & RAG 雙模式) 3.1 無 RAG:Function-Calling 查表模式 3.2 RAG:托管式向量檢索 4. 開源輕量級方案 5. 數字孿生聯合驗證(實驗性) 6. 知識圖譜增強(Neo4j) 7. 監控與持續優化(CometLLM)…

Deepseek + browser-use 輕松實現瀏覽器自動化

在數字化時代,瀏覽器應用廣泛,瀏覽器自動化可大幅提升效率。Deepseek 是強大的智能語言模型,能精準解析復雜指令,browser - use 是專注瀏覽器操作的工具,提供豐富 API 接口,支持主流瀏覽器的各類自動化操作…

開疆智能ModbusTCP轉Profient網關連接西門子PLC與川崎機器人配置案例

本案例是西門子PLC與川崎機器人通過Profient轉ModbusTCP網關進行通訊轉換的配置案例,西門子作為profinet主站,機器人作為ModbusTCP服務器。配置過程:機器人配置川崎機器人控制器提供了RS232、以太網的通信接口,同時也可通過加裝選…

Docker多主機網絡連接:實現跨主機通信

Docker 是一種流行的容器化平臺,它可以幫助開發人員更方便地構建、發布和管理應用程序。在 Docker 中,容器是獨立運行的應用程序包裝,包含了運行所需的所有文件、庫和環境變量。Docker 提供了多種網絡連接方式,使得容器之間可以進…

OSPF筆記

一、OSPF基礎1、技術背景(RIP中存在的問題)RIP中存在最大跳數為15的限制,不能適應大規模組網周期性發送全部路由信息,占用大量的帶寬資源路由收斂速度慢以跳數作為度量值存在路由環路可能性每隔30秒更新2、OSPF協議特點沒有跳數限…

kotlin基礎【3】

Kotlin Playground: Edit, Run, Share Kotlin Code Online 資料&#xff1a;kotlin實戰 第一章 data class Person(val name: String,val age:Int?null)//允許接受以age為空&#xff0c;當為空將它賦值為null,如果不這么寫直接寫age:Int?是否可以fun main(args:Array<St…

Java-數構二叉樹

1.樹 1.1概念 樹是一種非線性的數據結構&#xff0c;它是由n個有限節點組成一個具有層次關系。這種結構有以下特點&#xff1a; 一個特殊的結點&#xff0c;稱為根節點&#xff0c;根節點沒有前驅節點除根節點以外&#xff0c;其余節點分成M個互不相交的集合。每個集合又是一…

編程中水合的理解

在編程中&#xff0c;水合&#xff08;Hydration&#xff09; 是一個常見概念&#xff0c;尤其在 前端開發 和 服務端渲染&#xff08;SSR&#xff09; 場景中頻繁出現。它的核心含義是&#xff1a;將靜態內容“激活”為交互式動態內容。1. 水合的本質簡單理解&#xff1a;水合…

使用ffmpeg轉碼h265后mac默認播放器不支持問題

由于mac自帶錄屏是mov并且文件特別大&#xff0c;我使用ffmpeg轉碼視頻為h265使用如下命令ffmpeg_command [ffmpeg_path,"-i", input_path,"-c:v", "libx265","-preset", "veryslow","-map_metadata", "0&q…

支持MySQL、PostgreSQL和Redis集群部署,1Panel開源面板v2.0.5版本發布

2025年7月24日&#xff0c;現代化、開源的Linux服務器運維管理面板1Panel正式發布v2.0.5版本。在這一版本中&#xff0c;1Panel新增數據庫集群部署、郵件告警和主從節點靈活切換三項功能&#xff0c;聚焦為企業級運維場景提供更優使用體驗。 1Panel v2.0.5版本是1Panel開源面板…

GaussDB 數據庫架構師修煉(九) 邏輯備份實操

1 邏輯備份定義 邏輯備份是指與業務有關的對象進行備份&#xff0c;這個對象包括表、表的數據、視圖、索引、過程、函數等等。GaussDB支持邏輯備份的工具為gs_dump、gs_restore&#xff0c;以下舉例說明。 2 創建舉例數據 以下創建testdb庫&#xff0c;創建test1模式&#xf…

c# Winform發布成獨立文件

改造前&#xff1a; 通過發布頁面&#xff0c;修改部署模式為獨立&#xff0c;輸出文件目錄沒有完全包含所有dll改造后&#xff1a;通過修改項目文件方式修改csproj前&#xff1a;<PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net…

Android基礎(一) 運行HelloWorld

Android基礎&#xff08;一&#xff09; 運行HelloWorld一、創建你的第一個Android項目二、創建HelloWorld項目三、安裝并啟動模擬器四、安裝三方模擬器五、使用真機一、創建你的第一個Android項目 學習任何一門編程語言&#xff0c;編寫的第一個程序都是Hello World&#xff0…

MongoDB 和 Elasticsearch(ES)區別

MongoDB 和 Elasticsearch&#xff08;ES&#xff09;都是流行的 NoSQL 數據庫&#xff0c;但設計目標和適用場景有顯著區別。以下是它們的核心差異和典型使用場景對比&#xff1a;1. 核心定位特性MongoDBElasticsearch數據庫類型文檔數據庫&#xff08;通用型 OLTP&#xff09…

【C++算法】89.多源BFS_01 矩陣

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 542. 01 矩陣 題目描述&#xff1a; 解法 先看懂題目 解法一&#xff1a;一個位置一個位置求&#xff08;最差的情況下會非常恐怖&#xff09; 解法二&#xff1a;多源BFS正…

數據結構之 【排序】(歸并排序)

目錄 1.遞歸實現歸并排序的思想及圖解 2.遞歸實現歸并排序的代碼邏輯 2.1嵌套子函數 2.2遞歸過程 2.3遞歸結束條件 2.4歸并及拷貝過程 3.非遞歸實現歸并排序的思想及圖解 4.非遞歸實現歸并排序的代碼邏輯 4.1邊歸并邊拷貝 4.2某一gap下歸并完成才進行拷貝 5.歸并排…

企業如何選擇適合的高防服務器?

高防服務器租用哪家好&#xff1f;這個問題困擾著許多站長&#xff0c;建立的網站經常受到各種網絡攻擊&#xff0c;雖然高防服務器有著較高的防御性能&#xff0c;十分適合經常被攻擊的行業網站&#xff0c;但是如何租到滿意的高防服務器呢&#xff01;徐州高防服務器是部署在…