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