⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index113.htm

📁 一本不错的VC编程的参考书
💻 HTM
字号:
<html>
<style type="text/css"><!--
.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<body background="../di2001.jpg">
<h3 align="center"><font COLOR="#AOAO99"></font></h3>
<table width="100%" border="1" cellspacing="1">
<tr><td><p align="center"><font color="#FF0000">如何切换视口而不破坏它们?</font></td></tr>
<tr><td><p>
</Br>
我创建了一个带有静态分隔区的sdi应用程序,左边显示工作区,右过显示左边选取的东西.我想达到的是如果在分隔区之间进行切换,而不覆盖或破坏原来的CView对象.<Br>
</Br>
以下代码是你所想要的:<Br>
</Br>
class CExSplitterWnd : public CSplitterWnd<Br>
{<Br>
// Construction<Br>
public:<Br>
&nbsp;&nbsp;&nbsp;&nbsp;CExSplitterWnd();<Br>
// Overrides<Br>
&nbsp;&nbsp;&nbsp;&nbsp;// ClassWizard generated virtual function overrides<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_VIRTUAL(CExSplitterWnd)<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_VIRTUAL<Br>
// Implementation<Br>
&nbsp;&nbsp;&nbsp;&nbsp;virtual ~CExSplitterWnd();<Br>
&nbsp;&nbsp;&nbsp;&nbsp;BOOL AttachView(CWnd* pView, int row, int col);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;BOOL DetachView(int row, int col);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;// Generated message map functions<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG(CExSplitterWnd)<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// NOTE - the ClassWizard will add and remove member functions here.<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG<Br>
&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<Br>
};<Br>
</Br>
CExSplitterWnd::CExSplitterWnd()<Br>
{<Br>
}<Br>
</Br>
CExSplitterWnd::~CExSplitterWnd()<Br>
{<Br>
}<Br>
</Br>
BOOL CExSplitterWnd::AttachView(CWnd* pView, int row, int col)<Br>
{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Make sure the splitter window was created<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (!IsWindow(m_hWnd))<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(_T("Create the splitter window before attaching windows to panes"));<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (FALSE);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Make sure the row and col indices are within bounds<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (row >= GetRowCount() || col >= GetColumnCount())<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Is the window to be attached a valid one<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (pView == NULL || (!IsWindow(pView->m_hWnd)))<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;pView->SetDlgCtrlID(IdFromRowCol(row, col));<Br>
&nbsp;&nbsp;&nbsp;&nbsp;pView->SetParent(this);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;pView->ShowWindow(SW_SHOW);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;pView->UpdateWindow();<Br>
&nbsp;&nbsp;&nbsp;&nbsp;return (TRUE);<Br>
}<Br>
</Br>
BOOL CExSplitterWnd::DetachView(int row, int col)<Br>
{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Make sure the splitter window was created<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (!IsWindow(m_hWnd))<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(_T("Create the splitter window before attaching windows to panes"));<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (FALSE);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Make sure the row and col indices are<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//within bounds<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (row >= GetRowCount() || col >= GetColumnCount())<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;CWnd* pWnd = GetPane(row, col);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;if (pWnd == NULL || (!IsWindow(pWnd->m_hWnd)))<Br>
&nbsp;&nbsp;&nbsp;&nbsp;{<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(0);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>
&nbsp;&nbsp;&nbsp;&nbsp;}<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;pWnd->ShowWindow(SW_HIDE);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;pWnd->UpdateWindow();<Br>
</Br>
&nbsp;&nbsp;&nbsp;&nbsp;//Set the parent window handle to NULL so that this child window is not<Br>
&nbsp;&nbsp;&nbsp;&nbsp;//destroyed when the parent (splitter) is destroyed<Br>
&nbsp;&nbsp;&nbsp;&nbsp;pWnd->SetParent(NULL);<Br>
&nbsp;&nbsp;&nbsp;&nbsp;return (TRUE);<Br>
}<Br>
</Br>
</p></td></tr>
</table>
</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -