gpt4 book ai didi

c++ - 我的MDI中的拖放操作被CRichEditView拦截,并在CRichEditView::GetDocument中崩溃-如何覆盖它?

转载 作者:行者123 更新时间:2023-12-02 10:22:23 24 4
gpt4 key购买 nike

我已经在MFC中编写了一个MDI应用程序,其中的文档窗口除其他外还包含CRichEditView。
当我将文件拖到文档窗口中时,放到CRichEditView上,它在这里崩溃(来自afxrich.inl):

_AFXRICH_INLINE CRichEditDoc* CRichEditView::GetDocument() const
{
AFXASSUME(m_pDocument != NULL);
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRichEditDoc))); <<< crash!
return (CRichEditDoc*)m_pDocument;
}

发生崩溃是因为m_pDocument不是CRichEditDoc(它是CDocument派生的我的一类)。

但是,我不在乎RichEditView / Ctrl,我想要的是,当我将文件拖放到应用程序中时,它只是作为文档打开。如果我的MDI应用程序为空,则已经发生了这种情况:我将文件拖放到应用程序中并被打开。如果在打开文档窗口时尝试相同的拖放操作,则会如上所述崩溃而不是将其打开。
我尝试了多种解决方案来覆盖此行为,但是没有一种有效:
  • 从(我的扩展)CRichEditView拦截OnDragEnter
  • 使用ON_NOTIFY_REFLECT(EN_DROPFILES,OnEnDropFiles)
  • 从CRichEditView的CRichEditCtrl上调用DragAcceptFiles(false)
  • 在CRichEditCtrl和CRichEditView上都调用RevokeDragDrop()处理
  • 从CMainFrame / CMDIFrameWndEx调用DragAcceptFiles(true)

  • 这些都不能阻止RichEdit进行放置操作(并崩溃),它们似乎根本没有作用。
    我只想让CRichEditView / CRichEditCtrl不截取所放的文件,而是让它截取CMainFrame / CMDIFrameWndEx。

    有谁知道如何解决这个问题?

    最佳答案

    CRichEditView需要CRichEditDoc

    如果不需要CRichEditView,请使用自己的CView实现并隐含所需的消息。

    这是一个很好的MFC drag&drop sample

    还有另一个detailed description

    关于c++ - 我的MDI中的拖放操作被CRichEditView拦截,并在CRichEditView::GetDocument中崩溃-如何覆盖它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537694/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com