下载本文示例代码
MFC的“文档/视图”机制最大的好处是可以很容易实现“一档多视”。但其内部机制是非常复杂,我们没有必要也不可能自己用托管C 方法去设计这样的机制,不过对于常用的文档、视图和窗口的经典问题,我们仍有必要对此进行深入探讨。这些问题包括:切分窗口、视图切换以及一档多视。限于篇幅,这里仅就切分窗口以及窗格之间的数据传送作深入研究。 一、创建切分窗口 我们知道,MFC的切分窗口是一种“特殊”的文档窗口,它可以有许多窗格(pane),在窗格中又可包含若干个视图。并且它有静态切分和动态切分之分,而且静态切分允许的最大窗格数目为16 x 16。但在.NET中,切分窗口的概念已经发生了很大的变化,它将切分窗口中所用的切分条Splitter变成一个类,因此在.NET中,用托管C 创建切分需要另外方法,并且也不能像MFC那样可以随意静态切分256个窗格。事实上,在实际运用中,由于现在的编程工具提供丰富的Win32界面功能,因而我们大多数所使用的切分窗口通常只需2到3个窗格,而更复杂的界面则由其他方法来实现。由于动态切分窗口在.NET中用托管C 很难实现,因此我们这里仅对静态切分作探讨。 先看一个简单的示例代码:
#using using namespace System;#using "System.dll"#using "System.Windows.Forms.dll"#using "System.Drawing.dll"using namespace System::ComponentModel;using namespace System::Windows::Forms;using namespace System::Drawing;__gc class WinForm: public Form {private:TreeView *m_pTreeDirs; // 定义树视图类对象ListView *m_pListFiles; // 定义列表视图类对象Splitter *m_pSplitter; // 定义切分条类对象public:WinForm() {InitForm(); }void Dispose() {Form::Dispose(); }void InitForm() {Text = S"切分窗口的应用示例"; ClientSize = Drawing::Size(600, 400); // 设置窗口客户区大小 m_pTreeDirs = new TreeView();m_pSplitter = new Splitter();m_pListFiles = new ListView();m_pTreeDirs->Size = Drawing::Size(200,400);m_pTreeDirs->Dock = DockStyle::Left;m_pTreeDirs->TabIndex = 0;m_pSplitter->TabStop = false;m_pSplitter->BorderStyle = BorderStyle::Fixed3D;m_pSplitter->Dock = DockStyle::Left;m_pSplitter->TabIndex = 1;m_pListFiles->Dock = DockStyle::Fill;Controls->Add(m_pListFiles);Controls->Add(m_pSplitter);Controls->Add(m_pTreeDirs);}};#ifdef _UNICODEint wmain(void)#elseint main(void)#endif{Application::Run(new WinForm());return 0;}
图1 共3页。 1 2 3 :
MFC的“文档/视图”机制最大的好处是可以很容易实现“一档多视”。但其内部机制是非常复杂,我们没有必要也不可能自己用托管C 方法去设计这样的机制,不过对于常用的文档、视图和窗口的经典问题,我们仍有必要对此进行深入探讨。这些问题包括:切分窗口、视图切换以及一档多视。限于篇幅,这里仅就切分窗口以及窗格之间的数据传送作深入研究。 一、创建切分窗口 我们知道,MFC的切分窗口是一种“特殊”的文档窗口,它可以有许多窗格(pane),在窗格中又可包含若干个视图。并且它有静态切分和动态切分之分,而且静态切分允许的最大窗格数目为16 x 16。但在.NET中,切分窗口的概念已经发生了很大的变化,它将切分窗口中所用的切分条Splitter变成一个类,因此在.NET中,用托管C 创建切分需要另外方法,并且也不能像MFC那样可以随意静态切分256个窗格。事实上,在实际运用中,由于现在的编程工具提供丰富的Win32界面功能,因而我们大多数所使用的切分窗口通常只需2到3个窗格,而更复杂的界面则由其他方法来实现。由于动态切分窗口在.NET中用托管C 很难实现,因此我们这里仅对静态切分作探讨。 先看一个简单的示例代码:
#using using namespace System;#using "System.dll"#using "System.Windows.Forms.dll"#using "System.Drawing.dll"using namespace System::ComponentModel;using namespace System::Windows::Forms;using namespace System::Drawing;__gc class WinForm: public Form {private:TreeView *m_pTreeDirs; // 定义树视图类对象ListView *m_pListFiles; // 定义列表视图类对象Splitter *m_pSplitter; // 定义切分条类对象public:WinForm() {InitForm(); }void Dispose() {Form::Dispose(); }void InitForm() {Text = S"切分窗口的应用示例"; ClientSize = Drawing::Size(600, 400); // 设置窗口客户区大小 m_pTreeDirs = new TreeView();m_pSplitter = new Splitter();m_pListFiles = new ListView();m_pTreeDirs->Size = Drawing::Size(200,400);m_pTreeDirs->Dock = DockStyle::Left;m_pTreeDirs->TabIndex = 0;m_pSplitter->TabStop = false;m_pSplitter->BorderStyle = BorderStyle::Fixed3D;m_pSplitter->Dock = DockStyle::Left;m_pSplitter->TabIndex = 1;m_pListFiles->Dock = DockStyle::Fill;Controls->Add(m_pListFiles);Controls->Add(m_pSplitter);Controls->Add(m_pTreeDirs);}};#ifdef _UNICODEint wmain(void)#elseint main(void)#endif{Application::Run(new WinForm());return 0;}
图1 共3页。 1 2 3 :
下载本文示例代码
托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)托管C 程序开发—Win表单文档程序设计(下)
阅读(136) | 评论(0) | 转发(0) |