托管C++程序开发—Win表单文档程序设计(下)

2016-01-29 12:42 3 1 收藏

托管C++程序开发—Win表单文档程序设计(下),托管C++程序开发—Win表单文档程序设计(下)

【 tulaoshi.com - C语言心得技巧 】

  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 _UNICODE
int wmain(void)
#else
int main(void)
#endif
{
Application::Run(new WinForm());
return 0;
}
         图1

来源:https://www.tulaoshi.com/n/20160129/1487269.html

延伸阅读
本篇说明内容是C++中的要害,基本大部分人对于这些内容都是昏的,但这些内容又是编程的基础中的基础,必须具体说明。 数字表示 !-- frame contents -- !-- /frame contents -- 数学中,数只有数值大小的不同,绝不会有数值占用空间的区别,即数学中的数是逻辑上的一个概念,但电脑不是。考虑算盘,每个算盘...
很多书在一开始就开始学习josephus问题,为了让大家前面学起来较为轻易我把前面涉及到此问题的地方都故意去掉了,现在我们已经学习过了结构体和类,所以放在这里学习可能更合适一些。 !-- frame contents -- !-- /frame contents -- 在正式开始学习之前我们先回顾一下如何利用数组和结构体的方式来解决,最后我们再...
本篇是此系列的开头,在学英语时,第一时间学的是字母,其是英语的基础。同样,在C++中,所有的代码都是通过标识符(Identifier)、表达式(EXPression)和语句(Statement)及一些必要的符号(如大括号等)组成,在此先说明何谓标识符。 !-- frame contents -- !-- /frame contents -- 标识符 标识符是一个字母序列...
六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来预备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。 软件工程中的时髦术语“面向对象分析”和“面向对象设计”,通常是针对“需求分析”和“系统设计”环节的。“面向对象”有几大学派,就象如来...
赋值语句 前面已经说明,要访问内存,就需要相应的地址以表明访问哪块内存,而变量是一个映射,因此变量名就相当于一个地址。对于内存的操作,在一般情况下就只有读取内存中的数值和将数值写入内存(不考虑分配和释放内存),在C++中,为了将一数值写入某变量对应的地址所标识的内存中(出于简便,以后称变量a对应的地址为变量a的地址...

经验教程

808

收藏

14
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部