在 MFC MDI 应用程序中打开在 CDockablePane 中选择的文件

问题描述 投票:0回答:1

我想打开一些文件,双击

CDockablePane
(Visual Studio 模板 MDI 项目中的
CFileView
)。这里我得到了一个文件名:

BOOL CFileView::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_LBUTTONDBLCLK) {
    HTREEITEM hRes=m_wndFileView.GetSelectedItem();
    CString s = m_wndFileView.GetItemText(hRes);
}
}

现在我想要

OnFileNew
OnFileOpen
带参数(我的文件名),但只有我能从
CFileView
做的是消息发送:

AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_FILE_NEW, 0);

如何将此带有参数的消息发送到我的

CDocument
类,或者直接从我的
CDocument::OnNewDocument
类使用带参数的
CFileView

visual-studio visual-c++ mfc
1个回答
0
投票

我找到了解决办法;欢迎任何改进建议:

BOOL CFileView::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_LBUTTONDBLCLK) 
    {
    HTREEITEM hRes=m_wndFileView.GetSelectedItem();
    CString s = m_wndFileView.GetItemText(hRes);
    CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
    pMainFrame->m_wndOutput.AddStringStatusTab(_T("File Open Process"));
    POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
    if (pos != nullptr) 
    {
        CDocTemplate* pTemplate = AfxGetApp()->GetNextDocTemplate(pos);
        CXUpm13Doc* pDoc = static_cast<CXUpm13Doc*>(pTemplate->CreateNewDocument());
        pDoc->initialEntity = _T("https://example.site/main/product_all?Cat="+ findCat(s));
        pDoc->OnNewDocument();
        if (pDoc != nullptr) {
            CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDoc, nullptr);
            if (pFrame != nullptr) {
                pTemplate->SetDefaultTitle(pDoc);
                pTemplate->InitialUpdateFrame(pFrame, pDoc, TRUE);
            }
        }
    }
    }
    return CDockablePane::PreTranslateMessage(pMsg);
}
© www.soinside.com 2019 - 2024. All rights reserved.