windowns程序设计实验四

c/c++

浏览数:62

2020-6-15

实验4: 创建控件和DDX使用

**【实验目的】**

1、 掌握使用编程方式和拖拉方式来创建一个按钮。
2、 掌握使用控件变量和DDX数据交换。

**【实验过程】**
使用编程方式和拖拉方式来创建一个按钮

步骤如下:

  • ① 启动Visual C++ 6.0,选择“文件”→“新建”菜单命令,在弹出的“新建”对话框的工程标签页面中,选择MFC AppWizard(exe)的项目类型。单击位置框右侧的按钮 ,在弹出的对话框中,将该应用程序的文件夹定位在“D:Windows程序设计”,并在“工程名称”编辑框中输入应用程序名Ex_Create
  • ② 单击按钮进入下一步,从弹出的“步骤1”对话框中,选择“基本对话框”应用程序类型。单击 按钮,出现一个信息对话框,显示出用户在前面几个步骤中做出的选择,单击 按钮,系统开始创建,并又回到了Visual C++ 6.0的主界面。
  • ③ 将项目工作区切换到ClassView页面,展开Ex_Create所有的类节点,右击CEx_CreateDlg类名,弹出如图5.1所示的快捷菜单。从快捷菜单中选择Add Member Variable(添加成员变量),出现如图5.2所示的对话框,在Variable Type(变量类型)编辑框中输入CButton(MFC按钮类),在Variable Name(变量名) 编辑框中输入要定义的CButton类对象名m_btnWnd
  • ④ 在项目工作区窗口的ClassView页面中,将CEx_CreateDlg节点展开,双击OnInitDialog函数名,在该函数中添加下列代码(return TRUE;语句之前添加)
BOOL CEx\_CreateDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//…

m\_btnWnd.Create("你好", WS\_CHILD | WS\_VISIBLE | BS\_PUSHBUTTON | WS\_TABSTOP,

CRect(20, 20, 120, 40), this, 201);  // 创建

CFont \*font = this->GetFont(); // 获取对话框的字体

m\_btnWnd.SetFont(font); // 设置控件字体

 return TRUE; // return TRUE unless you set the focus to a control

}
  • ⑤ 将项目工作区窗口切换到ResourseView页面,双击Dialog资源下的标识IDD_EX_CREATE_DIALOG,打开Ex_Create项目的对话框资源模板。选中“TODO: 在这里设置对话控制。”控件,按【Delete】键删除。从控件工具箱中拖放添加一个按钮控件,保留其默认属性。
  • ⑥ 按快捷键【Ctrl+W】,打开MFC ClassWizard对话框,查看“Class name”列表中是否选择了CEx_CreateDlg,在Object IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。
  • ⑦ 单击 按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。如图5.5所示。
  • ⑧ 双击消息函数OnButton1或单击 按钮,MFC ClassWizard对话框退出,并转向文档窗口,定位到CEx_CreateDlg::OnButton1函数实现的源代码处,添加下列代码:
void CEx_CreateDlg::OnButton1() 
{
MessageBox(_T("你按下了\"Button1\"按钮!"));
}
  • ⑨ 按快捷键【Ctrl+W】,打开MFC ClassWizard对话框,查看“Class name”列表中是否选择了CEx_CreateDlg,在Object IDs列表中选择CEx_CreateDlg,在Messages框中找到并双击OnCommand,这样OnCommand消息函数就添加好了。
  • ⑩ 双击消息函数OnCommand或单击 按钮,退出MFC ClassWizard对话框,并转向文档窗口,定位到CEx_CreateDlg:: OnCommand函数实现的源代码处,添加代码:
BOOL CEx_CreateDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
WORD  nCode = HIWORD(wParam);            // 控件的通知消息
WORD  nID    = LOWORD(wParam);        // 控件的ID 
if ((nID == 201)&&(nCode == BN_CLICKED))
    MessageBox(_T("你按下了\"你好\"按钮!"));
if ((nID == IDC_BUTTON1)&&(nCode == BN_CLICKED))
    MessageBox(_T("这是在OnCommand处理的结果!"));
    return CDialog::OnCommand(wParam, lParam);
}
2、使用控件变量和DDX数据交换。

步骤如下:

  • ① 创建一个默认的对话框应用程序Ex_Member。在打开的对话框资源模板中,删除“TODO: 在这里设置对话控制。”静态文本控件,在对话框资源模板的左边添加2个编辑框控件、2个静态控件和4个按钮控件,设置相应的属性,如表:

  • ② 按快捷键【Ctrl+W】,打开MFC ClassWizard对话框,并切换到Member Variables页面,查看“Class name”列表中是否选择了CEx_MemberDlg
  • ③ 在Control IDs列表中,选定按钮控件标识符IDC_EDIT1,双击鼠标左键或单击 按钮,弹出Add Member Variable对话框,将Category(类别)选为默认的Value(值),将Variable type类型选为默认的CString,在Member variable name框中填好与控件相关联的成员变量m_Edit1,并依次添加如下图控件变量。

  • ④ 将MFC ClassWizard对话框切换到Message Maps页面,依次为CEx_MemberDlg添加IDC_BUTTON1、IDC_BUTTON2、IDC_BUTTON3、IDC_BUTTON4的BN_CLICKED消息映射函数OnButton1、OnButton2、 OnButton3、 OnButton4,添加的代码如下:
void CEx_MemberDlg::OnButton1() 
{
    UpdateData();                    // 将控件的内容存放到变量中
    // 没有参数,表示使用的是默认参数值TRUE
    m_Static1.SetWindowText(m_str1);
}

void CEx_MemberDlg::OnButton2() 
{
    // TODO: Add your control notification handler code here
    CString   str;
    CStatic   *pStatic = (CStatic *)GetDlgItem(IDC_STATIC1);
    pStatic->GetWindowText(str); 
    m_Static2.SetWindowText(str);
}

void CEx_MemberDlg::OnButton3() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);                    // 将控件的内容存放到变量中
    // 没有参数,表示使用的是默认参数值TRUE
    m_str2=m_str1;
    UpdateData(false);                    // 将变量内容存放到控件中
    // 没有参数,表示使用的是默认参数值TRUE
}

void CEx_MemberDlg::OnButton4() 
{
    // TODO: Add your control notification handler code here
    CString   str;
    CStatic   *pStatic = (CStatic *)GetDlgItem(IDC_STATIC1);
    pStatic->GetWindowText(str); 
    m_Edit1.SetWindowText(str);
}

作者:王枫灿