對話方塊視窗過程的另外一種實現方法

2021-10-08 03:50:17 字數 678 閱讀 2305

在之前的一篇關於對話方塊返回值的文章中,有人建議說可以使用另外一種不同的搞法:也即直接呼叫defdlgproc這個api函式(就類似於視窗訊息過程中呼叫預設的訊息處理函式defwindowproc一樣,而不是直接返回true或者false。

實際上,我們準備試它兩次。今天我會使用上述所說的方法,過幾天,我還會演示另外一種完全不一樣的做法。這兩種做法中,都包含同乙個的內部理念,而剩下的其他部分只是為了讓這個理念能順利跑起來的輔助結構而已。

這個所謂的第一種方法,實際上是使用了一種遞迴式呼叫手法,它嘗試在對話方塊視窗過程中呼叫defdlgproc,從而觸發一種預設的訊息處理流程。這種技巧需要設立乙個標誌,使用這個標誌可以能夠打破遞迴呼叫,從而退出無限迴圈。

因為通常你的對話方塊物件裡已經有了一些資料成員了,所以,再新增乙個資料成員應該不是什麼大問題。

defdlgproc會呼叫對話方塊視窗過程來判斷主程式的意圖。當你想讓windows執行預設的訊息處理時,你就會遞迴地呼叫defdlgproc:在defdlgproc這個函式的內部,它會回過頭來,呼叫你的對話方塊視窗過程來判斷你是否會希望覆蓋預設的處理流程。

通過檢測這個遞迴呼叫並返回false,對defdlgproc的遞迴呼叫就會執行預設處理並返回它的處理結果。

現在,你得到了預設訊息處理的結果,你可以在返回之前修改它,然後呼叫鏈返回到外層的defdlgproc,它會將這個值作為訊息處理的最終處理結果。

MFC實現對話方塊的停靠視窗

vs2019,建立mfc應用,設定高階中去除預設停靠視窗。1.對話方塊建立 1.1插入dialog,id改為dialog set 1.2對話方塊的屬性設定 border none,style child 1.3新增相關控制項 1.4右鍵單擊新增mfc類csetting 2.停靠視窗建立 2.1類導向...

一種保持VC對話方塊布局的簡便方法

在視窗可縮放的vc應用程式中,在縮放時保持視窗的布局很重要。網上有很多複雜的布局控制 可供參考。有些 很強大,但如果你的視窗只是個簡單的對話方塊,也許可以試試本文的方法。這個方法夠簡單。別去管那些錨點 對齊之類的詞彙了,強大的功能在某種程度上也意味著更多的 簡單地記住當前的視窗布局,然後按比例縮放這...

禁止對話方塊視窗的改變和實現視窗的拉伸

1.禁止對話方塊視窗的改變 1 響應wm syscommand訊息 void cmfcdemodlg onsyscommand uint nid,lparam lparam 3 lresult cmfcdemodlg onnchittest cpoint point else if point.x ...