我想打开一些文件,双击
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
?
我找到了解决办法;欢迎任何改进建议:
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);
}