
1、最小化的原理:首先要将窗口隐藏,然后 在右下角绘制图标。
2、恢复的原理:将窗口显示,再将托盘中的图片删除。
(二)程序实现
1、自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER +1)
2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应
if(nID==SC_MINIMIZE) ToTray()//最小化到托盘的函数
3、在消息映射中添加 ON_MESSAGE(WM_SHOWTASK,OnShowTask),其中WM_SHOWTASK是消息名,
OnShowTask是自己定义的消息响应函数,后面有说明。
(三)具体函数内容
1、最小化到托盘函数
void CMyDlg::ToTray(){ NOTIFYICONDATA nidnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA)nid.hWnd=this->m_hWndnid.uID=IDR_MAINFRAMEnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP nid.uCallbackMessage=WM_SHOWTASK//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME))strcpy(nid.szTip,"程序名称")//信息提示条 Shell_NotifyIcon(NIM_ADD,&nid)//在托盘区添加图标 ShowWindow(SW_HIDE)//隐藏主窗口}
2、恢复界面函数
在头文件中定义消息响应函数afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam) { if(wParam!=IDR_MAINFRAME) return 1switch(lParam) { case WM_RBUTTONUP://右键起来时d出快捷菜单,这里只有一个“关闭” { LPPOINT lpoint=new tagPOINT::GetCursorPos(lpoint)//得到鼠标位置 CMenu menumenu.CreatePopupMenu()//声明一个d出式菜单 //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 //隐藏),将程序结束。 menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭")//确定d出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this)//资源回收 HMENU hmenu=menu.Detach()menu.DestroyMenu()delete lpoint} breakcase WM_LBUTTONDBLCLK://双击左键的处理 { this->ShowWindow(SW_SHOW)//简单的显示主窗口完事儿 DeleteTray()} breakdefault: break} return 0}
3、删除托盘图标函数
void CMyDlg::DeleteTray(){ NOTIFYICONDATA nidnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA)nid.hWnd=this->m_hWndnid.uID=IDR_MAINFRAMEnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP nid.uCallbackMessage=WM_SHOWTASK//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME))strcpy(nid.szTip,"程序名称")//信息提示条为“计划任务提醒” Shell_NotifyIcon(NIM_DELETE,&nid)//在托盘区删除图标 }
新建mfc对话框工程打开对话框资源编辑界面双击默认的确定按钮添加默认的OnOK响应函数,
注释掉默认的CDialog::OnOK()
讲对话框工程中
OnSysCommand
中的默认代码【标题栏系统菜单有个关于菜单拿来用用,mfc类向导默认帮你生成了关于对话框和对应的类直接拿来主义,】
copy
OnSysCommand中的两行代码
CAboutDlg
dlgAbout
dlgAbout.DoModal()到OnOK函数中
当然你可以不使用,甚至删除默认的确定按钮
;自己添加一个button上去给你的button添加响应函数
CMainFrame::PreCreateWindows(CREATESTRUCT&cs){
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style&=~WS_MAXIMIZEBOX//添加这一句,是禁用最大化的按钮;
return TRUE
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)