日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC子对话框初始化问题_从一个“断言”报警说起

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC子对话框初始化问题_从一个“断言”报警说起 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.問題描述

在進行MFC開發時,希望將界面變得美觀。因而調整了一下對話框上的字體與顏色。如果僅有一個對話框,那么直接把這些初始化的代碼放到OnInitDialog()函數中就好。然而,我們會發現,利用MFC自動搭建的子對話框類包含的函數非常稀少!下面記錄一下,我的思路例程: 字體代碼如下: font.CreatePointFont(150,"宋體");//選擇字體 GetDlgItem(IDC_M1_STATIC_ORIG)->SetFont(&font); GetDlgItem(IDC_M1_STATIC_FFT)->SetFont(&font); GetDlgItem(IDC_M1_START)->SetFont(&font); GetDlgItem(IDC_M1_END)->SetFont(&font); GetDlgItem(IDC_M1_CANCEL)->SetFont(&font); GetDlgItem(IDC_M1_X2)->SetFont(&font); GetDlgItem(IDC_M1_2)->SetFont(&font); GetDlgItem(IDC_M1_1)->SetFont(&font);

1.1 放在子對話框構造函數中

結果:直接報錯!
這個原因很好想,子對話框還在生成的過程中,你突然橫插一腳,要晚上子對話框面板上的功能,這肯定是不現實的!!! 那好,換個地方!!!

1.2 重載WM_PAINT消息?

這其實也是我的一個小想法,既然不能放在對話框的初始化過程,那好吧~辛苦點,一點點畫出來。 結果,又報錯!
這個錯比上一個輕點,至少生成了子對話框(!廢話!)。這個錯在于每次移動子對話框的時候,會報斷言錯誤~~哪里的問題?仔細想想,我們每次移動對話框都會觸發WM_PAINT消息,就會觸發OnPaint()函數。這就簡單了。。。肯定是我們的這幾條語句放在OnPaint()函數中不合適,具體就是控件多次動態(WM_PAINT消息)激發是不被允許的。

2.我的解決方案

靜一靜~ Q:我想做什么??? A:初始化對話框啊!!! Q:如果僅有一個對話框,我會把這段代碼放在哪個位置??? A:對話框初始化函數中(OnInitDialog0)啊!!! 問題簡單了,現在的問題就是子對話框類中沒有初始化對話框函數,我們是否能重寫一個?對,這個思路是沒問題的~ OnInitDialog()函數重寫:

3.經驗總結

這個Bug我調試了將近半天,最大的感受就是要冷靜思考。再父對話框中能做的事,在子對話框中是否可以采用相同的方法?到底是涉及到WM消息的重載?還是相關函數的重寫(Override)? MFC的設計理念就是傻白甜,所以冷靜的想一想,很多細節是完全可以掌握的!

總結

以上是生活随笔為你收集整理的MFC子对话框初始化问题_从一个“断言”报警说起的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。