zoukankan      html  css  js  c++  java
  • 【积累】窗口最大或最小化时动态更改应用程序图标

    窗口最大或最小化时动态更改应用程序图标

    判断窗口是最小化,最大化还是正常态利用窗口的WM_SIZE消息来获取窗口状态的消息,WM_SIZE消息有五种值其中最常用的三种分别是:

    SIZE_RESTORED:窗口被还原时产生的消息。

    SIZE_MINIMIZED:窗口最小化时产生的消息。

    SIZE_MAXIMIZED:窗口最大化时产生的消息。

    更改应用程序图标则用到了CWnd::SetIcon()函数。可以先用CWinApp::LoadIcon()从应用程序资源中载入图标。具体实现代码:

     

    1 AfxGetMainWnd()->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1),TRUE);

    动态更改应用程序图标实例:

    1.新建SDI文档,把要更改的图标加入到资源,然后通过向导添加一个WM_SIZE消息的处理函数。
    2.具体做法是点击菜单栏中的"查看"->"建立类向导..."
    3.在Message Maps页中的"Class name"项选择CMainFrame,然后Message中选择WM_SIZE,然后单击"Add Function"按钮.
    4.这样就把处理WM_SIZE消息的函数建立起来了,我们不要急着关闭向导,单击按钮"Edit Code"来进行具体的功能实现。
    5.进入到代码页面,我们可以看到处理WM_SIZE消息的函数框架,如下:
       void CMainFrame::OnSize(UINT nType, int cx, int cy)
      {
        CFrameWnd::OnSize(nType, cx, cy);
     
        // TODO: Add your message handler code here
      }
    6.现在我们来实现,当窗口最小化时弹出提示信息。我们可以在OnSize函数中加入如下代码:

    void CMainFrame::OnSize(UINT nType, int cx, int cy) 
    {
    	CFrameWnd::OnSize(nType, cx, cy);
    	static nCount=0;
    	// 在窗口第一次创建时此函数也被调用,此时应用程序图标还未被创建,所以要
    	//用nCount>0来防止窗口第一次创建时,即窗口处于正常态是更改图标出错。
    	if(nType==SIZE_MINIMIZED)
    	{
             
    		AfxGetMainWnd()->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON2),TRUE);
    		// 窗口最小时,图标被更改为ID号为IDI_ICON2的图标
    	}
    	else if (nType==SIZE_MAXIMIZED)
    	{
             AfxGetMainWnd()->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1),TRUE);
    		 // 窗口最大化时,图标被更改为ID号为IDI_ICON1的图标
    	}
    	else if (nType==SIZE_RESTORED)
    	{
    		if (nCount>0)
    		{
    			AfxGetMainWnd()->SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME),TRUE);
    		// 窗口被还原时,图标还原为ID号为IDR_MAINFRAME的原程序图标
    		}
    		nCount++;
    	}
    

    作者:Ljhero
    出处:http://ljhero.cnblogs.com/
    本作品采用署名-非商业性使用 3.0协议进行许可。欢迎转载,演绎,但是必须保留本文的署名Ljhero,且不能用于商业目的。

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/ljhero/p/1964716.html
Copyright © 2011-2022 走看看