mfc怎么添加初始化代码,mfc新窗口的初始化代码放哪

首页 > 实用技巧 > 作者:YD1662023-05-07 12:08:39

图8-8 客户程序的对话框界面

2.添加控件变量

为了动态获取用户输入的数据,我们需要为2个表示操作数据的文本编辑框,添加控件的Value值类别int型变量m_iData1和m_iData2。

3.添加事件处理

分别对5个计算按钮,为对话框类CExtClientDlg添加按钮通知消息BN_CLICKED(鼠标单击)事件的处理程序OnBnClickedAdd等。

4.编写代码

为了让客户程序可以使用DLL项目中的计算类CCompute,需要在客户程序对话框类CExtClientDlg的头文件

在ExtClientDlg.h 中

添加 #include "..\ExtDll\Compute.h"//相对路径(这个比绝对路径要好),看情况..\表示相对自己上一级目录。用来引入CCompute类。

检查class CAboutDlg : public CDialogEx 中的,对话框数据enum { IDD = 操作对话框数据ID };

在对话框类的定义中,手工添加公共型类变量和成员函数:

public: CCompute *m_pComp; void Comp(UINT nID);

ExtClientDlg.c //文件

// CExtClientDlg 对话框 class CExtClientDlg : public CDialog { …… public: int m_iData1; int m_iData2; CCompute *m_pComp; void Comp(UINT nID); afx_msg void OnBnClickedAdd(); afx_msg void OnBnClickedSub(); afx_msg void OnBnClickedMul(); afx_msg void OnBnClickedDiv(); afx_msg void OnBnClickedMod(); };

在客户对话框类ExtClientDlg.cpp的初始化对话框成员函数OnInitDialog中,手工添加设置数据编辑框初值的代码(红色部分):

BOOL CExtClientDlg::OnInitDialog() { CDialog::OnInitDialog(); …… // TODO: 在此添加额外的初始化代码 SetDlgItemInt(IDC_DATA1, 5); SetDlgItemInt(IDC_DATA2, 3); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }

代码文件ExtClientDlg.cpp中其他新加内容有:(其中红色部分为手工添加的)

void CExtClientDlg::OnBnClickedAdd() { // TODO: 在此添加控件通知处理程序代码 Comp(IDC_ADD); } void CExtClientDlg::OnBnClickedSub() { // TODO: 在此添加控件通知处理程序代码 Comp(IDC_SUB); } void CExtClientDlg::OnBnClickedMul() { // TODO: 在此添加控件通知处理程序代码 Comp(IDC_MUL); } void CExtClientDlg::OnBnClickedDiv() { // TODO: 在此添加控件通知处理程序代码 Comp(IDC_DIV); } void CExtClientDlg::OnBnClickedMod() { // TODO: 在此添加控件通知处理程序代码 Comp(IDC_MOD); } void CExtClientDlg::Comp(UINT nID) { UpdateData(); // 动态获取用户输入的数据并赋值给对应的控件变量 m_pComp = new CCompute(m_iData1, m_iData2); // 创建计算对象 int r; double dr; switch(nID) { // 进行四则和取模运算 case IDC_ADD: r = m_pComp->Add(); break; case IDC_SUB: r = m_pComp->Sub(); break; case IDC_MUL: r = m_pComp->Mul(); break; case IDC_DIV: dr = m_pComp->Div(); break; case IDC_MOD: r = Mod(m_iData1, m_iData2); break; } delete m_pComp; if (nID != IDC_DIV) SetDlgItemInt(IDC_RESULT, r); // 显示整数结果 else { // 显示除法所得的实数结果 wchar_t buf[20]; swprintf_s(buf, 20, L"%g", dr); SetDlgItemText(IDC_RESULT, buf); } } //修改点击退出按钮动作----退出 void CExtClientDlg::OnBnClickedCancel() { // TODO:在此添加控件通知处理程序代码

exit(0); }8.2.7编译运行

为了运行客户程序,需要将客户程序项目设置成启动项目。具体做法是,先在项目管理区中选中ExtClient项目,然后选择菜单项“项目\设为启动项目”。

编译后,会在解决方案的Debug或Release目录中生成动态链接库文件ExtDll.dll和客户程序的可执行文件ExtClient.exe,以及DLL的导出文件ExtDll.exp和(静态连接)库文件ExtDll.lib。如果出现:

>ExtClientDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CCompute::CCompute(int,int)" (__imp_??0CCompute@@QAE@HH@Z),该符号在函数 "public: void __thiscall CExtClientDlg::Comp(unsigned int)" (?Comp@CExtClientDlg@@QAEXI@Z) 中被引用

1>ExtClientDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall CCompute::~CCompute(void)" (__imp_??1CCompute@@UAE@XZ),该符号在函数 "public: virtual void * __thiscall CCompute::`scalar deleting destructor'(unsigned int)" (??_GCCompute@@UAEPAXI@Z) 中被引用

1>D:\ExtDll\Debug\ExtClient.exe : fatal error LNK1120: 7 个无法解析的外部命令

这样的错误是因为缺少lib库导致添加操作如下,这里是缺少

右键“ExtClient”项目名称出现

mfc怎么添加初始化代码,mfc新窗口的初始化代码放哪(13)

下一步添加lib库

mfc怎么添加初始化代码,mfc新窗口的初始化代码放哪(14)

添加路径:

mfc怎么添加初始化代码,mfc新窗口的初始化代码放哪(15)

问题解决。

运行结果如图8-9所示:

mfc怎么添加初始化代码,mfc新窗口的初始化代码放哪(16)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.