CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

200分求助,以MainFrame做父窗口的Dailaog,收不到鼠标消息?在线等待!

楼主springland()2005-02-01 13:52:37 在 VC/MFC / 基础类 提问

我建立一个MDI工程,初始的时候在app里加一句cmdInfo.m_nShellCommand   =   CCommandLineInfo::FileNothing   ;   让ChildFrame不显示.只有一个空的MainFrame.  
  ok,现在再在MainFrame里面生成显示一个dialog,然后问题就出来了:MainFrame里面的Dailog不接受鼠标消息。(用tab   键倒是可以循环切换控件焦点。)无论怎样点击这个Dialog,它的caption条一直都是灰色的。  
   
  后来又测试了一下,无论初始的时候是否显示ChildFrame,MainFrame里面的Dailaog都收不到消息.  
  疑惑的是:有ChildFrame的时候好理解,因为消息都被ChildFrame截获了,MainFrame当然收不到。  
  可是为什末   没有ChildFrame的时候,MainFrame也收不到消息?  
   
  请问各位高人:   如何可以让MainFrame里面的Dailaog接受到鼠标消息?  
   
  在线等待,解决问题后立马加分。  
  一次分不够加,我会再开一个帖子给您加分。  
  问题点数:100、回复次数:15Top

1 楼vcleaner(我没当大哥很久了.......)回复于 2005-02-01 13:55:43 得分 30

很有兴趣。如果可以的话,可以将程序源代码发到:xia_qingqi@broadxent.com.cn  
  我们一起研究!注明帖子的URL!Top

2 楼happyparrot(快乐鹦鹉)回复于 2005-02-01 14:10:39 得分 5

怎么可能?你的对话框是模式的还是非模式的呢?  
  应该是你别的地方有问题吧。Top

3 楼vcleaner(我没当大哥很久了.......)回复于 2005-02-01 14:14:01 得分 0

也许参考这个例子使用FormView更好的能解决你的问题。  
  http://www.vckbase.com/document/viewdoc/?id=691  
   
  至于为什么不能接受鼠标消息,我估计是你的代码问题,不应该是系统消息传递的问题。Top

4 楼xuzheng318(忧郁王子)回复于 2005-02-01 14:15:40 得分 5

都是星星,进来帮顶学习!Top

5 楼xdsh00(蛋糕芝麻叮叮糖)回复于 2005-02-01 17:17:34 得分 0

你确定把cmdInfo.m_nShellCommand   =   CCommandLineInfo::FileNothing   ;这行注释掉就可以显示对话框了吗??Top

6 楼DentistryDoctor(Data Recovery -- http://www.powerdatarecovery.com)回复于 2005-02-01 17:20:31 得分 0

不可能吧。Top

7 楼springland()回复于 2005-02-02 03:50:18 得分 0

谢谢诸位关注!  
   
  代码部分如下:  
  (只有对话框在child的模式下才收不到鼠标消息,popup和Overlapped就可以响应鼠标消息。但问题是只有child的对话框才是我所需要的。头疼!)  
   
  //in   MainFrm.h  
   
  class   CMainFrame   :   public   CMDIFrameWnd  
  {  
  private:  
   
  CTestDlg m_Dlg   ; //add   a   dialog   in   MainFrm.  
  ... //set   dialog   in   popup   or   Overlapped   mode   ,   the   dialog   can   recive   msg  
  } //and   if   set   it   in   child   mode   ,   it   can   revice   none   mouse   msg   .  
   
   
  //in   MainFrm.cpp  
   
  int   CMainFrame::OnCreate(LPCREATESTRUCT   lpCreateStruct)  
  {  
  if   (CMDIFrameWnd::OnCreate(lpCreateStruct)   ==   -1)  
  return   -1;  
  ...  
   
  m_Dlg.Create   (   IDD_DIALOG1   ,   this   )   ;  
  m_Dlg.ShowWindow   (   SW_SHOW   )   ;  
  m_Dlg.CenterWindow   ()   ;  
  }Top

8 楼springland()回复于 2005-02-02 04:04:05 得分 0

vcleaner(我没做大哥已经很久了.......)   :邮件已发送,请查收。不过你介绍那个例子好像没有这个奇怪的问题。  
  happyparrot(快乐鹦鹉)   :对话框是非模式的。  
  xdsh00(蛋糕芝麻叮叮糖):不管是不是注释掉那行,dialog都都不响应   鼠标。  
  Top

9 楼pomelowu(羽战士)回复于 2005-02-02 07:55:47 得分 30

MainFrame收不到消息还是Dialog收不到消息?疑惑中Top

10 楼springland()回复于 2005-02-02 18:33:36 得分 0

MainFrame   收不到   鼠标的消息,   因为dialog   是MainFrame的child,所以也收不到消息。  
  可能是和mfc的消息流程有关的。  
  不知道如何可以自己引导一下消息的流向?  
  Top

11 楼Imagist()回复于 2005-02-02 19:57:04 得分 30

int   CMainFrame::OnCreate(LPCREATESTRUCT   lpCreateStruct)  
  {  
    ...  
          m_Dlg.Create   (   IDD_DIALOG1   ,   this   )   ;   //问题出在这儿!  
    ...  
  }  
   
  你创建的是一个非模态的对话框,消息处理需要你自己做的。  
  你在CTestDlg有相关的消息实现吗?    
   
  如果你嫌自己作消息处理麻烦,就改用模态对话框(就像一个基于对话框的程序那样):  
   
  int   CMainFrame::OnInitiate()  
  {  
    ...  
          CTestDlg   dlg;  
          dlg.DoModal();  
    ...  
  }  
   
  Top

12 楼springland()回复于 2005-02-02 22:14:44 得分 0

谢谢   Imagist   的关注!  
   
  问题有3点:  
  1。   在我的这个问题中,对话框接收不到任何鼠标消息。自然就无从自己处理消息的问题。  
          比如在对话框中加一个OnLButtonUp的响应函数,在其中设置断点。你无论如何点击对话框,程序都不会进入那个断点。  
          着重说明一下:dialog的父窗口,MainFrame也接收不到鼠标消息。比如LButtonUp。  
   
  2。   create的问题。   在CView中这样出来的Create出来的对话框,就可以响应鼠标。在MainFrame中就不可以。  
   
  3。   DoModal()出来的对话框当然100%可以响应消息。但是这样做出来的程序运行效果是:一运行,先弹出对话框。(MainFrame不出现),点击OK按钮之后,对话框消失,接着MainFrame才会显示出来。这不是我所希望的效果。Top

13 楼Imagist()回复于 2005-02-02 22:31:15 得分 0

恩,你可以这么添加代码,这样就没有你上面的问题了:  
  BOOL   CYourApp::InitInstance()  
  {  
        ...  
        pMainFrame->ShowWindow(m_nCmdShow);  
        pMainFrame->UpdateWindow();  
        CYourDlg   dlg;  
        dlg.DoModal();  
        return   TRUE;  
  }Top

14 楼springland()回复于 2005-02-04 00:55:11 得分 0

大家再想想看有没有更好的办法?  
  星期一结帖~Top

15 楼springland()回复于 2005-02-08 12:09:31 得分 0

已经结帖,谢谢大家。  
  请大家到  
  http://community.csdn.net/Expert/topic/3780/3780175.xml?temp=.4773828  
  中回贴,我好把另一半的分数加上来。Top

相关问题

  • 200分求助,以MainFrame做父窗口的Dailaog,收不到鼠标消息?在线等待!
  • 以MainFrame做父窗口的Dailaog,收不到鼠标消息?(续分贴)
  • 以MainFrame做父窗口的Dailaog,收不到鼠标消息?(续分贴)
  • 在线等待!鼠标指针问题!
  • 如何从根本上屏蔽鼠标?(急,在线等待)
  • 有关鼠标钩子问题——————在线等待。。。。急
  • 鼠标形状变化问题?(在线等待)
  • 在线等待, 关于显示鼠标提示信息问题
  • 在线等待,如何设置鼠标提示信息
  • **在线等待**,怎样实现鼠标提示信息

关键词

  • 鼠标
  • 消息
  • 代码
  • 模式
  • 对话框
  • mainframe
  • dailaog
  • childframe
  • dlg
  • dialog

得分解答快速导航

  • 帖主:springland
  • vcleaner
  • happyparrot
  • xuzheng318
  • pomelowu
  • Imagist

相关链接

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

广告也精彩

反馈

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