MFC 基于对话框的项目如何添加子对话框以及相关知识

来源:互联网 发布:免费进销存 知乎 编辑:程序博客网 时间:2024/05/21 10:59

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">1.在资源视图中选中Dialog,右键选择“插入Dialog”;</span>


2.选中该对话框,右键选择“添加类”


3.填写类名,注意类名以大写C开头儿,第二个字母也大写,比如CTest


4.生成的Test.h头文件内容如下:

#pragma once// CTest 对话框class CTest : public CDialogEx{DECLARE_DYNAMIC(CTest)public:CTest(CWnd* pParent = NULL);   // 标准构造函数virtual ~CTest();// 对话框数据enum { IDD = IDD_DIALOG1 };protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()};

分析:有一个默认的构造函数,一个析构函数,没有对话框初始化函数virtual BOOL OnInitDialog();而假如该子对话框上有一些其他的控件,这些控件的初始化工作需要在OnInitDialog();中完成,这样就需要手动添加该函数。

头文件中增加:protected: virtual BOOL OnInitDialog();

源文件中增加:

BOOL CDATE::OnInitDialog()//没有virtual{CDialogEx::OnInitDialog();        //其他自己的初始化代码开始        //其他自己的初始化代码结束        return TRUE;}
5.如果需要在创建该子对话框时候,传进初始化数据,则需要创建自己的构造函数来完成该功能。比如:

在头文件中增加:CTest(CWnd* pParent = NULL,CString str1,CString str2);   // 自己构造函数

其中,str1和str2是外界传进来的参数。用以初始化该子窗口中的某些成员数据,比如:CString m_str1;  CString m_str2;

在源文件中增加:

CTest::CTest(CWnd* pParent = NULL,CString str1,CString str2)  // 自己构造函数
{
m_str1 = str1;
m_str2 = str2;
}


6.如果要避免按下回车时候对话框消失的问题,需要在头文件添加如下:

BOOL PreTranslateMessage(MSG* pMsg);

在源文件中添加如下:

BOOL CDATE::PreTranslateMessage(MSG* pMsg) 
{
//拦截回车键
if (WM_KEYDOWN   ==   pMsg-> message && VK_RETURN   ==   pMsg-> wParam)
{
return   FALSE; 
}
return CDialog::PreTranslateMessage(pMsg);
}








0 0
原创粉丝点击