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

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

判断窗口是最小化,最大化还是正常态利用窗口的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++;
	}

转载于:https://www.cnblogs.com/ljhero/archive/2010/07/27/1964716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值