您的位置:首页 > 其它

对话框设置及常用控件,创建模/非模态对话框态对话框(VC_MFC)

2012-11-21 20:03 513 查看

目录

设置对话框背景颜色
常用控件及对应类
创建模态/非模态对话框
为对话框控件添加关联变量



(本章节中例子都是用 VS2005 编译调试的)

设置对话框背景颜色

[利用 OnPaint 来实现修改对话框背景颜色][利用 OnCtlColor 实现修改对话框背景颜色]

利用 OnPaint 来实现修改对话框背景颜色

说明:  在窗口重绘时候获得资源 DC 然后 FillSolidRect 函数用指定颜色填充整个对话框客户区域来实现修改对话框背景色

流程图:

View Code

/* 派生类 .h 文件内容 *******************************/
class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)

public:
CMyDialog(CWnd* pParent = NULL);   // 标准构造函数
virtual ~CMyDialog();

// 对话框数据
enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
};

/* 派生类 .cpp 文件内容 *******************************/
IMPLEMENT_DYNAMIC(CMyDialog, CDialog)

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
: CDialog(CMyDialog::IDD, pParent)
{

}

CMyDialog::~CMyDialog()
{
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CMyDialog::OnBnClickedButton1)
END_MESSAGE_MAP()

// CMyDialog 消息处理程序

void CMyDialog::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//关闭非模态对话框
DestroyWindow();
}


在主对话框上添加两个按钮,然后添加事件响应中添加代码如下:

/* 创建非模态对话框按钮事件响应函数中添加代码 ***************/
//防止 m_dlg 在已经创建对话框资源
//并与对话框资源关联时候再次创建对话框
if(!m_dlg.GetSafeHwnd())
{
//创建对话框
m_dlg.Create(IDD_DIALOG1);
//显示对话框
m_dlg.ShowWindow(SW_SHOWNORMAL);
}

/* 关闭非模态对话框按钮事件响应函数中添加代码 ***************/
//关闭对话框
m_dlg.DestroyWindow();


运行结果:



为对话框控件添加关联变量

添加关联变量

利用向导

添加控制变量



添加值变量



手动添加代码

添加关联控制/值变量

为类先添加关联的控制变量以上面图片位例子:

CEdit m_edit; //编辑框关联的控制变量
CString m_edit2; //编辑框关联的值变量


在 DoDataExchange 函数中添加控件与变量的关联,便完成了控件与变量的关联

void CtestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//关联必须只能在 CDialog::DoDataExchange(pDX); 下添加

//将控件与控制变量相关联
DDX_Control(pDX, IDC_EDIT1, m_edit);
//将控件与值变量相关联
DDX_Text(pDX, IDC_EDIT1, m_edit2);
}


使用关联变量

在使用控件关联变量时候要注意,并不是控件与关联变量的状态是保持一致的,需要手动调用 CWnd 的 UpdateData 函数来保持控件的状态和关联变量的一致性.

用关联变量值更新到控件上时需要用 UpdateData(FALSE); 来完成.

用关联变量接收控件的改变需要调用 UpdateData(); 来完成.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: