對話方塊程式設計

2022-07-16 01:54:10 字數 3743 閱讀 6587

1、對話方塊的建立:

可以通過插入對話方塊資源來建立乙個對話方塊,對話方塊的建立封裝在cdialog類中,它是由cwnd類派生出來的,用來在螢幕上顯示對話方塊視窗。

2、對話方塊的分類:

① 模態對話方塊(在產生模態對話方塊時,程式先暫停執行,只能在模態對話款上進行操作,其他地方的操作不能進行。)

② 非模態對話方塊(它允許在顯示對話方塊的同時,轉而執行程式中的其他操作。)

3、模態和非模態對話方塊的建立:

① 模態對話方塊的建立:可以通過domodal()函式來實現,裡面自帶了將模態對話方塊顯示的功能,在產生時間,程式將暫停執行,關閉模態對話方塊通過enddialog()函式來實現,此時對話視窗將會被銷毀。

② 非模態對話方塊的建立:可以通過creat()函式來實現,但由於其沒有自帶現實的功功能,還需要呼叫showwindow()函式將其顯示出來。但如果只是在對話方塊類中定義了乙個區域性變數,對話方塊還是會顯示不出來,因為區域性變數在程式一執行完畢就結束生命週期,具體的解決辦法:定義成員變數或則定義乙個指向堆記憶體的指標,因為它與程式的生命週期一致,但缺點是在生命週期結束後記憶體會丟失。

在非模類對話方塊中點選ok或cancel視窗時,它並沒有被銷毀,而是被隱藏,它是由基類中的onok()函式來實現,而預設情況下,onok()呼叫成員函式enddialog(),它不能銷毀非模類對話方塊,必須將onok()覆蓋掉,呼叫其內部的destroywindow()函式來實現。

③ 由於非模類對話方塊操作比較複雜,因此在使用中更多的使用模類對話方塊。

4、對話方塊上按扭控制項的新增:

⑴訊息分類:標準訊息,命令訊息,通道訊息。

⑵實現單擊按扭動態建立乙個新的按扭的功能:

① 響應單擊滑鼠按扭的事件

② 通過creat()來建立乙個新的按扭:建立好乙個按扭後時,它已經和乙個視窗繫結在一起,必須先將其銷毀後才能再建立乙個的新的按扭,可以通過增加bool變數來判斷是否是已經建立過的

5、靜態文字框的控制項:

它起到注釋的作用,可以對其增加訊息響應函式來改變其資訊,方法:首先要獲得指向靜態文字框的指標,通過 getdlgitem()函式來實現,然後設定文字內容,通過setwindowtext()函式來實現,要將notify複選上,才能接受通道訊息。

6、

方法一:getdlgitem()->get(set)windowtext()

先獲取編輯框的內容,getdlgitem()->getwindowtext(),然後通過atoi()函式將字元轉換成整型,再進行相關的運算操作,最後通過getdlgitem()->setwindowtext()將得到的結果放到第三個編輯框中。

方法二:getdlgitemtext()/setdlgitemtext()

這個函式的功能實際上是將方法一的:getdlgitem()->get(set)windowtext()二者的功能組合起來,其他的操作和方法一相同。

方法三: getdlgitemint()/setdlgitemint()

這個方法實際上是將方法二和中間將字元轉化成整型合併起來,只適用於整型間的操作。

將編輯框分別關聯成員變數來實現,通過classwizard,將控制項的id號和成員變數關聯起來,通過ddx_text()開關函式來實現,並呼叫updatedata()函式來獲取輸入值。

通過meditgetwindowtext()函式來獲取控制項內容。

方法六:sendmessage()

先獲取文字訊息wm_gettext(),通過傳送訊息響應sendmessage()來實現,傳送訊息時,會拷貝文字訊息到指定的buffer中。

方法七: senddlgitemmessage()

給對話方塊的子控制項傳送訊息來實現,其相當於方法六中獲取子控制項和傳送訊息的組合。

7、對話方塊收縮和擴張:

方法:通過保留對話方塊在還原和切割後的尺寸座標,通過getwindowrect()來獲取矩形區域,然後通過setwindowpos()來設計對框的大小。

8、z-order次序的了解:

視窗的z次序表明了重疊視窗堆中視窗的位置,這個視窗堆是按乙個假想的軸定位的,這個軸就是從螢幕向外伸展的z軸。z次序最上面的視窗覆蓋所有其它的視窗,z次序最底層的視窗被所有其它的視窗覆蓋。應用程式設定視窗在z次序中的位置是通過把它放在乙個給定視窗的後面,或是放在視窗堆的頂部或底部。

windows系統管理三個獨立的z次序——乙個用於頂層視窗、乙個用於兄弟視窗,還有乙個是用於最頂層視窗。最頂層視窗覆蓋所有其它非最頂層視窗,而不管它是不是活動視窗或是前台視窗。應用程式通過設定ws_ex_topmost風格建立最頂層視窗。

一般情況下,windows系統把剛剛建立的視窗放在z次序的頂部,使用者可通過啟用另外乙個視窗來改變z次序;windows系統總是把活動的視窗放在z次序的頂部,應用程式可用函式bringwindowtotop把乙個視窗放置到z次序的頂部。函式setwindowpos和deferwindowpos用來重排z次序。

9、視窗的分類:

⑴兄弟視窗;共享同乙個父視窗的多個子視窗叫兄弟視窗。

⑵活動視窗

活動視窗是應用程式的頂層視窗,也就是當前使用的視窗。只有乙個頂層視窗可以是活動視窗,如果使用者使用的是乙個子視窗,windows系統就啟用與這個子視窗相應的頂層視窗。任何時候系統中只能有乙個頂層視窗是活動的。使用者通過單擊視窗(或其中的乙個子視窗)、使用alt+tab或alt+esc組合鍵來啟用乙個頂層視窗,應用程式則呼叫函式setactivewindow來啟用乙個頂層視窗。

⑶前台視窗和後台視窗

在windows系統中,每乙個程序可執行多個執行緒,每個執行緒都能建立視窗。建立正在使用視窗的執行緒稱之為前台執行緒,這個視窗就稱之為前台視窗。所有其它的執行緒都是後台執行緒,由後台執行緒所建立的視窗叫後台視窗。使用者通過單擊乙個視窗、使用alt+tab或alt+esc組合鍵來設定前台視窗,應用程式則用函式setforegroundwindow設定前台視窗。如果新的前台視窗是乙個頂層視窗,那麼windows系統就啟用它,換句話說,windows系統啟用相應的頂層視窗。

10

② 通過getwindow()來獲取視窗的控制代碼

③ 通過getnextdlgtableitem(),可以方便焦點的逐個移動,在onok()函式中來實現:先獲得當前具有焦點的子視窗的指標,然後通過getnextdlgtableitem()來獲取下乙個子視窗的控制代碼,它是按照設定好的視窗順序來移動的,避免向下出現找不到視窗等問題。

11、本課程學習總結:

初步了解對話方塊使用者介面程式的編寫,如何向對話方塊控制項聯接資料成員及其實現機理,如何向對話方塊控關聯控制項類,如何利用對話方塊類的成員函式向控制項傳送訊息和獲取對話方塊控制項的類指標,如何直接利用對話方塊控制項類操縱對話方塊控制項(傳送訊息和直接呼叫成員函式)。如何在程式執行時產生和銷毀控制項。對話方塊控制項的幾種操作方式的優劣比較分析。如何實現對話方塊的部分收縮和展開。如何讓對話方塊上的文字框在程式啟動後立即獲得焦點,如何利用setwindowlong改變視窗的**函式,通過改變文字框的預設回車處理方式進行演示。實現多個輸入文字框間通過回車逐一向下傳遞焦點的另一種巧妙方法(用預設按鈕來處理)。

對話方塊 訊息對話方塊

我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式mes...

對話方塊程式設計技巧

一 如何往基於dialog的程式新增選單 1.1 先新增選單 idr menu1 資源,並加上需要的選單項。1.2 編輯對話方塊資源idd dlgmenu dialog的屬性,在屬性對話方塊中選擇idr menu1即可。1.3 假如您不希望在對話方塊屬性中直接設定選單,而通過 在程式中動態生成可以採...

對話方塊中顯示對話方塊

一 對話方塊中顯示對話方塊的方法 1 首先建立要在對話方塊裡顯示的那個對話方塊,命名為 idd inner 設定這個對話方塊的屬性 1 style 選擇 child 中文版 樣式 選擇 下層 2 border 為 none 中文版 邊框 選擇 無 2 為了顯示時能夠準確定位,我們可以在右邊要顯示對話...