对话框只是属于用户界面(表示层)。当在对话框中确定之后,将对话框中的数据传到下一层:业务层。业务层调用算法来进行计算。示例代码如下:
class CDataInputDlg : public CDialog
{
public:
int m_iParamA;
...
}class CCalcManager
{
int m_iParam[3];
int m_iResult;
public:
BOOL SetParam(int iParam, int iIndex) // 输入参数到本类中。
{
if(iIndex > 3 || iIndex < 0) return FALSE;
m_iParam[iIndex] = iParam;
return TRUE;
};
int MakeCalculate() // 调用响应算法进行计算,下面是简化版
{
m_iResult = 0;
for(int i=0; i<3; i++){
m_iResult += m_iParam[i];
}
return m_iResult; // 返回计算结果
};
int GetResult(void){return m_iResult;} // 其它时刻取得计算结果
BOOL Create(){ return TRUE; }; // 创建函数
...
}class CMyFrame : public CFrameWnd // 用户界面
{
CCalcManager m_CalcManager; // 声明一个CCalcManager的成员变量,
// 该变量也可以声明为全局。
...
}
void CMyFrame::OnCreate(...)
{
m_CalcManager.Create(); // 初始化该成员变量。
...
}void CMyFrame::OnMenuDataInput(void) // 其中一个数据输入对话框
{ // 其他对话框代码和这个类似。
int iParam = 0;
CDataInputDlg dlg;
if( IDOK == dlg.DoModel() ){
iParam = dlg.m_iParamA;
m_CalcManager.SetParam(iParam, 0); // 设置(存储)该变量。
}
}
void CMyFrame::OnMenuCalc(void) // 计算
{
m_CalcManager.MakeCalculate();
DisplayResult(); // 立即显示结果
}
void CMyFrame::DisplayResult(void) // 显示结果
{
CString str;
int iResult = m_CalcManager.GetResult();
str.Format("Result is %d",iResult);
AfxMessageBox(str);
}
class CDataInputDlg : public CDialog
{
public:
int m_iParamA;
...
}class CCalcManager
{
int m_iParam[3];
int m_iResult;
public:
BOOL SetParam(int iParam, int iIndex) // 输入参数到本类中。
{
if(iIndex > 3 || iIndex < 0) return FALSE;
m_iParam[iIndex] = iParam;
return TRUE;
};
int MakeCalculate() // 调用响应算法进行计算,下面是简化版
{
m_iResult = 0;
for(int i=0; i<3; i++){
m_iResult += m_iParam[i];
}
return m_iResult; // 返回计算结果
};
int GetResult(void){return m_iResult;} // 其它时刻取得计算结果
BOOL Create(){ return TRUE; }; // 创建函数
...
}class CMyFrame : public CFrameWnd // 用户界面
{
CCalcManager m_CalcManager; // 声明一个CCalcManager的成员变量,
// 该变量也可以声明为全局。
...
}
void CMyFrame::OnCreate(...)
{
m_CalcManager.Create(); // 初始化该成员变量。
...
}void CMyFrame::OnMenuDataInput(void) // 其中一个数据输入对话框
{ // 其他对话框代码和这个类似。
int iParam = 0;
CDataInputDlg dlg;
if( IDOK == dlg.DoModel() ){
iParam = dlg.m_iParamA;
m_CalcManager.SetParam(iParam, 0); // 设置(存储)该变量。
}
}
void CMyFrame::OnMenuCalc(void) // 计算
{
m_CalcManager.MakeCalculate();
DisplayResult(); // 立即显示结果
}
void CMyFrame::DisplayResult(void) // 显示结果
{
CString str;
int iResult = m_CalcManager.GetResult();
str.Format("Result is %d",iResult);
AfxMessageBox(str);
}
解决方案 »
- 进行TCP通讯时,如果通讯双方的字符编码格式不一样,会怎么样?
- 全局变量定义
- 如何通过计算机名获得IP
- 视图间的切换各它们之间传递数值的问题?
- 一个搞不清的问题,客户端closesocket后再connect就报WSAENOTCONN这个错误,为啥,---*们 虾们(详细问题如下)
- 怎样用SOCKET实现从服务器端往客户端发送多个文件(文件类型不同,有txt,jpeg.gif.mpeg等)?
- !!欢迎加入阿尔法工作室(ALPHA STUDIO)!!
- 幼儿问题???对话框怎样一进去光标就停在编辑框上,我用在OnInitDialog()里用.setfocus()好象不行
- 非高手不能解答也
- 如何擦除内存DC中的圆形?
- 一个读串口的问题!
- 100分求救
建议:最好把数据输入放在同一个对话框内,3个对话框很不方便。在对话框中显示原先输入的数据的时候从CCalcManager中调数据就可以了。需要自己添加GetParam(...)函数。