关于MFC MDI 子窗口的创建

leson0628 2014-04-25 11:40:01
小弟对 MFC 接触不多,最近公司要求要设计一个包含多个子窗口的 UI。

一开始我参考了MFC自己生成的代码,但研究了半天也不知道如何将空白文件成我想要的样子(因为我只会拉控件)

void CTESTApp::OnFileNew() 
{
CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd);
pFrame->CreateNewChild(RUNTIME_CLASS(CChildFrame), IDR_CTI_UITYPE, m_hMDIMenu, m_hMDIAccel);
}



后来我新增了一个 Dialog 资源,并将 style 改为 child,再新增一个类别 CA123Dlg,最后在以下方函式呼叫它。

void CTESTApp::OnA123()
{
static CA123Dlg m_A123;
m_A1.Create( IDD_A123, AfxGetApp()->m_pMainWnd);
CRect rc;
rc.left = 10;
rc.top = 10;
rc.bottom = 335;
rc.right = 510;
m_A123.MoveWindow( rc );
m_A123.ShowWindow( SW_SHOW );
}


但执行的结果,子视窗的标题栏变得无法拖动,有没有什么解决方案?
...全文
867 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
制作bug 2015-06-14
  • 打赏
  • 举报
回复
怎么解决的?可以分享一下吗?
leson0628 2014-04-29
  • 打赏
  • 举报
回复
已解决,虽然没有用到大家提供的意见,不过还是很感谢大家!!
孤客天涯 2014-04-25
  • 打赏
  • 举报
回复
引用 4 楼 u013769334 的回复:
抱歉,小弟是新人,MFC直接向导生成MDI应用程序的确是很好用,但问题在于我只会以拉控件的方式来添加控件,而MFC生成的文档却是一片空白,由于是点击 "开新档案" 后才生成子视窗,所以没办法用拉控件的方式 当然,如果是我理解错了,那可以教我该怎么做吗?感激不尽!!
你向导按默认的生成的视图是View视图,你要在向导中把生成的视图改成CFormView,这样你就可以拖控件上来
leson0628 2014-04-25
  • 打赏
  • 举报
回复
抱歉,小弟是新人,MFC直接向导生成MDI应用程序的确是很好用,但问题在于我只会以拉控件的方式来添加控件,而MFC生成的文档却是一片空白,由于是点击 "开新档案" 后才生成子视窗,所以没办法用拉控件的方式



当然,如果是我理解错了,那可以教我该怎么做吗?感激不尽!!
schlafenhamster 2014-04-25
  • 打赏
  • 举报
回复
static CA123Dlg m_A123;// 干嘛 要 m_ ? m_A1.Create( IDD_A123, AfxGetApp()->m_pMainWnd);// 为什么 是 m_A1 ?
lis2012 2014-04-25
  • 打赏
  • 举报
回复
CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CAxAppDoc),
		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
		RUNTIME_CLASS(CAxAppView));
	AddDocTemplate(pDocTemplate);
这是生成单文档的,你可以通过模板生成一个多文档程序,默认提供生成new document功能
孤客天涯 2014-04-25
  • 打赏
  • 举报
回复
MFC直接向导生成MDI应用程序就可以了,干吗还这样折腾?
Eleven 2014-04-25
  • 打赏
  • 举报
回复
View类基类选择CFormView
孤客天涯 2014-04-25
  • 打赏
  • 举报
回复
leson0628 2014-04-25
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
static CA123Dlg m_A123;// 干嘛 要 m_ ? m_A1.Create( IDD_A123, AfxGetApp()->m_pMainWnd);// 为什么 是 m_A1 ?
纯粹是打错,因为我本来不叫这个名子
引用 5 楼 jason_wentzel 的回复:
你向导按默认的生成的视图是View视图,你要在向导中把生成的视图改成CFormView,这样你就可以拖控件上来
可以说的详细一点吗?要改哪边
引用 2 楼 lis2012 的回复:
CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CAxAppDoc),
		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
		RUNTIME_CLASS(CAxAppView));
	AddDocTemplate(pDocTemplate);
这是生成单文档的,你可以通过模板生成一个多文档程序,默认提供生成new document功能
我会尝试看看,感谢啰!!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧