VC對話框

關鍵字 VC 對話框


主要內容:

1, 建立有模式對話框和無模式對話框

2, 控件的對齊及焦點設置

3, 實例

4, 通用對話框

5, 常用函數



對話框可按其動作模式分爲“有模式”和“無模式”兩大類。對於有模式對話框,在對話框被關閉之前,用戶無法進行其它工作。而無模式的對話框,而它仍然保留在屏幕上的同時,用戶可以在應用程序的其它窗口進行工作。



建立一個基於對話框的程序Dialog.

在資源管理器中插入一個對話框,Ctrl+w新建一個類COwnerDiaog;在IDD_DIALOG_DIALOG中加一個按鈕,雙擊它編輯代碼。

void CDialogDlg::OnButton1()

{

COwnerDialog dlg;

dlg.DoModal();

}

不要忘了#include "OwnerDialog.h"。你不關閉它,無法對主對話框下達命令,但你仍然可以打開其它程序。我們刪除剛剛添加的代碼。

void CDialogDlg::OnButton1()

{

COwnerDialog *pDlg=new COwnerDialog();

pDlg->Create(IDD_DIALOG1);

pDlg->ShowWindow(SW_RESTORE);

}

這是一個無模式對話框,你可以在處理子對話框之前,對主對話框下達命令。注意如果你關閉了主對話框,則子對話框也被關閉了。



在Layout中有四個功能是十分有用的,Tab Order(快捷鍵Ctrl+D):依次單擊按鈕決定它們的焦點順序。

這樣當用戶,按Tab鍵切換焦點時,控件獲得焦點的順序就是我們設定好的。例如一個對話框要我們輸入用戶名,口今,再按確定。我們將它們的焦點順序分別設爲1,2,3,這樣用戶輸入了用戶名,再按Tab,輸入口今,回車就可以了。

Layout Align 將選擇的控件按某種方式對齊

Layout Space evenly 平均分配選擇的控件的間隔

Layout Make same size 使選擇的控件大小相同



我們來編一個簡單程序,程序隨機產生一個x,用戶輸入y=x*x,的值,程序檢查對錯,如果錯了,還要改正。

生成一個基於對話框的應用程序,去掉”TODO: 在這裏設置對話控制”,這個靜態控件沒什麼用。加入兩編輯控件(如果控件多的話最好改成一個容易理解的ID),Ctrl+W將兩個控件

與兩個整形變量m_x,m_y(命名要容易理解)相關聯。加一個按鈕,ID改爲IDC_CHECK,雙擊它編輯代碼。

void CCheckDlg::OnCheck()

{

UpdateData();

if(m_y == m_x * m_x)

MessageBox("你對了");

else

{

m_y = m_x * m_x;

UpdateData(false);

MessageBox("根據結果想想");

}

}

找到構造函數(最好在中OnInitDialog()處理),找到m_x = 0;改成

CTime t=CTime::GetCurrentTime();

int n=t.GetSecond();

for(int i=0;i
m_x = rand()%10;

其實rand並不隨機,第一次調用返回值總是相同的,我們可以取當前時間的秒數,來決定調用次數。設置各個控件的Caption,並按上述方法設置焦點,並調整各控件的大小。

控件顯示的值與控件相關聯的數(成員變量)的值不是同步的,我們必須調用UpDateData();當我們輸入了數據,就調用UpdateData(true)來更新成員變量;UpdateData(false)

將成員變量的值顯示在屏幕上。CDialog的UpDateData()更新所有的控件,如果只想更新一個控件,可以調用控件類的UpDateData().



通用對話框,經常用的是CColorDialog,CFontDialog,CFileDialog,類似於

CColorDialog dlg;

if(IDOK==dlg.DoModal())

{

…dlg.GetColor();

}

注意CFileDialog dlg(false),表示是另存爲對話框,爲true表示是打開對話框,第一個參數沒有默認值。



常用函數:

CDialog::CloseWindow();最小化對話框。

CDialog::DestroyWindow();關閉對話框,OnOk,OnCancel也可以關閉對話框。

CDialog::GetClientRect();獲得客戶區範圍;

CDialog::GetFocus(); 獲得焦點;

CDialog::GetFont() 獲得字體;

CDialog::SetWindowText);設置對話框標題;

CDialog::SetMenu(); 設置菜單;

CDialog::SetFocus(); 設置焦點;

CDialog::SetFont(); 設置字體;

有些東西我們無法在構造函數中進行,如SetTimer,我們可以在OnInitDialog()中進行,或者在WM_SHOWWINDOW的響應函數中進行。

ShowWindow(SW_HIDE);它的參數還可以是:

SW_HIDE SW_MINIMIZE SW_RESTORE SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章