一、對話框?qū)傩裕?div style="height:15px;">
1.Styles->Clip siblings:排除子窗口之間的相對區(qū)域,也就是,當(dāng)一個特定的窗口接 收到繪圖消息時,將所有重疊窗口排除在外,只重繪 指定的子窗口。
Styles->Clip children:當(dāng)在父窗口內(nèi)繪圖時,排除子窗口區(qū)域。
2.More Styles
System modal:系統(tǒng)模式對話框
Absolute align:坐標(biāo)相對于屏幕原點
Set foreground:設(shè)置為前臺窗口
No fail create:應(yīng)用于Windows 95
No idle message:不發(fā)送空閑消息
Control:不使用標(biāo)題欄的對話框
Center:在屏幕中心顯示對話框
Center mouse:以鼠標(biāo)坐標(biāo)為對話框中心顯示對話框
Local edit:指定編輯控件的正文將存儲于應(yīng)用程序的局部數(shù)據(jù)段中
3.Extended Styles
Tool Window:工具欄窗體
Client edge:對話框邊框下凹
Static edge:對話框邊框為實邊框
Accept files:是否接受文件拖放
Control parent:用<Tab>鍵在窗口的子窗口間搜索
Context help:在窗口標(biāo)題欄添加一個問號按鈕
No parent notify:以這個風(fēng)格創(chuàng)建的窗口在創(chuàng)建和銷毀時,不向父窗口發(fā)送 WM_PARENTNOTFY消息
二、對話框的創(chuàng)建與顯示
1.模態(tài)對話框:
CDlg dlg;
dlg.DoModal();
CDialog::OnOK();
//或CDialog::OnCancel() 關(guān)閉模態(tài)對話框
2.非模態(tài)對話框
CDlg *dlg=new CDlg;
dlg->Create(IDD_DIALOG,this);
dlg->ShowWindow(SW_SHOW);
dlg->DestroyWindow(); //銷毀非模態(tài)對話框,若在一個非模態(tài)對話框中實現(xiàn)OnCancel方法,需在內(nèi)部調(diào)用DestroyWindow方法,不要調(diào)用基類的OnCancel方法,因為它調(diào)用EndDialog方法將使對話框不可見,但不銷毀對話框。
delete dlg; //DestroyWindow只銷毀窗口,但不釋放對象。delete釋放對象。
三、遍歷對話框中的控件
控件也是窗口,所有可以用CWnd類的方法操作控件,GetTopWindow方法可以獲得第一個屬于CWnd的子窗口,GetNextWindow方法返回窗口管理器中的下一個窗口。
首先在對話框中添加幾個控件,然后在主窗口的OnInitDialog中添加:
CWnd* pWnd = GetTopWindow();
while(pWnd != NULL)
{
int i = pWnd->GetDlgCtrlID();
CString str;
str.Format("ID是:%d",i);
pWnd->SetWindowText(str);
pWnd = pWnd->GetNextWindow();
}
四、消息處理函數(shù)共享:
指多個連續(xù)ID的控件都發(fā)出相同的消息,使用ON_CONTROL_RANGE宏來實現(xiàn),類向?qū)Р恢С諳N_CONTROL_RANGE宏,需手動添加,afx_msg OnButtonClicked(); ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON3,OnButtonClicked).
然后在OnButtonClicked()中添加消息響應(yīng)。