CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问如何在菜单中调出无模式对话框?

楼主laomai(老迈)2003-12-01 16:47:22 在 VC/MFC / 基础类 提问

如题,我自己按书上的方法写了一个小程序,目的是练习在菜单中调出一个无模式对话框,  
  对话框的类名为CTestDlg  
  相关的代码如下:  
  void   CTestDlg::Create()                 //这是我自己加的一个成员函数,是照书写的  
  {    
      CDialog::Create(CTestDlg::IDD);//这一句是照书写的,我还没太明白它的作用  
  }  
   
  CTestDlg::CTestDlg(CWnd*   pParent   /*=NULL*/)         //默认的构造函数  
  :   CDialog(CTestDlg::IDD,   pParent)  
  {    
        //代码为自动生成的,没有改动,故省略  
  }  
  在CView里添加了一个CTestDlg的指针,并包含了头文件"TestDlg.h"  
  class   CTestView   :   public   CView  
  {  
  protected:  
      CTestDlg*   pDlg;    
  };  
   
  cview中相关代码如下  
  CTestView::CTestView()  
  {  
      //   TODO:   add   construction   code   here  
      pDlg   =   new   CTestDlg((CWnd*)this);  
  }  
  CTestView::~CTestView()  
  {  
      delete   pDlg;  
  }  
  void   CTestView::OnTestDlg()                       //菜单响应函数  
  {  
      //   TODO:   Add   your   command   handler   code   here  
      if   (pDlg->GetSafeHwnd()==0)  
      {  
          pDlg->Create();  
      }  
  }  
  编译无错误,但运行时点菜单后对话框并没显示出来,请问应该如何修改?  
   
   
  问题点数:100、回复次数:12Top

1 楼l_b_q()回复于 2003-12-01 16:49:28 得分 0

pDlg->ShowWindow(WM_SHOW)Top

2 楼laomai(老迈)回复于 2003-12-01 16:51:39 得分 0

楼上的,是pDlg->ShowWindow(WM_SHOWWINDOW)吧  
  我加了,还是不好用:-(Top

3 楼fuxf(布衣)回复于 2003-12-01 16:56:28 得分 0

这位仁兄可能忘记对话框ID。  
  查查看!!!Top

4 楼arvid_gs(west)回复于 2003-12-01 17:01:06 得分 10

CMyDialog*   pDialog;  
   
  void   CMyWnd::OnSomeAction()  
  {  
        //pDialog   initialized   to   NULL   in   the   constructor   of   CMyWnd   class  
        pDialog   =   new   CMyDialog();  
        //Check   if   new   succeeded   and   we   got   a   valid   pointer   to   a   dialog   object  
        if(pDialog   !=   NULL)  
        {  
              BOOL   ret   =   pDialog->Create(IDD_MYDIALOG,this);  
              if(!ret)       //Create   failed.  
                    AfxMessageBox("Error   creating   Dialog");  
              pDialog->ShowWindow(SW_SHOW);  
        }  
        else  
              AfxMessageBox("Error   Creating   Dialog   Object");  
  }  
  Top

5 楼arvid_gs(west)回复于 2003-12-01 17:02:20 得分 0

pDialog->Create(IDD_MYDIALOG,this);这是关键◎Top

6 楼laomai(老迈)回复于 2003-12-01 17:08:47 得分 0

我也找到关键了:-)  
  应该是  
          pDlg->ShowWindow(SW_SHOW);  
   
  另外,也请教一下,  
      if   (pDlg->GetSafeHwnd()==0)这一句的道理是什么?为什么要判断指针是否为空呢?  
  Top

7 楼l_b_q()回复于 2003-12-01 17:10:53 得分 60

 
  输入Create()的两个参数,第一个是对话框资源号,第二个是父窗口指针;  
  然后调用pDlg->ShowWinddow(SW_SHOW);刚才打错了,不好意思Top

8 楼l_b_q()回复于 2003-12-01 17:13:14 得分 0

if   (pDlg->GetSafeHwnd()==0)  
   
  这个是判断当前指针指向的窗口句柄是否为NULL,如果不为空,直接ShowWindow就可以了Top

9 楼laomai(老迈)回复于 2003-12-01 17:23:00 得分 0

哦,就是说如果为空的话还要先create是吗?Top

10 楼ISunwu(刀口蒙特)回复于 2003-12-01 17:31:29 得分 15

是阿,这句话主要是为了防止重复创建。Top

11 楼keiven()回复于 2003-12-01 17:33:37 得分 15

对啊,为空的话就是窗口还没创建。没有创建当然不能显示出来的啦!~Top

12 楼laomai(老迈)回复于 2003-12-01 17:42:03 得分 0

基本明白了,谢谢朋友们!Top

相关问题

  • 如何在程序里调出开始菜单里那个“运行”对话框?
  • 模式对话框
  • 对话框模式下创建弹出式菜单的问题请教!
  • 对话框弹出菜单
  • 模式对话框问题
  • 无模式对话框!!!急
  • 模式对话框问题
  • 模式对话框问题
  • 请问:我自己编辑了一个对话框,在主菜单上也添加了相应菜单命令,可是就是不知道,怎样通过点击菜单,调出这个对话框来,大侠们帮帮忙喽!
  • 模式与无模式对话框?

关键词

  • 指针
  • 函数
  • 代码
  • null
  • pdlg
  • 对话框
  • pdialog
  • ctestdlg
  • ctestview
  • 菜单

得分解答快速导航

  • 帖主:laomai
  • arvid_gs
  • l_b_q
  • ISunwu
  • keiven

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo