关于mfc多文档的编程 的问题
1.1 用户可能会打开 多个文档 如何在不同的文档里 打开不同的子对话框?
1.2 多文档的 窗口上的 默认图标 和标题 Demo1 如何更改?
关于mfc多文档的编程 的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:每一个不曾放弃的瞬间,都在为未来积蓄力量。
.MFC多文档编程问题解答
1.1 在不同文档中打开不同的子对话框
方法一:在文档类中管理对话框
// 在您的文档类头文件中 class CMyDocument : public CDocument { public: CMyChildDialog* GetChildDialog() { return &m_childDialog; } protected: CMyChildDialog m_childDialog; // 子对话框成员变量 }; // 在视图类中访问 void CMyView::OnSomeCommand() { CMyDocument* pDoc = GetDocument(); if (pDoc && pDoc->GetChildDialog()) { if (!pDoc->GetChildDialog()->GetSafeHwnd()) { pDoc->GetChildDialog()->Create(IDD_MY_DIALOG, this); } pDoc->GetChildDialog()->ShowWindow(SW_SHOW); } }方法二:动态创建对话框
// 在文档类中 class CMyDocument : public CDocument { public: void CreateDocumentSpecificDialog() { if (!m_pChildDialog) { m_pChildDialog = new CMySpecificDialog(); m_pChildDialog->Create(IDD_SPECIFIC_DIALOG, AfxGetMainWnd()); } m_pChildDialog->ShowWindow(SW_SHOW); } private: CMySpecificDialog* m_pChildDialog; };方法三:使用文档模板关联
// 在应用程序初始化中 BOOL CMyApp::InitInstance() { // 创建多文档模板 CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MYTYPE, RUNTIME_CLASS(CMyDocument), RUNTIME_CLASS(CChildFrame), // 自定义子框架 RUNTIME_CLASS(CMyView)); AddDocTemplate(pDocTemplate); return TRUE; }1.2 更改多文档窗口的默认图标和标题
更改应用程序图标
方法一:在资源文件中修改
- 在资源视图(Resource View)中找到
IDR_MAINFRAME图标 - 右键点击选择"替换图标"
- 导入或创建新的图标文件
方法二:编程方式修改主框架图标
// 在主框架类中 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if(!CMDIFrameWnd::PreCreateWindow(cs)) return FALSE; // 设置窗口标题 cs.style &= ~FWS_ADDTOTITLE; return TRUE; } // 在OnCreate函数中设置图标 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // 设置主窗口图标 HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(hIcon, TRUE); // 大图标 SetIcon(hIcon, FALSE); // 小图标 return 0; }更改文档类型图标和标题
// 在文档模板创建时设置 BOOL CMyApp::InitInstance() { CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MYTYPE, // 资源ID(包含图标、菜单等) RUNTIME_CLASS(CMyDocument), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMyView)); // 设置文档标题 pDocTemplate->SetDocStrings(_T("\nMyDoc\nMy Document\nMy Files (*.my)\n.my")); AddDocTemplate(pDocTemplate); return TRUE; }更改子窗口标题
// 在文档类中重写SetTitle void CMyDocument::SetTitle(LPCTSTR lpszTitle) { // 调用基类设置标题 CDocument::SetTitle(_T("我的自定义标题")); // 或者根据文档内容设置 CString strTitle; strTitle.Format(_T("Demo1 - %s"), GetPathName()); CDocument::SetTitle(strTitle); }资源文件配置
在
resource.h和.rc文件中:// resource.h #define IDR_MAINFRAME 128 #define IDR_MYTYPE 129 // 在.rc文件中 IDR_MAINFRAME ICON "main.ico" IDR_MYTYPE ICON "document.ico"动态修改窗口标题
// 在任何需要的地方 CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); if (pMainFrame) { pMainFrame->SetWindowText(_T("我的应用程序 - Demo1")); }通过以上方法,您可以实现在不同文档中打开不同的子对话框,并自定义多文档应用程序的图标和标题显示。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 在资源视图(Resource View)中找到