mfc多文档实现文件视图导航
时间: 2023-05-30 14:02:28 浏览: 166
要在MFC多文档应用程序中实现文件视图导航,可以按照以下步骤进行操作:
1. 在应用程序类中添加成员变量,用于存储当前活动的视图指针:
```c++
class CMyApp : public CWinApp
{
public:
// ...
CView* m_pActiveView;
};
```
2. 在每个视图类的OnInitialUpdate函数中,将应用程序类中的m_pActiveView成员变量设置为当前视图指针:
```c++
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
GetDocument()->SetTitle(_T("My View"));
((CMyApp*)AfxGetApp())->m_pActiveView = this;
}
```
3. 在应用程序类中添加两个成员函数,用于处理前进和后退命令:
```c++
class CMyApp : public CWinApp
{
public:
// ...
void GoBack();
void GoForward();
};
```
4. 在这些函数中,使用CView::GetParentFrame函数获取当前视图的框架窗口,并使用CMDIFrameWnd::MDIGetActive函数获取当前激活的多文档窗口。然后,使用CMDIChildWnd::MDIGetActive函数获取当前激活的子窗口,并使用CWnd::SendMessage函数发送WM_COMMAND消息以模拟前进或后退命令:
```c++
void CMyApp::GoBack()
{
CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pChild = pFrame->MDIGetActive();
if (pChild != NULL)
{
CWnd* pView = pChild->GetActiveView();
if (pView != NULL && pView != m_pActiveView)
{
m_pActiveView = (CView*)pView;
}
pChild->SendMessage(WM_COMMAND, ID_NAVIGATE_BACK);
}
}
void CMyApp::GoForward()
{
CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pChild = pFrame->MDIGetActive();
if (pChild != NULL)
{
CWnd* pView = pChild->GetActiveView();
if (pView != NULL && pView != m_pActiveView)
{
m_pActiveView = (CView*)pView;
}
pChild->SendMessage(WM_COMMAND, ID_NAVIGATE_FORWARD);
}
}
```
5. 最后,在菜单资源中添加两个菜单项,并将它们的命令ID分别设置为ID_NAVIGATE_BACK和ID_NAVIGATE_FORWARD。然后,在应用程序类的InitInstance函数中,使用CFrameWnd::LoadFrame函数加载主框架窗口,并使用CFrameWnd::LoadAccelTable函数加载加速键表。最后,使用CWnd::SetMenu函数将菜单资源关联到主框架窗口:
```c++
BOOL CMyApp::InitInstance()
{
// ...
CFrameWnd* pFrame = new CMDIFrameWnd;
if (!pFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME));
SetMenu(IDR_MAINFRAME);
return TRUE;
}
```
现在,当用户在多文档应用程序中打开多个视图时,他们可以使用前进和后退菜单项来浏览视图历史记录。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)