200分求助,以MainFrame做父窗口的Dailaog,收不到鼠标消息?在线等待!
我建立一个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




