VC6中两个对话框的同时显示 作者:黄基前

 

对于VC++初学者,可能会遇到这样一个问题:一个基于Dialog的MFC AppWizard应用程序,再Insert一个对话框,如何同时显示这两个对话框呢?

---- 其实这个问题很简单,想要在屏幕上同时显示两个对话框,并且这两个对话框都可以被激活,则至少第二个对话框应该为非模态对话框。启动非模态对话框的方法与启动一个普通窗口的步骤是一样的,即先调用窗口类的Create()函数创建一个窗口对象,再用ShowWindow()使之显示出来即可(值得注意的是:第二个对话框的对象不能为局部变量,否则在退出OnInitDialog时,该对象会被自动关闭,从而导致第二窗口也会关闭)。例如,下列的代码演示了如何在主对话框的OnInitDialog()中启动另一个非模态对话框。

CDialog2 Dlg2; //注意Dlg2不能为
OnInitDialog的局部变量。
BOOL CDialog1::OnInitDialog()
 {
   Cdialog::OnInitDialog();
   Dlg2.Create(IDD_DIALOG2,this );
   Dlg2.ShowWindow(SW_SHOW);
}

---- 编译并运行,怎么样,结果是不是OK了?

转载自中国程序员网站

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会为您提供一个基本的程序框架,您可以根据自己的需求进行修改和完善。 首先,在VC6.0创建一个MFC对话框应用程序,命名为“HumidityMonitor”。 接下来,在资源视图打开对话框资源文件(HumidityMonitorDlg.rc),在其添加以下控件: 1. 一个“静态文本”控件,用于显示当前湿度值; 2. 一个“编辑框”控件,用于输入湿度报警阈值; 3. 一个“按钮”控件,用于设置湿度报警阈值; 4. 一个“静态文本”控件,用于显示报警状态。 将这些控件放置到对话框合适的位置,并设置它们的属性,如大小、位置、对齐方式等。 然后,在对话框类(HumidityMonitorDlg)的头文件(HumidityMonitorDlg.h)定义以下变量和函数: ```C++ // 湿度报警阈值 int m_nThreshold; // 当前湿度值 int m_nHumidity; // 报警状态(0:未报警;1:已报警) int m_nAlarm; // 更新湿度值和显示 void UpdateHumidity(int nHumidity); // 检查是否需要报警 void CheckAlarm(); ``` 在对话框类的实现文件(HumidityMonitorDlg.cpp),实现UpdateHumidity和CheckAlarm函数: ```C++ void CHumidityMonitorDlg::UpdateHumidity(int nHumidity) { m_nHumidity = nHumidity; CString strHumidity; strHumidity.Format(_T("%d%%"), m_nHumidity); GetDlgItem(IDC_STATIC_HUMIDITY)->SetWindowText(strHumidity); // 检查是否需要报警 CheckAlarm(); } void CHumidityMonitorDlg::CheckAlarm() { // 如果当前湿度值超过报警阈值,且当前未报警,则触发报警 if (m_nHumidity > m_nThreshold && m_nAlarm == 0) { m_nAlarm = 1; CString strAlarm; strAlarm.Format(_T("湿度超过%d%%,请注意!"), m_nThreshold); GetDlgItem(IDC_STATIC_ALARM)->SetWindowText(strAlarm); } // 如果当前湿度值未超过报警阈值,且当前已报警,则取消报警 else if (m_nHumidity <= m_nThreshold && m_nAlarm == 1) { m_nAlarm = 0; GetDlgItem(IDC_STATIC_ALARM)->SetWindowText(_T("正常")); } } ``` 接着,在对话框类的OnInitDialog函数,初始化变量和控件: ```C++ BOOL CHumidityMonitorDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 初始化变量 m_nThreshold = 70; // 默认报警阈值为70% m_nHumidity = 0; m_nAlarm = 0; // 初始化控件 GetDlgItem(IDC_EDIT_THRESHOLD)->SetWindowText(_T("70")); // 将报警阈值设为70% GetDlgItem(IDC_STATIC_ALARM)->SetWindowText(_T("正常")); // 报警状态初始化为“正常” return TRUE; } ``` 最后,在对话框类的DoDataExchange函数,添加对“编辑框”控件的数据交换: ```C++ void CHumidityMonitorDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_THRESHOLD, m_nThreshold); } ``` 到此,基本的程序框架已经完成。接下来,您可以添加与湿度传感器交互的代码,并在获取湿度值时调用UpdateHumidity函数即可。同时,您也可以添加一些其他的功能,比如保存报警记录、报警方式设置等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝈蝈俊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值