弹出模态对话框后此框没反应了。鼠标点其他地方后再点回来对话框变正常。

hiyu333 2003-10-16 05:58:36
弹出模态对话框后此框没反应了。鼠标点其他地方后再点回来对话框变正常。
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
8412230 2003-10-16
  • 打赏
  • 举报
回复
可能是你把代码直接写到 myctreectrl::OnRButtonDown(nFlags, point);的前面了,你可以把这句代码注释掉试试!
hiyu333 2003-10-16
  • 打赏
  • 举报
回复
从一个treectrl里派生一个类myctreectrl,然后在myctreectrl里响应右击弹出菜单,选取命令后执行dlg.DoModal().对话框弹出,弹出后对话框就没反映了,只能先点到其他程序然后再回到本对话框,对话框才有反映。不知为什么?
vcforever 2003-10-16
  • 打赏
  • 举报
回复
能说的清楚一点吗??
zhucde 2003-10-16
  • 打赏
  • 举报
回复
什么意思?不明白
sunblue 2003-10-16
  • 打赏
  • 举报
回复
没遇到过,呵呵
code我看看
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)”。

15,979

社区成员

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

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