精华内容
下载资源
问答
  • 众所周知,VS2012本身提供了一些控件,虽然已经便于我们开发应用,但是,这些控件来说相对来说比较简单,当系统的界面比较复杂的时候,就不得不去依赖第三方的一些控件。 本博文就是结合本人的一些开发的心得体会...

    一.背景

    最近有个项目用VS2012开发一个Winform的系统,首先我面临的问题是如何设计一个比较好的系统界面。
    众所周知,VS2012本身提供了一些控件,虽然已经便于我们开发应用,但是,这些控件来说相对来说比较简单,当系统的界面比较复杂的时候,就不得不去依赖第三方的一些控件。
    本博文就是结合本人的一些开发的心得体会,介绍一下使用deExpress控件设计一个系统界面的框架,希望对大家有所启发。
    

    二.开发工具及相关

    1.Visual Studio 2012
    2. devExpress 这个是破解版,破解步骤网上很多,在此就不详细介绍 百度云链接

    三.界面效果示意图

    这里写图片描述
    这里写图片描述
    这里写图片描述

    四.具体实施步骤

    1. 新建DevExpress项目
      打开VS2012,点击文件选择新建项目,选中C#作为开发语言,选中DevExpress模板,如下图所示,点击确认
      新建项目
      选择Ribbon布局
      创建成功示意图如下,其中RibbonPage可以理解为一级菜单,RibbonPageGroup可以理解为在上一级RibbonPage下面的二级菜单。(此处为个人理解,有表述欠妥的地方,大家见谅!)
      例如:某个项目中用户信息管理的功能模块,其中此功能模块包含用户基本信息维护,权限设置,用户注销等子模块,那么可以将RibbonPage理解为用户信息这一功能模块的操作导航,其中的RibbonPageGroup里包含用户基本信息维护,权限设置,用户注销等功能子模块。
      这里写图片描述
    2. 设置菜单名称,格式
      新建完项目之后,各级菜单进行对应的设置。此处以用户信息功能模块为例,一级菜单名为:用户信息管理,一级菜单之下包含用户基本信息维护,权限设置,用户注销子模块二级菜单。
      这里写图片描述
      选中RibbonGroupPage,点击添加AddButtonItem,连续操作三次
      这里写图片描述
      对于每个ButtonItem,根据各自需求设置其Caption,Ribbon Style,以及Glyph的属性值,如下图:
      这里写图片描述
      设置完毕结果如图:
      这里写图片描述
    3. 添加tabControl控件
      实现点击对应的功能按钮,显示相应的界面,实现方法有很多,此处使用tabControl控件结合后台代码的方式,将各个winform页面添加到对应的tabPage之中,最后添加到tabControl。此处对于那些不了解tabControl控件的人来说比较难于理解。其实,可以将tabControl看做父容器,它有个里面有个TabPages属性,可以添加各个tabPage作为多文档页面,各个功能模块对应的winform可以代码实现填充到tabPage之中。
      这里写图片描述
      默认的TabControl中有两个TabPage,此处不需要可以删除,删除后如下图:
      这里写图片描述
    4. 新建各个子功能模块winform
      新建用户基本信息维护,权限设置,用户注销等功能子模块对应的winform,通过后台代码的形式添加到TabPage中,在添加到TabControl中,实现多文档界面效果。以用户基本信息维护的winform为例,介绍实现过程,新建名为UserInfoMangement窗体,设置窗体的text属性值,如下图;
      这里写图片描述
    5. 各个ButtonItem按钮添加点击事件,点击相应的按钮,tabControl容器,加载对应的Winform,以用户基本信息维护的winform为例。
      代码如下:
             public TabPage tabUserInfo = null;//基本信息维护winfrom对应的tabPage
             public bool tabUserInfo= false;//基本信息维护winfrom对应的tabPage是否已经加载到tabControl容器中,防止重复加载到tabControl中
            //基本信息维护按钮点击事件
            private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                if (tabUserInfoIsLoad == false)//如果尚未加载到tabControl中
                {
                    tabUserInfo = new TabPage("基本信息维护");//tabPage的中文标题
                    tabUserInfo.Name = "userInfoManagement";
                    tabControl1.Controls.Add(tabUserInfo);//tabUserInfo添加到tabControl容器之中
                    UserInfoManagemenForm userInfoManagementForm = new UserInfoManagemenForm();//创建基本信息维护winform的对象
                    //以下是设置winform的显示格式,属性等
                    userInfoManagementForm.TopLevel = false;
                    userInfoManagementForm.BackColor = Color.White;
                    userInfoManagementForm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
                    userInfoManagementForm.FormBorderStyle = FormBorderStyle.None;
                    userInfoManagementForm.Dock = DockStyle.Fill;
                    //以上是设置winform的显示格式,属性等
                    userInfoManagementForm.Show();//显示窗体
                    tabUserInfo.Controls.Add(userInfoManagementForm);//将基本信息维护winform的窗体加载到到对应的Tabpage中
                    this.tabControl1.SelectedTab = tabUserInfo;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                    tabUserInfoIsLoad = true;
                }
                else
                {
                    this.tabControl1.SelectedTab = tabUserInfo;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                }
            }

    效果如下图所示:
    这里写图片描述

    其它界面代码类似,代码如下:

            public TabPage tabRootManagement = null;//权限管理winfrom对应的tabPage
            public bool tabRootManagementIsLoad = false;//权限管理winfrom对应的tabPage是否已经加载到tabControl容器中,防止重复加载到tabControl中
            //权限管理点击事件
            private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                if (tabRootManagementIsLoad == false)//如果尚未加载到tabControl中
                {
                    tabRootManagement = new TabPage("权限管理");//tabPage的中文标题
                    tabUserInfo.Name = "rootManagement";
                    tabControl1.Controls.Add(tabRootManagement);//tabRootManagement添加到tabControl容器之中
                    RootMangementForm rootManagementForm = new RootMangementForm(); //创建权限管理winform的对象
                    //以下是设置winform的显示格式,属性等
                    rootManagementForm.TopLevel = false;
                    rootManagementForm.BackColor = Color.White;
                    rootManagementForm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
                    rootManagementForm.FormBorderStyle = FormBorderStyle.None;
                    rootManagementForm.Dock = DockStyle.Fill;
                    //以上是设置winform的显示格式,属性等
                    rootManagementForm.Show();//显示窗体
                    tabRootManagement.Controls.Add(rootManagementForm);//将权限管理winform的窗体加载到到对应的Tabpage中
                    this.tabControl1.SelectedTab = tabRootManagement;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                    tabRootManagementIsLoad = true;
                }
                else
                {
                    this.tabControl1.SelectedTab = tabRootManagement;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                }
            }
            public TabPage tabLogoutUser = null;//注销用户winfrom对应的tabPage
            public bool tabLogoutUserIsLoad = false;//注销用户winfrom对应的tabPage是否已经加载到tabControl容器中,防止重复加载到tabControl中
            //注销用户点击事件
            private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                if (tabLogoutUserIsLoad == false)
                {
                    tabLogoutUser = new TabPage("注销用户");//tabPage的中文标题
                    tabUserInfo.Name = "logoutUser";
                    tabControl1.Controls.Add(tabLogoutUser);//tabLogoutUser添加到tabControl容器之中
                    UserLogOut userLogOut = new UserLogOut();
                    //以下是设置winform的显示格式,属性等
                    userLogOut.TopLevel = false;
                    userLogOut.BackColor = Color.White;
                    userLogOut.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
                    userLogOut.FormBorderStyle = FormBorderStyle.None;
                    userLogOut.Dock = DockStyle.Fill;
                    //以上是设置winform的显示格式,属性等
                    userLogOut.Show();//显示窗体
                    tabLogoutUser.Controls.Add(userLogOut);//将注销用户winform的窗体加载到到对应的Tabpage中
                    this.tabControl1.SelectedTab = tabLogoutUser;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                    tabLogoutUserIsLoad = true;
                }
                else
                {
                    this.tabControl1.SelectedTab = tabLogoutUser;//设置点击的焦点,点击相应的按钮,tabControl停留在对应的tabPage上
                }
            }

    以上就完成了布局的全部内容,如何退出各个界面,下篇博客会介绍 ^^ ^^

    展开全文
  • 创建多文档界面应用程序MDI 什么是多文档界面应用程序 (MDI) : 首先介绍下什么是单文档界面应用程序 我们使用的 Windows 自带的记事本 在一个窗口中只能 打开一个文件 如果想要打开另一个文件 要么把现在这个文件...

    创建多文档界面应用程序MDI

    什么是多文档界面应用程序 (MDI) :
    首先介绍下什么是单文档界面应用程序 我们使用的 Windows 自带的记事本 在一个窗口中只能
    打开一个文件 如果想要打开另一个文件 要么把现在这个文件关掉 要么再打开一个记事本窗口
    这种应用程序就叫做单文档界面应用程序 (SDI) 而 (MDI) 就是可以在一个窗口中打开多个文件
    比如 Excel 文档

    MDI 主要由两种窗口组成 1 父窗口 2 子窗口
    父窗口可以包含菜单 是最外部的窗口 父窗口中可以包含很多子窗口
    一般的 MDI 应用程序在父窗口中都有一个 [窗口] 菜单项 用来在子窗口中切换

    MDI (多文档界面应用程序 ) 的特点
    1 启动程序时首先显示父窗体
    2 它是应用程序中所有其他窗口的容器
    3 每个应用程序只能有一个父窗体
    4 在任何指定时间都可以打开多个子窗体
    5 任何子窗体都不能移出父窗体的区域
    6 关闭父窗体所有子窗体也会被关闭

    创建 MID 应用程序
    先将主窗体的 IsMDIContainer 属性设置为 True
    在调用子窗体 show() 方法前加入一行代码
    //form2 为子窗体引用
    form2.MdiParent = this;
    在父窗体菜单中创建 [窗口] 菜单项
    将主窗体菜单控件的 MdiWindowsListItem 属性设置为 [窗口]

    参考代码:

    //主窗体 Form1
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsMDI
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void NewtsmiWindows_Click(object sender, EventArgs e)
            {
                Form2 form2 = new Form2();
                form2.MdiParent = this;
                form2.Show();
            }
        }
    }
    


     

    //Form2 子窗体
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsMDI
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
    
            }
        }
    }
    
     


     

    展开全文
  • 控制了窗口的大小当拖动窗口缩小的添加的空间大小时,窗口不会再缩小了,实现了formview dialog对话框的布局,还有就是点击菜单项切换界面
  • Swing实现多文档界面(MDI)应用程序

    千次阅读 2019-01-30 15:15:12
    通常情况下,在一个GUI应用程序中需要使用个窗体,针对窗体的应用程序,Swing提供了JDesktopPane类和JInternalFrame类(分别称为桌面面板类和内部窗体类)来实现多文档界面(MDI)应用程序。 1.1 JDesktopPane...

    1、桌面面板和内部窗体

    通常情况下,在一个GUI应用程序中需要使用多个窗体,针对多窗体的应用程序,Swing提供了JDesktopPane类和JInternalFrame类(分别称为桌面面板类和内部窗体类)来实现多文档界面(MDI)应用程序。

    1.1 JDesktopPane桌面面板类

    JDesktopPane类是一个容器类,用来创建一个虚拟的桌面。JDesktopPane类中的常用方法如下:

    方法说明
    getAllFrames()以数组的形式返回桌面中当前显示的所有 JInternalFrame。
    getSelectedFrame()获取桌面中当前被选中的 JInternalFrame,如果没有被选中的 JInternalFrame,则返回null。
    removeAll()从桌面中移除所有的 JInternalFrame。
    remove(int index)从桌面中移除位于指定索引的 JInternalFrame。
    setSelectedFrame(JInternalFrame f)设置指定的 JInternalFrame为当前被选中的窗体。
    setDragMode(int dragMode)设置桌面窗格使用的“拖动样式”。

    1.2 JInternalFrame内部窗体类

    JInternalFrame类是一个轻量级对象。用来创建支持拖动,关闭,图标化、调整大小、标题显示和菜单栏的内部窗体,该内部窗体需要显示在由JDesktopPane类创建的桌面面板中。JInternalFrame类中常用方法:

    方法说明
    setResizable(boolean b)设置是否允许自由调整窗体大小。
    setClosable(boolean b)设置是否提供“关闭”按钮。
    setMaximizable(boolean b)设置是否提供“最大化”按钮。
    setIconifiable(boolean b)设置是否提供“最小化”按钮。
    setSelected(boolean selected)设置窗体是否被激活,设置为 true表示激活窗体,设为 false(为默认值)则表示不激活窗体。
    isMaximum()查看窗体是否处于最大化状态。
    isIcon()查看窗体是否处于最小化状态。

     

    2、实现多文档界面(MDI)应用程序

    注意:为了提高开发效率,本示例中使用的Eclipse已安装WindowBuilder可视化工具。

    2.1 创建系统桌面窗体(主窗体)

    (1)创建Java项目,然后添加一个窗体应用(Application Window),并命名为MainFrame.java。如下图:

    (2)在工具栏中选择JDesktopPane面板,并添加到主窗体中。如下图:

    (3)给JDesktopPane面板添加背景图片和实现加载子窗体。

    系统桌面窗体(主窗体)的完整代码:

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.beans.PropertyVetoException;
    import java.net.URL;
    
    import javax.swing.ImageIcon;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    /**
     * 桌面窗体
     * 
     * @author pan_junbiao
     *
     */
    public class MainFrame
    {
    	private JFrame frame;
    
    	public static void main(String[] args)
    	{
    		EventQueue.invokeLater(new Runnable()
    		{
    			public void run()
    			{
    				try
    				{
    					MainFrame window = new MainFrame();
    					window.frame.setVisible(true);
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	public MainFrame()
    	{
    		initialize();
    	}
    
    	private void initialize()
    	{
    		// 初始化窗体
    		frame = new JFrame();
    		frame.setTitle("系统桌面");
    		frame.setBounds(100, 100, 603, 434);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setLocationRelativeTo(null); // 窗体居中
    
    		// 在窗体中添加JDesktopPane桌面面板
    		JDesktopPane desktopPane = new JDesktopPane();
    		frame.getContentPane().add(desktopPane, BorderLayout.CENTER);
    
    		// 设置JDesktopPane桌面面板的背景图片
    		URL resource = this.getClass().getResource("/bg.jpg"); // 获取背景图片路径
    		ImageIcon icon = new ImageIcon(resource); // 创建背景图片对象
    		JLabel backLabel = new JLabel(); // 创建一个标签组件对象
    		backLabel.setIcon(icon);// 设置标签组件要显示的图标
    		backLabel.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());// 设置组件的显示位置及大小
    		desktopPane.add(backLabel); // 将背景组件添加到JDesktopPane桌面面板中
    		desktopPane.setLayer(backLabel, -1); // 设置背景图片组件的层次(最下方)
    
    		// 加载JInternalFrame内部窗体
    		ChildFrame childFrame = new ChildFrame(); // 创建内部窗体对象
    		childFrame.setBounds(135, 80, childFrame.getWidth(), childFrame.getHeight()); // 设置内部窗体加载位置及大小
    		childFrame.setVisible(true); // 设置内部窗体可见
    		desktopPane.add(childFrame); // 将内部窗体添加到JDesktopPane桌面面板中
    		try
    		{
    			// 选中该内部窗体
    			childFrame.setSelected(true);
    		} catch (PropertyVetoException e1)
    		{
    			e1.printStackTrace();
    		}
    	}
    }

    2.2 创建内部窗体(子窗体)

    (1)创建内部窗体,并将窗体命名为ChildFrame.java。如下图:

    (2)内部窗体(子窗体)的完整代码。

    import java.awt.EventQueue;
    import java.awt.Font;
    import javax.swing.JInternalFrame;
    import javax.swing.JLabel;
    
    /**
     * 子窗体
     * 
     * @author pan_junbiao
     *
     */
    public class ChildFrame extends JInternalFrame
    {
    	public static void main(String[] args)
    	{
    		EventQueue.invokeLater(new Runnable()
    		{
    			public void run()
    			{
    				try
    				{
    					ChildFrame frame = new ChildFrame();
    					frame.setVisible(true);
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	public ChildFrame()
    	{
    		setTitle("内部窗体"); // 设置内部窗体的标题
    		setResizable(true); // 设置允许自由调整窗体大小
    		setClosable(true); // 设置提供“关闭”按钮
    		setIconifiable(true); // 设置提供“最小化”按钮
    		setMaximizable(true); // 设置提供“最大化”按钮
    
    		setBounds(100, 100, 340, 218);
    		getContentPane().setLayout(null);
    
    		JLabel label = new JLabel("这是内部窗体");
    		label.setFont(new Font("宋体", Font.PLAIN, 18));
    		label.setBounds(92, 74, 131, 39);
    		getContentPane().add(label);
    	}
    }

    运行主窗体:

     

    展开全文
  • 多文档界面设计

    千次阅读 2008-12-18 15:02:00
    前文曾提到多文档界面应用程序,什么是文档界面呢?使用过Windows应用程序的用户可能已注意到:并非所有用户界面的外观或行为都相同。Windows窗体布局共有三种主要样式:单文档界面(Single-Document Interface, ...
      
    

    前文曾提到多文档 界面 应用程序,什么是多文档界面呢?使用过Windows应用程序的用户可能已注意到:并非所有用户界面的外观或行为都相同。Windows 窗体 布局共有三种主要样式:单文档界面(Single-Document Interface, SDI)、资源管理器样式界面以及多文档界面(Multi-Document Interface, MDI)。

    单 文档 界面样式是Windows应用程序比较常用的布局选项。Microsoft Windows中的“记事本”是单文档界面应用程序的一个典型示例。在“记事本”中,同一时间只能打开一个文档。资源管理器样式界面是包含两个“窗格”或区域的单个 窗口 ,通常由左侧的树或分层视图以及右侧的显示区域组成,与“Microsoft Windows资源管理器”一样。资源管理器样式界面适合于定位或浏览大量的文档、图片或文件。

    多文档界面是从Windows 2.0下的Microsoft Excel电子表格程序开始引入的。由于Excel电子表格用户有时需要同时 操作 多份表格,而MDI正好为这种多表格操作提供了很大的方便,于是MDI程序应运而生了。在Windows 3.1版本中,MDI得到了更大范围的应用。其中系统中的程序管理器和文件管理器都是MDI程序。

    在多文档界面应用程序中,主窗口里通常包含着若干个子窗口,子窗口使用相同的菜单和工具栏。多文档界面应用程序可以同时 显示 多个文档,每个文档显示在各自的窗口中。多文档界面应用程序中常包含“窗口”菜单项,用于在窗口或文档之间进行切换。因此,如果应用程序中包含“窗口”菜单且该菜单中有用于在窗口或文档之间进行切换的命令,就可以认为该应用程序是一个在多文档界面应用程序。

    创建多文档界面应用程序包括创建MDI父窗体和MDI子窗体两个过程。下面通过创建一个 简单 的多文档界面应用程序来介绍多文档界面设计。

    1. 创建MDI父窗体

    多文档界面应用程序的基础是MDI父窗体。父窗体是包含MDI子窗口的窗体,而子窗口是用户与MDI应用程序进行交互的副窗口。创建一个MDI父窗口可以按照如下步骤进行:

    (1) 创建一个Windows应用程序。可以在“起始页”中或者在“文件”菜单中选择相应命令来创建。

    (2) 在“属性”窗口中,将Form1的Text属性设置为“多文档界面程序”,将IsMdiContainer属性设置为True,从而将该窗体指定为子窗口的MDI容器即父窗体。

    因为当父窗体最大化时操作MDI子窗口最为容易,所以也可以将WindowState属性设置为Maxmized。本例中还是保留默认值Normal。另外MDI父窗体的边缘将采用在Windows系统控制面板中设置的系统颜色,而不采用Control.BackColor属性设置的背景色。

    (3) 将菜单(MainMenu)控件从“工具箱”拖到窗体上。因为菜单是一个组件,所以不能直接出现在窗体中,而是显示在“窗体设计器”下方的组件栏中,如图9-4中所示。

    图9-4 添加菜单控件

    在图9-4中显示有“请在此处输入” 占位 符的位置输入“文件(&F)”,以创建一个名为“文件”的顶级菜单项。其中,在字母前加上符号“&”可以 使该 字母成为所在菜单项的热键,这样用户就可以通过按下Alt键再按热键的方式来选定菜单项了。然后按回车或者用鼠标移动到下一个“请在此处输入”占位符,继续输入“文件”菜单所包含的子菜单项。本例要求分别输入“新建(&N)”和“关闭(&C)”以建立“新建”和“关闭”两个子菜单项。单击“文件”菜单项右侧的“请在此处输入”占位符,输入“窗口(&W)”以建立一个名为“窗口”的顶级菜单项。

    “ 文件 ”菜单将在运行时创建并隐藏菜单项,而“窗口”菜单将跟踪打开的MDI子窗口。

    至此,一个MDI父窗口已经成功创建。按F5键运行该应用程序,运行界面如图9-5所示。

    图9-5 MDI父窗口

    2. 创建MDI子窗体

    多文档界面应用程序的基本元素是MDI子窗体,因为它们是用户交互的中心。下面创建富文本编辑控件(RichTextBox)的MDI子窗体,该子窗体类似于大多数字处理应用程序。如果将编辑控件替换为其他控件,就可以创建各种可能的MDI子窗口并进一步扩展为MDI应用程序。创建MDI子窗体的具体步骤如下:

    (1) 在前面创建的父窗体中选择“窗口(&W)”菜单项,然后将MdiList属性设置为True,以使“窗口”菜单能够维护打开的MDI子窗口的列表,即在活动子窗口旁添加一个复选标记。

    (2) 在“解决方案资源管理器”中,右键单击本项目,指向“添加”,然后单击“Windows窗体”以打开“添加新项”对话框。从“类别”窗格选择“本地项目项”,在“模板”窗格选择“Windows窗体”,在“名称”框中,命名窗体为Form2,如图9-6所示。

    图9-6 “添加新项”对话框

    (3) 单击“打开”按钮将Form2窗体添加到项目中,它将作为MDI子窗体的模板。

    (4) 将Form2的Text属性设置为“未命名文档”。

    (5) 在Form2窗体中将富文本控件从“工具箱”拖到窗体上,并将其Text属性设置为空,Anchor属性设置为“Top,Left”,并将Dock属性设置为“Fill”。这样即使调整MDI子窗体的大小,编辑控件也会完全填充该窗体的区域。MDI子窗体如图9-7所示。

    图9-7 MDI子窗体

    (6) 为“新建”菜单项创建Click事件处理程序。在父窗体中双击“新建”菜单项切换到 代码 编辑器,插入下列代码:

    private void menuItem2_Click(object sender, System.EventArgs e)

    {

    //创建子窗体

    Form2 newMdiChild = new Form2();

    // 设置子 窗体 的父窗体

    newMDIChild.MdiParent = this;

    // 显示子窗体

    newMdiChild.Show();

    }

    上述代码在用户 单击 “新建”菜单项时创建新的MDI子窗体。

    现在,整个MDI应用程序已创建完成。按F5键运行该应用程序,并在“文件”菜单中选择“新建”以创建新的MDI子窗体。从图9-8中可以看到子窗体在“窗口”菜单中被跟踪。

    图9-8 多文档界面程序

    梅义

    展开全文
  • 1.5 多文档MFC应用程序实例

    千次阅读 2017-05-18 14:55:20
    文档应用程序每次只能打开一个文档窗口(例如...多文档应用程序和单文档应用程序类似,依然支持“文档/视图”结构,以做到数据与界面的分离; 多文档应用程序在打开文档时,每个时刻只能有一个文档处于活动状态,
  • Qt:34---MDI多文档界面

    千次阅读 2019-08-10 08:19:57
    MDI就是多文档界面(Multi-document Interface,MDI)应用程序 MDI就是在主窗口里创建个同类型的MDI子窗口,这些MDI子窗口在主窗口里显示,并共享主窗口上工具栏和菜单等操作功能,主窗口上的操作都针对当前活动...
  • 文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件 多文档:WORD类或浏览器程序的标准模式,可个窗口显示不同的信息,进行不同的任务,有...
  • 本科毕设时,为了进行演示曾按照网上的方法搭建了一个基于MFC多文档视图界面(MDI)的图像处理框架程序。但是由于对于windows编程的原理不甚了解,过程中遇到了很细节上的问题,因此整理一下整个过程,便于以后...
  • 编写一个单文档界面应用程序, 该程序在用户区能以在两个矩形的相交矩形为外接矩形画一个椭 圆。 编写一个单文档界面应用程序,该程序在用户区能以在两个矩形的相交矩形为外接矩形画一个椭圆 1,建立一个...
  • 第六章 Windows应用程序界面的设计 6.1 SDI和MDI界面 用户使用应用程序时如果程序一次只能打开一个文档那么这种程序就叫做SDI(单文档界面)程序反之就叫做MDI (多文档界面)程序 MDI界面的应用程序具有一个主窗口用户...
  • C++ MFC / VS2013 之一 单文档应用程序

    千次阅读 2017-09-30 10:44:31
     每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2013中,工程都是在解决方案管理之下的。一个解决方案可以管理个工程,可以把解决方案理解为个有关系...
  • 编写一个单文档界面应用程序,程序启动后在用户区显示一个圆,用鼠标可以拖动这个圆。 //在视图类声明中定义成员变量: private:  BOOL m_bLBtnDown;  CPoint m_pointMouse;  CRect m_rectEllipse; //...
  • 介绍多文档界面中,一个主框架内可以有个子框架。每个子框架可以看成是一个单文档的主框架。
  • MFC之文档/视图结构应用程序

    千次阅读 2019-05-19 16:18:19
    文档/视图结构应用程序 一、文档/视图结构分析 MFC 通过个类提供了对程序框架的支持,使用这些类可以简单地实现文档/视图结构;其中主要包括以下五个类: 应用程序类(CWinAPP):是 MFC 程序的应用程序管理类,...
  • Qt多文档界面应用设计

    千次阅读 2014-12-08 17:14:44
    使用Qt编写多文档界面(MDI)应用相当方便,主要会使用到QMdiArea和QMdiSubWindow两个类。可以查看Qt Asistant中这两个类的说明文档,里面介绍的相当详细。另外,可以搜索例程"Mdi Example",这是提供的一个示例程序,...
  • 1.4 单文档MFC应用程序实例

    千次阅读 2017-05-18 13:32:36
    而单文档界面,可以看作是“标准”的Windows应用程序界面。1.4.1 技术要点: MFC的单文档应用程序结构的一大特点是数据和界面分离,在单文档应用程序中,程序中数据的保存、加载和处理等功能由CDocument完成,而数据...
  • 前段时间在编写对话框程序的时候也有为...最近由于有点时间继续学习,所以开始尝试使用VC编写单文档程序,当然,笔者还是希望能够为自己编写的程序自定义一个图标,所以就有了以下这篇文章,希望也能给各位同仁提供帮助
  • 1. 在MFC多文档应用程序中同时显示两个视图,其中一个视图显示电路原理图,另外一个显示仿真结果。 2. 两个视图需要同时显示,但是并非分割显示,而是通过切换(切换功能尚未实现) 在多文档应用程序中,视图类...
  • android应用程序详细开发文档

    热门讨论 2012-03-07 19:18:30
    详细对功能的点与需求的分析,采用单独分开界面进行分析
  • 多文档应用程序( MDI ),就是一个主窗体可以打开很子窗体 。 这种程序在同一时刻可以打开文档,每个文档显示在一个子窗口中,例如 Word 97 。 适合于做文件处理 。     生成的类:  ...
  • 1.单文档应用程序的类与类之间的访问 (1)在所有类中获取App指针: CWin *pApp=AfxGetApp(); CXXXApp *pMyApp=(CXXXApp*)pApp; (2)所有类中获取CMainFrame类指针: CMainFrame *pFrame=(...
  • 本节课会介绍Python的GUI(图形用户界面)编程,用Python也可以写出漂亮的桌面程序,建议此次课程大家稍作了解不要浪费太时间,因为没有哪家公司会招聘以为Python程序员开发桌面程序吧? 学完此次课程,我能做...
  • 使用VS应用程序向导生成单文档应用程序框架 步骤: 1.点菜单栏File->New->Project,弹出New Project对话框,我们可以选择工程类型。 如果安装完VS以后第一启动时已经设置为VC++,则Installed Templates->...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 329,067
精华内容 131,626
关键字:

多文档界面应用程序