mfc switch case
时间: 2024-03-08 10:44:11 浏览: 15
MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows应用程序的C++类库。在MFC中,switch case语句用于根据不同的条件执行不同的代码块。
在MFC中,switch case语句的语法与C++中的语法相同。它由一个表达式和多个case标签组成,每个case标签后面跟着要执行的代码块。当表达式的值与某个case标签的值匹配时,对应的代码块将被执行。如果没有匹配的case标签,可以使用default标签来执行默认的代码块。
下面是一个使用switch case语句的MFC示例:
```
int nValue = 2;
switch (nValue)
{
case 1:
// 执行代码块1
break;
case 2:
// 执行代码块2
break;
case 3:
// 执行代码块3
break;
default:
// 执行默认代码块
break;
}
```
在上面的示例中,根据nValue的值,将会执行对应的代码块。如果nValue的值为2,则会执行代码块2。
相关问题
用MFC写一个用回调代替switch case代码段
好的,我可以回答这个问题。使用回调函数代替 switch case 代码段可以提高代码的可读性和可维护性。具体实现方法如下:
1. 定义一个函数指针类型,用于指向回调函数。
2. 在需要使用 switch case 的地方,将每个 case 对应的操作封装成一个函数,并将函数指针指向这些函数。
3. 在 switch case 中,使用函数指针调用对应的函数,完成相应的操作。
这样,当需要添加新的 case 时,只需要添加一个新的函数,并将函数指针指向它即可,不需要修改原有的代码。
示例代码如下:
typedef void (*CallbackFunc)(int);
void func1(int arg)
{
// do something
}
void func2(int arg)
{
// do something
}
void func3(int arg)
{
// do something
}
int main()
{
CallbackFunc callbacks[] = {func1, func2, func3};
int choice = 1;
callbacks[choice](10); // 调用 func2 函数
return 0;
}
mfc计算器
MFC计算器可以通过以下步骤实现:
1. 在Visual Studio中创建一个MFC应用程序项目。
2. 在资源视图中添加对话框资源。
3. 在对话框中添加按钮和编辑框控件。
4. 为每个按钮添加单击事件处理程序,并在事件处理程序中实现计算器逻辑。
5. 使用MFC框架提供的CString类来处理数字和结果的显示。
这里提供一个简单的示例代码:
在对话框类的头文件中添加以下成员变量:
```
CString m_strInput; // 输入的数字字符串
CString m_strResult; // 计算结果字符串
double m_dNum1; // 第一个操作数
double m_dNum2; // 第二个操作数
char m_chOperator; // 操作符
BOOL m_bInputNum2; // 是否正在输入第二个数字
```
在OnInitDialog()函数中初始化变量:
```
m_strInput = _T("");
m_strResult = _T("0");
m_dNum1 = 0;
m_dNum2 = 0;
m_chOperator = ' ';
m_bInputNum2 = FALSE;
UpdateData(FALSE);
```
在数字按钮的单击事件处理程序中,将数字添加到m_strInput中:
```
void CMyDlg::OnBnClickedBtnNum(UINT nID)
{
if (m_bInputNum2)
{
m_strInput.Empty();
m_bInputNum2 = FALSE;
}
CString strNum;
strNum.Format(_T("%d"), nID - IDC_BTN_NUM0);
m_strInput += strNum;
UpdateData(FALSE);
}
```
在操作符按钮的单击事件处理程序中,将输入的数字转换为实数并保存到m_dNum1中,并保存操作符:
```
void CMyDlg::OnBnClickedBtnOp(UINT nID)
{
if (m_strInput.IsEmpty())
return;
m_dNum1 = _ttof(m_strInput);
m_chOperator = nID - IDC_BTN_ADD + '+';
m_strInput.Empty();
m_bInputNum2 = TRUE;
UpdateData(FALSE);
}
```
在等号按钮的单击事件处理程序中,将输入的数字转换为实数并保存到m_dNum2中,并根据操作符计算结果:
```
void CMyDlg::OnBnClickedBtnEqual()
{
if (m_strInput.IsEmpty())
return;
m_dNum2 = _ttof(m_strInput);
switch (m_chOperator)
{
case '+':
m_dNum1 += m_dNum2;
break;
case '-':
m_dNum1 -= m_dNum2;
break;
case '*':
m_dNum1 *= m_dNum2;
break;
case '/':
m_dNum1 /= m_dNum2;
break;
}
m_strResult.Format(_T("%g"), m_dNum1);
m_strInput.Empty();
m_bInputNum2 = FALSE;
UpdateData(FALSE);
}
```
其他操作符按钮的单击事件处理程序类似,只需要修改操作符即可。