MFC基于对话框中, 怎么去让它最小化到系统托盘运行,点击图标后会显示出主界面?

我在网上看的方法都试了,没成功的,求高手帮帮忙谢谢啊万分感激!!!... 我在网上看的方法 都试了, 没成功的, 求高手帮帮忙 谢谢啊 万分感激!!! 展开
 我来答
luosiyong
2012-04-08 · TA获得超过3256个赞
知道大有可为答主
回答量:1090
采纳率:0%
帮助的人:1619万
展开全部
1:在XXXDlg.h中增加成员变量
NOTIFYICONDATA nid;
增加消息函数声明,就放在其他很多的afx_msg系列函数一起就行:
afx_msg void OnNotifyIcon(WPARAM, LPARAM);
2:在cpp中修改如下内容:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
在以上内容段下面增加如下自定义消息定义
#define WM_NOTIFY_ICON WM_USER + 101

BEGIN_MESSAGE_MAP(CNotifyIconDlg, CDialog)
//{{AFX_MSG_MAP(CNotifyIconDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_NOTIFY_ICON, OnNotifyIcon) 在这段函数中增加这句消息映射
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

找到这段函数,并修改成这样
void CNotifyIconDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
if (nID == SC_MINIMIZE)
{
ShowWindow(SW_HIDE);
ZeroMemory(&nid, sizeof(nid));
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
nid.hWnd = m_hWnd;
strcpy(nid.szTip, "提示信息");
nid.uCallbackMessage = WM_NOTIFY_ICON;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD, &nid);
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
}

cpp文件末尾增加如下函数:
void CNotifyIconDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
if (lParam == WM_LBUTTONDOWN || lParam == WM_RBUTTONDOWN)
{
ShowWindow(SW_SHOW);
}
}

这个函芦袭数通过编译器的向导裂哗盯生成框架,并增加Shell_NotifyIcon这句
BOOL CNotifyIconDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
Shell_NotifyIcon(NIM_DELETE, &nid);

return CDialog::DestroyWindow();
}

以肆和上是VC++6.0实现
追问
是成功了,  可是,可是当我想把它点出来时,鼠标放到那里 还没点 那个图标就消失了。 也不知道是不是退出了,进程里面也没有显示运行。 我是想最小化到托盘后,还可以点出来。   帮帮忙啊。  谢谢  呵呵
追答
你的通知区域的图标是自动隐藏的吗?
如果不是隐藏了,那可能是有其他的问题了,我这里测试是可以重新点出来的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式