在使用Visual C 6中的MFC时遇到的一个问题
建立一个SDI工程,基类选择为CView,新建一个对话框资源,并为其建立相应的类。在CMainFrame中将其初始化并显示出来,但是这个对话框中的所有控件都不可以使用,但...
建立一个SDI工程,基类选择为CView,新建一个对话框资源,并为其建立相应的类。在CMainFrame中将其初始化并显示出来,但是这个对话框中的所有控件都不可以使用,但并非是Disable状态,而是无论使用鼠标还是键盘都无法将焦点移到这个对话框上,导致这个对话框上像是蒙上了一块玻璃板,不响应任何鼠标动作。请问产生的原因是什么?如何解决?
如果基类选为CFormView,则其默认带的那个IDD_XX_FORM对话框上的控件都是可用的,另外新建立的对话框上的控件依旧不可用,表现和上述现象一致。
对话框风格为Child,No Border,我为CMainFrame添加了一个对话框类的成员变量,CTestDlg *m_pdlgTestDlg; 并且在CMainFrame::OnCreate()中对其进行初始化,语句如下,m_pdlgTestDlg = new CTestDlg(); m_pdlgTestDlg->Create(IDD_TEST, this); m_pdlgTestDlg->ShowWindow(SW_SHOW); 对话框可以显示出来,但是不能操作上面的任何控件,按钮,等等之类的东西。我主要的目的是想让这个对话框看起来是SDI窗口中的东西,而不是一个独立的对话框。 展开
如果基类选为CFormView,则其默认带的那个IDD_XX_FORM对话框上的控件都是可用的,另外新建立的对话框上的控件依旧不可用,表现和上述现象一致。
对话框风格为Child,No Border,我为CMainFrame添加了一个对话框类的成员变量,CTestDlg *m_pdlgTestDlg; 并且在CMainFrame::OnCreate()中对其进行初始化,语句如下,m_pdlgTestDlg = new CTestDlg(); m_pdlgTestDlg->Create(IDD_TEST, this); m_pdlgTestDlg->ShowWindow(SW_SHOW); 对话框可以显示出来,但是不能操作上面的任何控件,按钮,等等之类的东西。我主要的目的是想让这个对话框看起来是SDI窗口中的东西,而不是一个独立的对话框。 展开
8个回答
展开全部
不应该在CMainFrame类中初始化
而应该在CxxxApp中初始化,并使用有模式对话框
假如你加入的对话框资源对应的类为CxthDlg
则在CxxxApp类中这样调用:
CxthDlg xthDlg;
xthDlg.DoModal();
这样对话框就不会出现你说的那种情况了
使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建有模式对话框的方法是调用CDialog::DoModal()。
而应该在CxxxApp中初始化,并使用有模式对话框
假如你加入的对话框资源对应的类为CxthDlg
则在CxxxApp类中这样调用:
CxthDlg xthDlg;
xthDlg.DoModal();
这样对话框就不会出现你说的那种情况了
使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建有模式对话框的方法是调用CDialog::DoModal()。
展开全部
我也在做C++MFC 的毕业设计 一窍不通 倒呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我试了一下,没有什么不可以的啊,你是怎么写的代码?在哪写的?再说详细点,我帮你解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答我就不来了,我推荐一本书给你看看吧:
可能里面没有你想要的,但一定会有你需要的
===========================================================
侯俊杰《深入浅出MFC》
这是一本关于MFC核心类库的书。全书深入浅出地分析了MFC的关键要素,揭示了MFC以面向对象的方法简化Windows编者编程的奥秘。内容可以分5个方面:
第一,讨论MFC对Windows对象和底层API的封装,介绍MFC的窗口类、设备上下文类、GDI类的使用与实现,以及根CObject的特性和实现方法。第二,讨论了MFC的窗口过程和消息映射,第三,讨论了MFC的文档一视编程模式,第四,讨论了MFC的动态链接库和对多进程、特别是多线程编程的支持机制,第五,讨论了一些MFC类的实现,本书的目的在于帮助读者了解或深入地理解、更好地使用MFC。
本书分为四大篇。第一篇提出学习MFC程序设计之前的必要基础,包括Widnows程序的基本观念以及C++的高阶议题。“学前基础”是相当主观的认定,不过,甚于我个人的学习经验以及教学经验,我的挑选应该颇具说服力。第二篇介绍Visual C++整合环境开发工具。本篇只不过是提纲挈领而已,并不企图取代 Visual C++使用手册。然而对于软件使用的老手,此篇或已足以让您掌握Visual C++整合环境。工具的使用虽然谈不上学问,但在视觉化软件开发过程中扮演极重角色,切莫小觑它。 第三篇介绍application framework的观念,以及MFC骨干程序,所谓骨干程序,是指Visual C++的工具AppWizard所产生出来的程序码。当然,AppWizard会根据你的选项做出不同的程序码,我所据以解说的,是大众化选项下的产品。第四篇以微软公司附于Visual C++光碟片上的一个范例程序Scribble为主轴,一步一步加上新的功能。并在其间深入介绍Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping、Command Routing等核心技术。这些技术正是其他书籍最缺乏的部分。此篇之最后数章则脱离Scribble程序,另成一格。
迅雷下载:
http://wstatic.xunlei.com/content/74480F64EEE7BED3A2A3F4CE6E33839D399DF2F7.html
可能里面没有你想要的,但一定会有你需要的
===========================================================
侯俊杰《深入浅出MFC》
这是一本关于MFC核心类库的书。全书深入浅出地分析了MFC的关键要素,揭示了MFC以面向对象的方法简化Windows编者编程的奥秘。内容可以分5个方面:
第一,讨论MFC对Windows对象和底层API的封装,介绍MFC的窗口类、设备上下文类、GDI类的使用与实现,以及根CObject的特性和实现方法。第二,讨论了MFC的窗口过程和消息映射,第三,讨论了MFC的文档一视编程模式,第四,讨论了MFC的动态链接库和对多进程、特别是多线程编程的支持机制,第五,讨论了一些MFC类的实现,本书的目的在于帮助读者了解或深入地理解、更好地使用MFC。
本书分为四大篇。第一篇提出学习MFC程序设计之前的必要基础,包括Widnows程序的基本观念以及C++的高阶议题。“学前基础”是相当主观的认定,不过,甚于我个人的学习经验以及教学经验,我的挑选应该颇具说服力。第二篇介绍Visual C++整合环境开发工具。本篇只不过是提纲挈领而已,并不企图取代 Visual C++使用手册。然而对于软件使用的老手,此篇或已足以让您掌握Visual C++整合环境。工具的使用虽然谈不上学问,但在视觉化软件开发过程中扮演极重角色,切莫小觑它。 第三篇介绍application framework的观念,以及MFC骨干程序,所谓骨干程序,是指Visual C++的工具AppWizard所产生出来的程序码。当然,AppWizard会根据你的选项做出不同的程序码,我所据以解说的,是大众化选项下的产品。第四篇以微软公司附于Visual C++光碟片上的一个范例程序Scribble为主轴,一步一步加上新的功能。并在其间深入介绍Runtime Type Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message Mapping、Command Routing等核心技术。这些技术正是其他书籍最缺乏的部分。此篇之最后数章则脱离Scribble程序,另成一格。
迅雷下载:
http://wstatic.xunlei.com/content/74480F64EEE7BED3A2A3F4CE6E33839D399DF2F7.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请描述的再详细一点,可能是没能完全理解你的问题。因为我试的没有任何问题啊。“在CMainFrame中将其初始化并显示出来”具体是怎么写的呢?
我在CMainFrame::OnCreate里加上
CMyDlg dlg;
dlg.DoModal();
完全没问题的。
我在CMainFrame::OnCreate里加上
CMyDlg dlg;
dlg.DoModal();
完全没问题的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议按照windows app winzard的标准生成步骤进行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询