注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lb8820265的个人空间 https://home.eeworld.com.cn/space-uid-527961.html [收藏] [复制] [分享] [RSS]
日志

串口示波器教程(2)非模态对话框建立

已有 1270 次阅读2015-7-21 16:48 |个人分类:MFC| 串口, 示波器, 非模态对话框

        讲非模态对话框建立是因为面临一个问题,将示波器控件放在哪好呢,是放在串口这个面板上还是另外新建一个对话框,最后决定采用非模态对话框用来显示曲线,两个对话框间用SendMessage或新建类来传递消息。如果大家直接在串口面板上放示波器那么可以直接跳过非模态对话框的建立与传递消息等许多步奏。

         VC软件上面点击“插入—>窗体”弹出对话框,将名称改为IPlotX,然后确定,图如下:

lbDlg.h中添加#include "iPlotX.h"如下图所示:

lbDlg.hlbDlg类添加private成员变量private:  iPlotX *dlg;如下图所示:

lbDlg类的构造函数中初始化成员变量dlg=NULL;如下图所示:

将串口控件上面的确定按钮改为“示波器”按钮并改函数名如下图所示:

在函数中添加如下代码:注意此段代码是判断是防止重复打开,同时Create函数的第二个参数用的GetDesktopWindow()作用是使弹出的非模态对话框不会总是在主对话框上面。如果需要总是在上面可以用this代替。

         if (NULL == dlg)

 {

dlg=new iPlotX;

dlg->Create(IDD_IPLOTX_DIALOG,GetDesktopWindow());

 }

dlg->ShowWindow(SW_SHOW);

}

如下图所示:

接着为对话框添加销毁函数,右击新建立的对话框面板选择建立类向导,然后在IPlotXMessage Maps中找到PostNcDestroy消息,然后双击,然后点击Edit Code在弹出的函数中添加   delete this;//删除对象本身 如下图所示:

然后在主Dialog中建立类向导然后同样添加PostNcDestroy消息,然后编辑代码delete dlg;这个代码十分重要,当不先关闭子对话框而先关闭主对话框的话,这句话就起作用了,不加这句话,会导致程序无响应。如下图:

现在编译单击“示波器”按钮将能够弹出刚刚新建的对话框了。


评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章