zoukankan      html  css  js  c++  java
  • RFID会议签到系统总结(十五)――管控端的窗体组织

     

    本要接上一篇开始讲管控端程序的菜单与工具栏的加载,但发现还是先要讲一下整个管控端的窗体组织,否则会无法理解菜单事件为何要那么写。

    多窗体组织很经典的模型就是MDI了,但MDI在窗体最大化、最小化、还原一些动作之后,窗体会乱掉,很乱七八糟。现在的程序很少有用那种原始的MDI来作界面的了,至少我不会去用,实在是难看。但开发工具在这里也是没有长进,如果我们直接用IDE只能生成那种原始的MDI窗体。

    只能另想办法,其实也没多想,因为以前(一年多前)曾经为同学做过一个DEMO,当时也是基于难看的MDI,在SourceForge上找了这个DockPanel(从作者名字看象是一个华人的作品,现在已经是2.0了,我当时还是1.0。下面我所述的都是基于1.0的基础上的),做出了相对比较悦目的界面,这东西没有用GPL之类的开源协议,这次当然也就顺手用上了(其实即使它用了GPL,我用它了,公司也没人管我,他们只关心项目有没有按时完成。有否金玉其外、败絮其中都无瑕顾及,还会去顾及这个国人很少注意的Open Source License吗?)。

     

    用这个DockPanel能做出什么界面这里不具体说了,基本可以用它做出如VS.net那样的界面,不过对我来说用不了那么多功能,用得最多的就是“多Tab显示窗体”。当然基于那个DockPanel我作了一些小小的修改。

    当双击Tab时,原先是直接把当前Tab所表示的这个窗体,从主窗体的框架上分离现来,成为一个浮动的窗体。这不是我想要的,我把它改成了双击关闭。

    DockPaneStripBaseWndProc方法里,对于左键双击消息重新作了处理(下面注释掉的一行是原先的写法,它下面那行是我改的):

               else if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK)

               {

                 

                  base.WndProc(ref m);

     

                  int index = GetHitTest();

                  if (DockPane.DockPanel.AllowRedocking && index != -1)

                  {

                      IDockContent content = Tabs[index].Content;

                      try {  

    //                   content.DockHandler.IsFloat = !content.DockHandler.IsFloat;

                         content.DockHandler.Close();

                      }  

                      catch  {   }

                  }

     

                  return;

               }

     

    另外改的一个地方,这一次系统里没有派上用场,不过也顺便提一下。是关于主窗背景色(图)的,因为这次的管控端系统,系统运行中一般是会有一个窗体一直开启着的(就是那个签到统计显示的窗体),背景对于使用者反而是不可见的。

    DockPanelOnPaint方法里,原来对于背景设置是不起作用的,我把它改了一下:

           protected override void OnPaint(PaintEventArgs e)

           {

               base.OnPaint(e);

     

               Graphics g = e.Graphics;

     

    //         g.FillRectangle(SystemBrushes.AppWorkspace, ClientRectangle);

               if (this.BackgroundImage != null)

                  g.FillRectangle(new TextureBrush(this.BackgroundImage),ClientRectangle);

               else

                  g.FillRectangle(new SolidBrush(this.BackColor),ClientRectangle);

           }

     

     

  • 相关阅读:
    SEO优化笔记
    ie8兼容border-radius方法
    简易透明黑色背景
    attr属性
    滚动延迟加载数据
    .net变量判断
    js传值
    15.setInterval
    14.名字查找
    13.angular时间
  • 原文地址:https://www.cnblogs.com/lichdr/p/814104.html
Copyright © 2011-2022 走看看