对话框

一、对话框分类:模态对话框、非模态对话框

对话框的概念:用户和应用程序之间交互的接口,接收用户的输入,输出应用程序相关数据。

模态对话框:打开以后用户无法进行其它操作,只有当对话框关闭以后才能进行其它操作。

非模态对话框:不用关闭对话框就可以进行其它操作。

创建对话框对象:在对一个对话框进行控制之前,必须先创建一个对话框对象。

 

模态对话框的显示:调用成员函数DoModal()

非模态对话框的显示:1创建对象,2调用Create成员函数,3调用成员函数ShowWindow;如果对话框资源具有WS_VISIBLE属性,非模态对话框将自动显示,可不用调用ShowWindow函数。如:

CChatDlg *pDlg = new CChatDlg();

pDlg->Create(IDD_DIALOG1);

pDlg ->ShowWindow(SW_SHOW);

 

对话框的数据交换和显示:DDXDialog Data Exchange),通常在构造函数初始化数据成员的值,在对话框显示的时候自动显示这些值。

 

对话框的关闭:调用CDialog::OnOK()CDialog::OnCancel()可以关闭一个对话框。

 

二、几种常见的模态通用对话框类: CFileDialogCColorDialogCFontDialog

1. 演示用CFileDialog类调用保存文件对话框。

2. 演示用CFileDialog类调用打开文件对话框。

 

三、对话框程序实例:

1. 建立一个单文档应用程序工程;

2. 插入一个对话框资源,并使用类向导为其创建一个新类CMyDialog

 

3. 以模态对话框方式调用:

view类添加鼠标左键消息(或者某个菜单项消息,准备实现点击鼠标左键显示对话框),添加如下代码:

void CDlgTestView::OnLButtonDown(UINT nFlags, CPoint point) 

{

// TODO: Add your message handler code here and/or call default

    CMyDialog dlg;      // 模态对话框显示实例

    if(dlg.DoModal() != IDOK) return;

 

CView::OnLButtonDown(nFlags, point);

}

 

4. 以非模态对话框方式调用

view类添加鼠标右键消息,使得按下鼠标右键时显示非模态对话框。

void CDlgTestView::OnRButtonDown(UINT nFlags, CPoint point) 

{

// TODO: Add your message handler code here and/or call default

CMyDialog *pDlg = new CMyDialog;

pDlg->Create(IDD_DIALOG1, this->GetDesktopWindow());

pDlg->ShowWindow(SW_SHOW);

 

CView::OnRButtonDown(nFlags, point);

}

 

5. 设置所有对话框颜色(不推荐使用)

App成员函数InitInstance中添加如下代码:

SetDialogBkColor(RGB(0,0,255),RGB(255,0, 0)); //背景蓝色,控件颜色

 

设置某个对话框背景颜色之方法一:

void CModalDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

 

// TODO: Add your message handler code here

if (!IsIconic()) //窗口是否最小化

{

CRect rect;

GetClientRect(rect);

dc.FillSolidRect(rect, RGB(0, 255, 0)); //设置为绿色背景

}

 

//CDialog::OnPaint();

// Do not call CDialog::OnPaint() for painting messages

}

 

设置某个对话框背景颜色之方法二:

HBRUSH CModalLessDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 

// TODO: Change any attributes of the DC here

switch (nCtlColor)

{

case CTLCOLOR_DLG:

hbr = ::CreateSolidBrush(RGB(123, 234, 192));

break;

case CTLCOLOR_STATIC:

hbr = ::HBRUSH(GetStockObject(HOLLOW_BRUSH)); 

pDC->SetBkMode(TRANSPARENT); 

break;

}

// TODO: Return a different brush if the default is not desired

return hbr;

}

 

杂项:

GetDlgItem(IDC_EDIT_TREE)->SetFocus();

((CEdit *)GetDlgItem(IDC_EDIT_TREE))->SetSel(0, -1);

::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(),

 WM_VSCROLL, SB_BOTTOM, NULL);

//::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(),

 WM_KEYDOWN, VK_END, NULL);

 

static bool bSwitch = true;

bSwitch = !bSwitch;

if (bSwitch)

m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);

else

m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST);

 

this->SetDlgItemText(IDC_EDIT_USER, "123");

this->SetDlgItemText(IDC_EDIT_PSWD, "456");

 

6. 对话框数据交换:

 

 

a. 添加编辑框普通类型的变量

 更多Java视频教程


posted @ 2012-03-01 16:10  JAVA教程  阅读(604)  评论(0编辑  收藏  举报