精华内容
下载资源
问答
  • 最小化托盘的应用程序

    千次阅读 2013-04-20 15:55:26
    单机应用程序主窗体上的“关闭”按钮时,应用程序并不是被关闭,而是被最小化到系统托盘(即屏幕右下角),以图标的形式显示; 单击系统托盘上的应用程序(或者菜单中的“打开”选项时),又会重新显示应用程序...

    最小化到托盘的应用程序:

    当单机应用程序主窗体上的“关闭”按钮时,应用程序并不是被关闭,而是被最小化到系统托盘(即屏幕右下角),以图标的形式显示;

    单击系统托盘上的应用程序(或者菜单中的“打开”选项时),又会重新显示应用程序主体;

    单击菜单中的“退出”选项时(主窗体上的“关闭”也可作为关闭按钮,相应的代码会给出),才会真正退出应用程序

    下面写一个winforms应用程序的实现过程:

    1,  打开vs2008 新建一个windows应用程序;

    2,  在默认窗体form1中拖入一个NotifyIcon控件和一个ContextMenuStrip控件并设置NotifyIcon控件显示的图像;(选中“notifyIcon1”单击右上角的三角,设置图片)

    3,  ContextMenuStrip中添加一个名为“退出”和“打开”的菜单,并将其关联到NotifyIcon控件(关联步骤:设置notifyIcon控件的属性ContextMenuStrip为当前ContextMenuStripName属性值);

    4,  接下来是添加一系列的事件:

    public Form1()

            {

                InitializeComponent();

                //最初打开时设置控制台图标不可见

                notifyIcon1.Visible = false;

            }

     

    ///<summary>

            ///退出菜单单击事件

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

            private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

            {

                this.Close();

            }

            ///<summary>

            ///打开菜单单击事件

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

            private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)

            { 

                notifyIcon1.Visible = true;

                this.Visible = true;

                this.WindowState = FormWindowState.Normal;

                 this.Activate();

            }

     

     

     

    ///<summary>

            ///单击form窗口“最小化”到托盘事件

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

            private void Form1_SizeChanged(object sender, EventArgs e)

            {

                if (this.WindowState == FormWindowState.Minimized)

                {

                    this.Hide();

                    this.notifyIcon1.Visible = true;

                }

            }

    ///<summary>

            ///单击托盘图标,form窗口正常化显示事件

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

    Private void notifyIcon1_MouseDown(object sender, MouseEventArgs e) 

              if(e.Button == MouseButtons.Left && e.Clicks ==1) 

              { 

                 //显示窗口   

                 this.Visible = true; 

                //将窗口正常化                    

                this.WindowState = FormWindowState.Normal; 

                //激活窗口,使窗口获得焦点   

                this.Activate(); 

               } 

    }

     

    ///<summary>

            ///单击form窗口“关闭”最小化到托盘事件

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

    private void Form1_Closing(object sender, CancelEventArgs e) 

        //取消关闭窗口   

        e.Cancel = true; 

        //将窗口最小化   

        this.WindowState = FormWindowState.Minimized; 

        //将窗口隐藏   

        this.Visible = false; 

     

     

          ///<summary>

            ///双击托盘正常显示窗口程序

            ///</summary>

            ///<param name="sender"></param>

            ///<param name="e"></param>

            private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)

            {

                if (e.Button == MouseButtons.Left && e.Clicks == 2)

                {

                    //显示窗口   

                    this.Visible = true;

                    //将窗口正常化                   

                    this.WindowState = FormWindowState.Normal;

                    //激活窗口,使窗口获得焦点   

                    this.Activate();

                } 

     

            }

    展开全文
  • 应用程序最小化到系统托盘示例

    千次阅读 2008-11-21 13:20:00
    使用过这两种工具的用户一定都有过这样的体验: 单击应用程序主窗体右上角的“关闭”按钮时,应用程序并不是关闭而最小化到系统托盘(屏幕右下角),以图标的形式显示;单击系统托盘上的应用程序图标时,又会...

          目前热门的两款下载工具:迅雷(Thunder)和网际快车(FlashGet),相信大家都不陌生。使用过这两种工具的用户一定都有过这样的体验: 

    1. 当单击应用程序主窗体右上角的“关闭”按钮时,应用程序并不是被关闭而最小化到系统托盘(屏幕右下角),以图标的形式显示;
    2. 当单击系统托盘上的应用程序图标时,又会重新显示应用程序主窗体;
    3. 当右键单击系统托盘上的应用程序图标时,会显示一个上下文菜单(ContextMenu),单击其中的“退出”才会真正退出应用程序。

          这种效果在很多软件上都有应用,其原理大致相同,那么到底是如何实现的呢?下面是我自己在做一个WinForms应用程序时实现的过程: 

    1. 打开VS2003,新建一个Visual C# Windows应用程序项目;
    2. 在默认窗体Form1中拖入一NotifyIcon控件和一个ContextMenu控件,并设置NotifyIcon控件显示的图像;
    3. 在ContextMenu控件中添加一个名为“退出”的菜单项,并将其关联到NotifyIcon控件;
    4. 接下来是添加一系列事件,为主窗体Form1添加Closing事件,为NotifyIcon控件添加Click事件和MouseDown事件,并为“退出”菜单项添加Click事件;各事件的作用及实现代码如下: 

    说明:代码适用于.NET Framework 1.1版本,在Visual Studio.NET 2003开发环境下编译通过。

    展开全文
  • 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以...
  • 本周在Makers,我们要求构建一个简单的银行帐户应用程序。 根据项目的要求,我们不需要将应用程序链接到数据库,也不需要实现命令行界面。 尽管没有这些东西,但我认为如果需要,将来可以很容易地实现它们,因为这...
  • 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以随时...
  • 日常编写JAVA应用程序中,肯定会遇到这种问题:第一次点击菜单A时,A会初始化一个窗体B,此时不关闭窗体B,再次点击菜单,通常程序的做法是会判断B是否存在,如果存在则直接使用B。(也就是设计模式中的单例模式)...

      日常编写JAVA应用程序中,肯定会遇到这种问题:当第一次点击菜单A时,A会初始化一个窗体B,此时不关闭窗体B,再次点击菜单,通常程序的做法是会判断B是否存在,如果存在则直接使用B。(也就是设计模式中的单例模式)

      而此时B有可能有两种状态:1、被最小化在任务栏;2、被主窗体覆盖且没有最小化;

      这时我们需要在点击菜单A时,恢复窗体B状态,使窗体B能够显示出来并且获取焦点,OK,直接上代码:

    import java.awt.Frame;
    
    import javax.swing.JFrame;
    
    public class WindowAction
    {
    
        /**
         * @param args
         * @throws InterruptedException 
         */
        public static void main(String[] args) throws InterruptedException
        {    
            JFrame frame = new JFrame();
            
            frame.setBounds(0, 0, 500, 400);
            
            frame.setVisible(true);
            
            Thread.sleep(2000);
            //最小化
            frame.setState(Frame.ICONIFIED);
            
            Thread.sleep(2000);
            //在最小化到系统栏或者最大化时恢复默认状态
            frame.setState(Frame.NORMAL);
            
            Thread.sleep(2000);
            //最大化
            frame.setExtendedState(Frame.MAXIMIZED_BOTH);
            
            //在linux系统中要通过点击按钮并获得A窗体后面的B窗体
            //需要设置B窗体的Visible=true,windows下则不用
                    
            frame.setVisible(true);
            //获取焦点
            frame.requestFocus();
            
        }
    
    }

     

    转载于:https://www.cnblogs.com/boychn/archive/2012/07/04/2576766.html

    展开全文
  • 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以...
  • 双缓冲在画板程序中的应用(一) (转)[@more@]/文 14E.T. 1.用双缓冲解决画板程序中的刷新问题 ...我们用Java编制画板程序的时候,总是存在一个刷新的问题:Canvas所在的窗口最小化或者其他应用程序遮挡后...
    双缓冲在画板程序中的应用(一) (转)[@more@]

    /文 14E.T.

    1.用双缓冲解决画板程序中的刷新问题

    我们用Java编制画板程序的时候,总是存在一个刷新的问题:当Canvas所在的窗口最小化或者被其他应用程序遮挡后,再次恢复,Canvas上的图形数据将被部分或者完全擦除掉.

    通常解决这个问题的方法是在Canvas的paint()函数中重绘图形,但是由于在绘图的过程中产生了大量的数据,重新在Canvas上绘制这些数据将导致大量的系统开销,还会产生闪烁,故该方法可行但并不可取.

    利用双缓冲技术可以很好的解决这个问题,其主要原理是开辟两个图形缓冲区,一个是前台的显示缓冲(也就是Canvas),一个是后台的图形缓冲(通常是Image).用户在绘制图形时,我们对这两个缓冲区进行同步更新,相当于为前台的数据作了一个后台备份.当前台的图形被遮盖需要恢复的时候,我们就可以用这个后台备份来恢复,具体方法是重写paint()函数,将备份好的图像一次性的画到屏幕上去.

    为什么是paint()?这里需要先了解一下有关Java处理AWT绘图的基础知识:Java的显示更新是由一个AWT线程来控制完成的.该线程主要负责两种与显示更新相关的情况.第一种情况称为曝光,表示部分显示区域毁坏或需要清除.这种情况发生时,系统直接调用paint()方法;第二种情况是程序决定重画显示区域,添加一些新的内容,此时需要程序调用成员的repaint()方法,repaint()方法调用成员的update(),update()再调用paint()方法.显然我们所说的就是第一种.只要Canvas组件所在的窗口最小化或者被其他应用程序遮挡住,系统就会调用paint()对画布进行重绘.如果我们在paint()方法中什么都不做,就只能眼睁睁的看着辛辛苦苦画的线条一旦被覆盖就再也看不见了.

    作为起点,请先看一个最简单的画板程序,请注意,以下程序使用的是j2sdk1.4.1版本,在win98的IE下(不是Tencent Explorer)全部测试通过:

    //:WBApplet.java

    import java.applet.*;

    public class WBApplet extends Applet{
     
    final static int DEFAULT_BOARDWIDTH=700;
    final static int DEFAULT_BOARDHEIGHT=400;

    public void init(){
      super.init();
      setLayout(null);
      whiteBoard = new WhiteBoard(this);
      whiteBoard.reshape(0,0,DEFAULT_BOARDWIDTH,DEFAULT_BOARDHEIGHT);
      add(whiteBoard);
    }

    WhiteBoard whiteBoard;

    }

    ///:~

    //:WhiteBoard.java

    java.awt.*;
    import java.awt.event.*;

    public class WhiteBoard extends Canvas implements MouseMotionListener,MouseListener{

      final static int DEFAULT_BOARDWIDTH=700;
      final static int DEFAULT_BOARDHEIGHT=400;
      int x0,y0,x1,y1;

      WhiteBoard(WBApplet WBApplet1){
      parent = WBApplet1;
      addMouseMotionListener(this);
      addMouseListener(this);
      }


      synchronized public void update_buffer(Graphics g,DrawItem data) {
      g.drawLine(data.x0,data.y0,data.x1,data.y1);
      }
     
      public void mouseReleased(MouseEvent e){}
      public void mouseEntered(MouseEvent e){}
      public void mouseExited(MouseEvent e){}
      public void mouseClicked(MouseEvent e){}
      public void mouseMoved(MouseEvent e){}

      public void mouseDragged(MouseEvent e){
      x1=e.getX();
      y1=e.getY();
      Graphics g = getGraphics();
      update_buffer(g,new DrawItem(x0,y0,x1,y1));
      g.dispose();
      x0=x1;
      y0=y1; 
      }

      public void mousePressed(MouseEvent e){
      x0 =e.getX();
      y0 =e.getY(); 
      } 

     

      WBApplet parent;
     
    }

    class DrawItem{
      DrawItem(int x0,int y0,int x1,int y1){
      this.x0=x0;
      this.y0=y0;
      this.x1=x1;
      this.y1=y1;
     }
      int x0;
      int y0;
      int x1;
      int y1;
    }

    ///:~

    我们将白板需完成的所有逻辑操作封装在了一个WhiteBoard类中,以方便主程序的Applet调用.同时,定义了一个绘图的数据类DrawItem,用来封装图形数据.绘图的操作都写在update_buffer中.显然,这个程序无法实现刷新后的恢复,我们需要使用双缓冲技术.


    为了实现双缓冲,首先定义图形缓冲区如下

    private Image off_screen_buf;
    private Graphics off_screen_gc;

    并在WhiteBoard类的构造函数中对其进行初始化

    off_screen_buf =parent.createImage(DEFAULT_BOARDWIDTH,DEFAULT_BOARDHEIGHT);
    off_screen_gc = off_screen_buf.getGraphics();


    在处理用户绘制图形的函数中,我们使用update_buffer对显示缓冲和图形缓冲同时进行更新

     Graphics g = getGraphics();
     update_buffer(g,new DrawItem(x0,y0,x1,y1));//前台更新画布
     update_buffer(off_screen_gc,new DrawItem(x0,y0,x1,y1));//后台更新缓冲
     g.dispose();

    显然,后台的更新操作是不可视的,所以是off-screen.

    最后,重写paint()方法,调用copy_from_offscreen_buf(g)将图形缓冲区的图像画到屏幕上去.

     public void paint(Graphics g){
      copy_from_offscreen_buf(g);
     }


     void copy_from_offscreen_buf(Graphics g){
      if(g != null)
      g.drawImage(off_screen_buf, 0, 0, null);
     }


    就是这么简单的几行代码,就可以让我们完全的避免图形不能恢复的问题.下面是WhiteBoard经改进后的完整代码.

    //:WhiteBoard.java

    import java.awt.*;
    import java.awt.event.*;

    public class WhiteBoard extends Canvas implements MouseMotionListener,MouseListener{

      final static int DEFAULT_BOARDWIDTH=700;
      final static int DEFAULT_BOARDHEIGHT=400;
      int x0,y0,x1,y1;

      WhiteBoard(WBApplet WBApplet1){
      parent = WBApplet1;
      off_screen_buf =parent.createImage(DEFAULT_BOARDWIDTH,DEFAULT_BOARDHEIGHT);
      off_screen_gc = off_screen_buf.getGraphics();
      addMouseMotionListener(this);
      addMouseListener(this);
      }


      synchronized public void update_buffer(Graphics g,DrawItem data) {
      g.drawLine(data.x0,data.y0,data.x1,data.y1);
      }
     
      public void mouseMoved(MouseEvent e){} 
      public void mouseReleased(MouseEvent e){}
      public void mouseEntered(MouseEvent e){}
      public void mouseExited(MouseEvent e){}
      public void mouseClicked(MouseEvent e){}
     
      public void mouseDragged(MouseEvent e){
      x1=e.getX();
      y1=e.getY();
      Graphics g = getGraphics();
      update_buffer(g,new DrawItem(x0,y0,x1,y1));
      update_buffer(off_screen_gc,new DrawItem(x0,y0,x1,y1)); 
      g.dispose();
      x0=x1;
      y0=y1; 
      }
     
      public void mousePressed(MouseEvent e){
      x0 =e.getX();
      y0 =e.getY(); 
      } 


      public void paint(Graphics g){
      copy_from_offscreen_buf(g);//把这句话屏蔽掉,就不能恢复用户绘制的图形了
      } 

      void copy_from_offscreen_buf(Graphics g){
      if(g != null)
      g.drawImage(off_screen_buf, 0, 0, null);
      }
     

      private Image off_screen_buf;
      private Graphics off_screen_gc;
      WBApplet parent;
     
    }

    class DrawItem{
      DrawItem(int x0,int y0,int x1,int y1){
      this.x0=x0;
      this.y0=y0;
      this.x1=x1;
      this.y1=y1;
     }
      int x0;
      int y0;
      int x1;
      int y1;
    }

    ///:~

    运行一下,看是不是不一样了.这一次你想让你画的东西消失都不可能了.为了将这个原理说清楚,以上的代码我都没有编写的太复杂,下一次我们会创建更加复杂,更加完善的画板程序.

     


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-956253/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/10752019/viewspace-956253/

    展开全文
  • 什么是窗口? 显然,Windows是Windows...它通常有一个标题栏框架,最小化和最大化按钮,以及其他标准的UI元素。这个框架称为窗口的非客户区,所谓的是因为操作系统管理窗口的那一部分。框架内的区域是客户区。这是您的程
  • 双缓冲在画板程序中的应用

    千次阅读 2003-05-08 14:11:00
    用双缓冲解决画板程序中的刷新问题我们用Java编制画板程序的时候,总是存在一个刷新的问题:Canvas所在的窗口最小化或者其他应用程序遮挡后,再次恢复,Canvas上的图形数据将部分或者完全擦除掉.通常解决这个问题...
  • dumb-init是一个简单的流程管理器和初始系统,旨在在最小的容器环境(例如 )中作为PID 1运行。 它部署为用C编写的小型静态链接二进制文件。 轻量级容器已经普及了运行单个进程或服务而无需使用诸如或类的常规...
  • 它是一个React应用程序,旨在帮助可视各种树数据结构。 在学习它们的同时,我一次又一次地绘制树木。 所以我想知道如果系统显示结构会多么容易。 因此,我做了这个项目是为了帮助从树开始的人,也让我对树有更好...
  • Windows 程序内部运行机制 Fundamentals of Computers JINAN University WM_PAINT Windows 把一个最小...息通知应用程序重新绘制窗口 窗口从无到有改变尺寸最小化后再恢复 其他窗口遮盖后再显示时窗口的客户区都将
  • [转]双缓冲在画板程序中的应用

    千次阅读 2012-05-07 14:23:48
    我们用Java编制画板程序的时候,总是存在一个刷新的问题:Canvas所在的窗口最小化或者其他应用程序遮挡后,再次恢复,Canvas上的图形 数据将部分或者完全擦除掉. 通常解决这个问题的方法是在Canvas的paint()函数...
  • 使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。 概述  在古希腊神话...
  • 1.用双缓冲解决画板程序中的刷新... 我们用Java编制画板程序的时候,总是存在一个刷新的问题:Canvas所在的窗口最小化或者其他应用程序遮挡后,再次恢复,Canvas上的图形数据将部分或者完全擦除掉. 通常解...
  • AIR desktop ...因为工作需要,前不久为我的AIR程序制作了一个系统托盘,当程序被点击窗口右上角的X时,阻止系统默认的关闭事件,执行我们自定义的事件,并完成其它任务,在本文,我是弹出一个关闭还是最小化到托盘
  • 最小化了Web应用程序(包括Cordova应用程序)和网站的结构差异。 该框架的主要思想是防止页面切换时页面的重新加载。 它与PJAX稍微相似,但是该框架管理浏览器历史记录并提供易于理解的页面模型。 当前,fw.mpa...
  • 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以...
  • 对于React应用程序来说,在没有子父母关系的对象之间进行通信非常有用。 如何创建一个想要接收事件的对象 1/ 只需添加以“catch”开头的方法,后跟全局事件的名称 this . catchOpenDocument = function ( document...
  • windows 程序设计

    2011-07-24 21:16:30
    这意味着Windows不使用系统定时器将处理时间分配给系统中运行的多个应用程序,程序必须自愿放弃控制以便其它程序运行。在Windows NT和Windows 98中,多任务是优先权式的,而且程序自身可分割成近乎同时执行的多个...
  • 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 npm run eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以...
  • Windows桌面应用开发-什么是窗口

    千次阅读 2013-04-20 12:34:31
    MSDN在线原文(英文) ...这种类型的窗口称为应用程序窗口或主窗口,它通常是一个带有标题栏,最小化和最大化按钮和其它标准UI元素的框架。这个框架称为窗口的非客户区,这么说是因为窗口的这部分是由
  • 进程与线程  程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。线程是操作系统能够进行运算调度的最小单位。它包含在进程之中,是...在一个应用程序当...
  • 当应用程序使用普通的Socket API发送数据时,必须由OS对其进行缓冲,直到接收方确认接收到数据为止。 这称为“发送缓冲区”,并且eradio尝试最小化其容量。 其次,由于某些操作系统(例如Linux)还在发送
  • 项目需要禁止抓屏、复制、打印的要求,复制、打印做起来可能顺手一点网上各种各样的脚本俯首皆是。但抓屏怎么禁止?PrintScreen是一个特殊的键,它是没有keyCode的键,所以...但这样有个弊端,不管网页被最小化还是怎
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 296
精华内容 118
关键字:

当一个应用程序被最小化