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

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

判断窗口是最小化,最大化还是正常态利用窗口的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++;
	}
posted @ 2010-07-27 11:35  ljhero  阅读(967)  评论(0编辑  收藏  举报