请问怎样从一个对话框启动另一个非模态对话框

goodqjf 2003-08-19 11:24:23
help
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
joinrry 2003-08-20
  • 打赏
  • 举报
回复
agree
fengqinggao 2003-08-20
  • 打赏
  • 举报
回复
CYouModelessDlg *pYourDlg = new CYouModelessDlg;
pYourDlg->Create(IDD_YOUR_DIALOGID, this);
pYourDlg->ShowWindow(SW_SHOW);
MFC的视图打印/预览功能基于CView::OnFilePrint和CView::OnFilePrintPreview这两个函数。 如果要对用户自定义对话框)内的子视图进行打印,直接调用该视图的CView::OnFilePrint即可,弹出的“选择打印机”对话框同样也是对话框,覆盖在用户对话框上。 如果要对用户对话框内的视图进行预览,直接调用该视图的CView::OnFilePrintPreview后,预览视图(MFC CPreviewView类实例)内虽然预览正常,但是挡住了用户对话框。由于用户对话框的,导致预览视图上的“打印...”、“上一页”、“下一页”、“放大”、“缩小”、“单页/双页”和“关闭”等按钮均无法响应鼠标点击,处于“假死”状。 解决方法: 第一个解决方法是先关闭用户对话框,再启动预览,详见http://download.csdn.net/detail/oliver_zheng/7639379 第二个解决方法仍然保持用户对话框,但是由于对话框,无法利用主框架窗口CMainFrame作为预览框架,因此要另外创建并显示一个框架窗口(CFrameWnd的派生类),作为预览窗口。 另外创建的框架窗口类名为CPrintPreviewFrameWnd,其对应的单文档视图是CViewPrintPreview类,利用这些关联信息创建一个单文档板,利用此单文档板创建框架窗口,并在其内嵌视图(CViewPrintPreview类)中保存原主框架(CMainFrame)、用户对话框和其上需要打印的视图(CTestView)。然后基于CViewPrintPreview类启动预览和打印(具体过程详见第一个解决办法)。由于CViewPrintPreview的各个相关虚函数诸如OnPreparePrinting、OnBeginPrinting、OnPrepareDC、OnPrint和OnEndPrinting都被重载,用于调用真正需要打印的视图CTestView的各自函数,因此CViewPrintPreview实际上只是个“中介”视图,是连接预览视图(MFC CPreviewView类)和CTestView的桥梁。 当打印或者预览结束后,关闭自行创建的框架窗口CPrintPreviewFrameWnd,利用CViewPrintPreview类中实现保存的信息恢复主框架和用户对话框,恢复打印/预览前的环境。 代码(实现了第二个解决方法)在VC2010下编译通过。第一个解决方法的源码详见http://download.csdn.net/detail/oliver_zheng/7639379
MFC的视图打印/预览功能基于CView::OnFilePrint和CView::OnFilePrintPreview这两个函数 如果要对用户自定义对话框)内的子视图(以下简称A视图)进行打印,直接调用A视图的CView::OnFilePrint即可,弹出的“选择打印机”对话框同样也是对话框,覆盖在用户对话框上。 如果要对用户对话框内的A视图进行预览,直接调用A视图的CView::OnFilePrintPreview后,预览视图(MFC CPreviewView类实例)内虽然预览正常,但是挡住了用户对话框。由于用户对话框的,导致预览视图上的“打印...”、“上一页”、“下一页”、“放大”、“缩小”、“单页/双页”和“关闭”等按钮均无法响应鼠标点击,处于“假死”状。 解决方法: 在调用A视图的CView::OnFilePrintPreview之前,先关闭用户对话框(CDialog::OnCancel),由于这时已不存在用于预览的A视图,再重新创建一个相同的视图(以下简称B视图),以B视图来启动OnFilePrintPreview进行预览。 MFC视图预览的原理是:以主框架窗口(CMainFrame)作为预览框架,隐藏原先的子视图(用CMainFrame::GetActiveView得到的那个,以下简称C视图),用CPreviewView类替换,同时创建包含“打印...”、“放大”、“关闭”等按钮的工具栏(CDialogBar类),最后将CPreviewView::m_pPreviewDC作为C视图OnDraw的CDC*参数传入,这样,虽然调用的是C视图的OnDraw函数,实际上却显示在了CPreviewView视图中,起到了“预览”的效果。在点击预览框架工具栏上的“打印...”按钮后, MFC体系将向原先的主框架(本例中和预览框架是同一个,都是CMainFrame)发送ID_FILE_PRINT的WM_COMMAND消息。在缺省的配置中,这将启动C视图的OnFilePrint,从而在打印机上打出C视图的内容。 在本例中,为了打印B视图,需要在CMainFrame中处理WM_COMMAND/ID_FILE_PRINT,加入额外的条件,来判断对按钮“打印...”的点击是来自B还是C视图的预览框架。在本例中用了一个变量CMainFrame::m_nPrintFrom。根据其取值(0或者1),分别启动B或者C视图的OnFilePrint。 使用方法: 程序示例在VC++2010上通过。主菜单项“打印预览测试”下,有两个子菜单项,“对话框用户视图的打印预览”用于B视图(画出一个圆);“单文档视图的打印预览”用于C视图(画出一个正方形),等同于“文件”主菜单项下的“打印预览(V)”。
第6章 实例116——创建对话框 实例117——创建对话框 实例118——对话框与应用程序之间的数据交换 实例119——对话框与应用程序之间的数据交换 实例120——使用MessageBox消息对话框 实例121——使用AfxMessageBox消息对话框 实例122——使用字体对话框更改文本的字体 实例123——使用颜色对话框选择颜色 实例124——使用文件对话框获取文件路径 实例125——使用多选文件对话框 实例126——重载打开文件对话框,添加删除按钮 实例127——使用查找替换对话框实现查找替换功能 实例128——在程序中使用属性表对话框 实例129——激活使用属性表对话框中的“应用”按钮 实例130——去除属性表对话框中的“应用”按钮 实例131——在对话框中使用属性表 实例132——创建向导对话框 实例133——设置对话框的背景颜色 实例134——使用位图作为对话框背景 实例135——创建半透明对话框窗口 实例136——创建圆形对话框窗口 实例137——全屏幕显示对话框窗口 实例138——动改变对话框窗口大小 实例139——按下Esc键,对话框不关闭 实例140——禁用对话框右上角的关闭按钮 实例141——可在对话框的任意位置拖动对话框 实例142——为对话框程序制作启动画面 实例143——动弹出、关闭对话框 实例144——在对话框上动创建视图

15,979

社区成员

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

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