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