MFC窗口程序启动时最小化到托盘、不在任务栏中显示、显示时在右小角

第一步:窗口最小化到托盘,显示图标。

 这一步在网上一搜,真的很多文章,基本上都可以用吧。有的是在OnSize中最化时画图标,隐藏窗口;有的是在初始化时画图标,在OnSysCommand中判断最大化和最小化时进行窗口显示隐藏。我选择了后者。一开始在后面的步骤遇到了麻烦,最后第二种方法完成了。谅没再去试第一种方法。在OnSysCommand中显示隐藏,效果挺好的。

       我的开发环境是VS2008,创建一个对话框应用程序,选中包含最小化框(因为要最小化到托盘)。因为我的程序只是设计成在屏幕右小角显示一个小窗口来开启、停止、配置服务的一些操作。所以不要最大化功能。

       1、XXXDlg.h中声明一个方法用作显示托盘图标。void _fnToTray();

             XXXDlg.cpp中实现如下

             //在桌面右下角显示托盘图标 
             void CXXXDlg::_fnToTray() 
             { 
                    NOTIFYICONDATA nid; 
                    nid.cbSize = sizeof( NOTIFYICONDATA ); 
                    nid.hWnd = m_hWnd; 
                    nid.uID = IDR_MAINFRAME; 
                    nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; 
                    nid.uCallbackMessage = WM_SYSTEMTRAY; 
                    nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
                    wcscpy_s(nid.szTip, _T("服务管理器")); 
                    ::Shell_NotifyIcon(NIM_ADD,&nid ); 
             }

       2、修改CXXXDlg::OnSysCommand(UINT nID, LPARAM lParam)方法,橙色为增加的代码

             void CXXXDlg::OnSysCommand(UINT nID, LPARAM lParam) 
             { 
                    if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
                    { 
                            CAboutDlg dlgAbout; 
                            dlgAbout.DoModal(); 
                    } 
else if(nID == SC_MAXIMIZE) //最大化 
                    { 
                            this->ShowWindow(SW_SHOW); 
                    } 
                    else if(nID == SC_MINIMIZE) //最小化,把他隐藏起来 
                    { 
         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值