如何让程序最小化后成一个小图标?

jun 2000-06-20 01:14:00
请教!!
...全文
264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
土豆 2000-06-23
  • 打赏
  • 举报
回复
要显示道桌面右下角的地方吗?用下面的代码:

#define MYWM_NOTIFYICON(WM_APP+100)

void ShowTrayIcon()
{
NOTIFYICONDATA ncd;

char * szToolTip="TrayIcon Demo";
UINT uID=1;//自己定义的标识值,随便什么值

ncd.cbSize = sizeof(NOTIFYICONDATA);
ncd.hWnd =hwnd; //窗口的句柄
ncd.uID = ID; //
ncd.hIcon = icon; //图标的句柄
ncd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
ncd.uCallbackMessage = MYWM_NOTIFYICON; //你可以在窗口消息中处理这个消息
_tcscpy(ncd.szTip, szToolTip);

Shell_NotifyIcon(NIM_ADD, &ncd);
}
DragonCheng 2000-06-23
  • 打赏
  • 举报
回复
可以参考CSDN的例程
jun 2000-06-23
  • 打赏
  • 举报
回复
To :FireAngel
请问我要让程序最小化时只显示一个图标应该调用哪个函数啊,我用了HideIcon()
和SetNotificationWnd(GetParent())都无效,请再指教!
risings 2000-06-22
  • 打赏
  • 举报
回复
csdn更新以前有个系统托盘控件SysTary,很好用,可换图标、闪烁、返回左右见单双击事件。如果你要的话,我可以寄一份给你。不过最好还是用API来做,象LJN所说的那样。
土豆 2000-06-21
  • 打赏
  • 举报
回复
给你一个实现的类,你只要生成该类的对象,调用对象的有关方法就可以实现。

/////////////////////////////////////////////////////////////////////////////
//SystemTray.h
#ifndef _INCLUDED_SYSTEMTRAY_H_
#define _INCLUDED_SYSTEMTRAY_H_

#include <afxtempl.h>
#include <afxdisp.h> // COleDateTime

/////////////////////////////////////////////////////////////////////////////
// CSystemTray window

class CSystemTray : public CWnd
{
// Construction/destruction
public:
CSystemTray();
CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID);
virtual ~CSystemTray();

DECLARE_DYNAMIC(CSystemTray)

// Operations
public:
BOOL Enabled() { return m_bEnabled; }
BOOL Visible() { return !m_bHidden; }

// Create the tray icon
Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID);

// Change or retrieve the Tooltip text
BOOL SetTooltipText(LPCTSTR pszTooltipText);
BOOL SetTooltipText(UINT nID);
CString GetTooltipText() const;

// Change or retrieve the icon displayed
BOOL SetIcon(HICON hIcon);
BOOL SetIcon(LPCTSTR lpszIconName);
BOOL SetIcon(UINT nIDResource);
BOOL SetStandardIcon(LPCTSTR lpIconName);
BOOL SetStandardIcon(UINT nIDResource);
HICON GetIcon() const;
void HideIcon();
void ShowIcon();
void RemoveIcon();
void MoveToRight();

// For icon animation
BOOL SetIconList(UINT uFirstIconID, UINT uLastIconID);
BOOL SetIconList(HICON* pHIconList, UINT nNumIcons);
BOOL Animate(UINT nDelayMilliSeconds, int nNumSeconds = -1);
BOOL StepAnimation();
BOOL StopAnimation();

// Change menu default item
void GetMenuDefaultItem(UINT& uItem, BOOL& bByPos);
BOOL SetMenuDefaultItem(UINT uItem, BOOL bByPos);

// Change or retrieve the window to send notification messages to
BOOL SetNotificationWnd(CWnd* pNotifyWnd);
CWnd* GetNotificationWnd() const;

// Default handler for tray notification message
virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent);

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSystemTray)
protected:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUAL

// Implementation
protected:
void Initialise();

BOOL m_bEnabled; // does O/S support tray icon?
BOOL m_bHidden; // Has the icon been hidden?
NOTIFYICONDATA m_tnd;

CArray<HICON, HICON> m_IconList;
static UINT m_nIDEvent;
UINT m_uIDTimer;
int m_nCurrentIcon;
COleDateTime m_StartTime;
int m_nAnimationPeriod;
HICON m_hSavedIcon;
UINT m_DefaultMenuItemID;
BOOL m_DefaultMenuItemByPos;

// Generated message map functions
protected:
//{{AFX_MSG(CSystemTray)
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
};


#endif

/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// SystemTray.cpp : implementation file

#include "stdafx.h"
#include "SystemTray.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(CSystemTray, CWnd)

UINT CSystemTray::m_nIDEvent = 4567;

/////////////////////////////////////////////////////////////////////////////
// CSystemTray construction/creation/destruction

CSystemTray::CSystemTray()
{
Initialise();
}

CSystemTray::CSystemTray(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szToolTip,
HICON icon, UINT uID)
{
Initialise();
Create(pParent, uCallbackMessage, szToolTip, icon, uID);
}

void CSystemTray::Initialise()
{
memset(&m_tnd, 0, sizeof(m_tnd));
m_bEnabled = FALSE;
m_bHidden = FALSE;
m_uIDTimer = 0;
m_hSavedIcon = NULL;
m_DefaultMenuItemID = 0;
m_DefaultMenuItemByPos = TRUE;
}

BOOL CSystemTray::Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szToolTip,
HICON icon, UINT uID)
{
// this is only for Windows 95 (or higher)
m_bEnabled = (GetVersion() & 0xff) >= 4;
if (!m_bEnabled)
{
ASSERT(FALSE);
return FALSE;
}

// Make sure Notification window is valid (not needed - CJM)
// VERIFY(m_bEnabled = (pParent && ::IsWindow(pParent->GetSafeHwnd())));
// if (!m_bEnabled) return FALSE;

// Make sure we avoid conflict with other messages
ASSERT(uCallbackMessage >= WM_USER);

// Tray only supports tooltip text up to 64 characters
ASSERT(_tcslen(szToolTip) <= 64);

// Create an invisible window
CWnd::CreateEx(0, AfxRegisterWndClass(0), _T(""), WS_POPUP, 0,0,10,10, NULL, 0);

// load up the NOTIFYICONDATA structure
m_tnd.cbSize = sizeof(NOTIFYICONDATA);
m_tnd.hWnd = pParent->GetSafeHwnd()? pParent->GetSafeHwnd() : m_hWnd;
m_tnd.uID = uID;
m_tnd.hIcon = icon;
m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_tnd.uCallbackMessage = uCallbackMessage;
_tcscpy(m_tnd.szTip, szToolTip);

// Set the tray icon
m_bEnabled = Shell_NotifyIcon(NIM_ADD, &m_tnd);
ASSERT(m_bEnabled);
return m_bEnabled;
}

CSystemTray::~CSystemTray()
{
RemoveIcon();
m_IconList.RemoveAll();
DestroyWindow();
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray icon manipulation

void CSystemTray::MoveToRight()
{
HideIcon();
ShowIcon();
}

void CSystemTray::RemoveIcon()
{
if (!m_bEnabled) return;

m_tnd.uFlags = 0;
Shell_NotifyIcon(NIM_DELETE, &m_tnd);
m_bEnabled = FALSE;
}

void CSystemTray::HideIcon()
{
if (m_bEnabled && !m_bHidden) {
m_tnd.uFlags = NIF_ICON;
Shell_NotifyIcon (NIM_DELETE, &m_tnd);
m_bHidden = TRUE;
}
}

void CSystemTray::ShowIcon()
{
if (m_bEnabled && m_bHidden) {
m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
Shell_NotifyIcon(NIM_ADD, &m_tnd);
m_bHidden = FALSE;
}
}

BOOL CSystemTray::SetIcon(HICON hIcon)
{
if (!m_bEnabled) return FALSE;

m_tnd.uFlags = NIF_ICON;
m_tnd.hIcon = hIcon;

return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);
}

BOOL CSystemTray::SetIcon(LPCTSTR lpszIconName)
{
HICON hIcon = AfxGetApp()->LoadIcon(lpszIconName);

return SetIcon(hIcon);
}

BOOL CSystemTray::SetIcon(UINT nIDResource)
{
HICON hIcon = AfxGetApp()->LoadIcon(nIDResource);

return SetIcon(hIcon);
}

BOOL CSystemTray::SetStandardIcon(LPCTSTR lpIconName)
{
HICON hIcon = LoadIcon(NULL, lpIconName);

return SetIcon(hIcon);
}

BOOL CSystemTray::SetStandardIcon(UINT nIDResource)
{
HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(nIDResource));

return SetIcon(hIcon);
}

HICON CSystemTray::GetIcon() const
{
return (m_bEnabled)? m_tnd.hIcon : NULL;
}

BOOL CSystemTray::SetIconList(UINT uFirstIconID, UINT uLastIconID)
{
if (uFirstIconID > uLastIconID)
return FALSE;

UINT uIconArraySize = uLastIconID - uFirstIconID + 1;
const CWinApp * pApp = AfxGetApp();
ASSERT(pApp != 0);

m_IconList.RemoveAll();
try {
for (UINT i = uFirstIconID; i <= uLastIconID; i++)
m_IconList.Add(pApp->LoadIcon(i));
}
catch (CMemoryException *e)
{
e->ReportError();
e->Delete();
m_IconList.RemoveAll();
return FALSE;
}

return TRUE;
}

BOOL CSystemTray::SetIconList(HICON* pHIconList, UINT nNumIcons)
{
m_IconList.RemoveAll();

try {
for (UINT i = 0; i <= nNumIcons; i++)
m_IconList.Add(pHIconList[i]);
}
catch (CMemoryException *e)
{
e->ReportError();
e->Delete();
m_IconList.RemoveAll();
return FALSE;
}

return TRUE;
}

BOOL CSystemTray::Animate(UINT nDelayMilliSeconds, int nNumSeconds /*=-1*/)
{
StopAnimation();

m_nCurrentIcon = 0;
m_StartTime = COleDateTime::GetCurrentTime();
m_nAnimationPeriod = nNumSeconds;
m_hSavedIcon = GetIcon();

// Setup a timer for the animation
m_uIDTimer = SetTimer(m_nIDEvent, nDelayMilliSeconds, NULL);

return (m_uIDTimer != 0);
}

BOOL CSystemTray::StepAnimation()
{
if (!m_IconList.GetSize())
return FALSE;

m_nCurrentIcon++;
if (m_nCurrentIcon >= m_IconList.GetSize())
m_nCurrentIcon = 0;

return SetIcon(m_IconList[m_nCurrentIcon]);
}

BOOL CSystemTray::StopAnimation()
{
BOOL bResult = FALSE;

if (m_uIDTimer)
bResult = KillTimer(m_uIDTimer);
m_uIDTimer = 0;

if (m_hSavedIcon)
SetIcon(m_hSavedIcon);
m_hSavedIcon = NULL;

return bResult;
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray tooltip text manipulation

BOOL CSystemTray::SetTooltipText(LPCTSTR pszTip)
{
if (!m_bEnabled) return FALSE;

m_tnd.uFlags = NIF_TIP;
_tcscpy(m_tnd.szTip, pszTip);

return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);
}

BOOL CSystemTray::SetTooltipText(UINT nID)
{
CString strText;
VERIFY(strText.LoadString(nID));

return SetTooltipText(strText);
}

CString CSystemTray::GetTooltipText() const
{
CString strText;
if (m_bEnabled)
strText = m_tnd.szTip;

return strText;
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray notification window stuff

BOOL CSystemTray::SetNotificationWnd(CWnd* pWnd)
{
if (!m_bEnabled) return FALSE;

// Make sure Notification window is valid
ASSERT(pWnd && ::IsWindow(pWnd->GetSafeHwnd()));

m_tnd.hWnd = pWnd->GetSafeHwnd();
m_tnd.uFlags = 0;

return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);
}

CWnd* CSystemTray::GetNotificationWnd() const
{
return CWnd::FromHandle(m_tnd.hWnd);
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray menu manipulation

BOOL CSystemTray::SetMenuDefaultItem(UINT uItem, BOOL bByPos)
{
if ((m_DefaultMenuItemID == uItem) && (m_DefaultMenuItemByPos == bByPos))
return TRUE;

m_DefaultMenuItemID = uItem;
m_DefaultMenuItemByPos = bByPos;

CMenu menu, *pSubMenu;

if (!menu.LoadMenu(m_tnd.uID))
return FALSE;

pSubMenu = menu.GetSubMenu(0);
if (!pSubMenu)
return FALSE;

::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);

return TRUE;
}

void CSystemTray::GetMenuDefaultItem(UINT& uItem, BOOL& bByPos)
{
uItem = m_DefaultMenuItemID;
bByPos = m_DefaultMenuItemByPos;
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray message handlers

BEGIN_MESSAGE_MAP(CSystemTray, CWnd)
//{{AFX_MSG_MAP(CSystemTray)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CSystemTray::OnTimer(UINT nIDEvent)
{
ASSERT(nIDEvent == m_nIDEvent);
UNUSED(nIDEvent);

COleDateTime CurrentTime = COleDateTime::GetCurrentTime();
COleDateTimeSpan period = CurrentTime - m_StartTime;
if (m_nAnimationPeriod > 0 && m_nAnimationPeriod < period.GetTotalSeconds())
{
StopAnimation();
return;
}

StepAnimation();
}

LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam)
{
//Return quickly if its not for this tray icon
if (wParam != m_tnd.uID)
return 0L;

CMenu menu, *pSubMenu;
CWnd* pTarget = AfxGetMainWnd();

// Clicking with right button brings up a context menu
if (LOWORD(lParam) == WM_RBUTTONUP)
{
if (!menu.LoadMenu(m_tnd.uID))
return 0;

pSubMenu = menu.GetSubMenu(0);
if (!pSubMenu)
return 0;

// Make chosen menu item the default (bold font)
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);

// Display and track the popup menu
CPoint pos;
GetCursorPos(&pos);

pTarget->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0,
pTarget->GetSafeHwnd(), NULL);

// BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"
pTarget->PostMessage(WM_NULL, 0, 0);

menu.DestroyMenu();
}
else if (LOWORD(lParam) == WM_LBUTTONDBLCLK)
{
// double click received, the default action is to execute default menu item
pTarget->SetForegroundWindow();

UINT uItem;
if (m_DefaultMenuItemByPos)
{
if (!menu.LoadMenu(m_tnd.uID))
return 0;

pSubMenu = menu.GetSubMenu(0);
if (!pSubMenu)
return 0;

uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID);
}
else
uItem = m_DefaultMenuItemID;

pTarget->SendMessage(WM_COMMAND, uItem, 0);

menu.DestroyMenu();
}

return 1;
}

LRESULT CSystemTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == m_tnd.uCallbackMessage)
return OnTrayNotification(wParam, lParam);

return CWnd::WindowProc(message, wParam, lParam);
}
LJN 2000-06-20
  • 打赏
  • 举报
回复
填充一个NOTIFYICONDATA对象,
再用Shell_NotifyIcon函数即可.
技术选型1,前端微信小程序原生框架cssJavaScript2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云数据库云存储 1,小程序端1-1,首页首页有以下几个功能点点餐菜单浏览排号等位拨打电话顶部轮播图搜索菜品这里点餐分两种1,可以设置直接点餐直接点餐:适合小型饭店,或者奶茶类的快餐店。直接就可以下单,不用识别桌号2,也可设置扫码点餐扫码点餐适合中大型饭店,可以区分桌号,方便管理我后面会教大家如何生成桌号二维码,只需要把对应桌号的二维码贴在餐桌上,用户点击 扫码点餐 识别二维码,即可获取到桌号信息。1-2,菜品浏览页菜品浏览分两种1,不带分类适合菜品少的时候2,带分类菜品多的时候,带分类更方便客户选择不带分类 带分类 1-3,搜索功能我们这里搜索有两个触发方式1,直接点击搜索图标2,点击键盘上的搜索键1-4,搜索结果,支持模糊查询如我这里只搜‘鱼’,那么菜品中所有包含鱼的都可以搜索到 1-5,购物车首先菜品列表页可以直接添加商品到购物车购物车弹起后可以做如下操作1,增删单个菜品2,清空购物车3,删除菜品这些操作都和菜品列表是联动的,也就是菜品列表和购物车里增删个数,都是可以同步的。我会在项目预览章节的视频里做具体演示。1-6,下单页下单页就是确认订单后进行下单支付的。有以下功能1,点餐明细2,价格计算3,桌号地址4,就餐人数5,添加备注6,点击下单1-7,支付页支付页分两种方式1,模拟支付适合前期学习,毕业设计等演示类的场景。2,真实微信支付适合商用,但是使用微信支付必须要有营业执照,所以前期如果只是学习的话,建议使用模拟支付。 1-8,我的订单页我的订单页分以下几个状态1,新下单待上餐2,已上餐待评价3,订单完成4,订单取消1-9,提交评论页我们可以对店家进行评论。 1-10,评价列表页可以查看所有评价和自己的评价 1-11,排号等位可以看出,我们可以选择就餐人数,排大桌或者小桌。我这里已排小桌为例通过上图可以看出1,当前排号情况2,我的排号3,可以重新排号4,到号时会有到号提示后面我会把订阅消息功能加进来,这样到号后会有订阅消息提示。 1-12,个人中心个人中心分登录和未登录两种状态未登录已登录 1-13,微信授权登录小程序 2,后厨端和排号管理端2-1,后厨端主要供后厨的厨师使用1,可以查看当前新下单2,完成后可以操作菜品完成3,可以监听用户新下单4,有新订单时会有语音提示5,厨师登录页语音提示我会在视频课里具体演示厨师登录页 厨师管理页可以查看待制作订单用户新下单后,会有语音提示 2-2,排号管理页同样也有登录页,和上面厨师登录一样,这里重点看下排号管理页管理员可以查看当前排号情况,可以叫号。3,cms管理后台我们这里的可视化网页后台使用的时云开发自带的cms(内容管理)3-1,登录页 3-2,管理后台我们可以在这里 1,添加轮播图,删除轮播图,修改轮播图2,添加菜品,删除菜品,修改菜品,上架下架菜品3,管理订单4,查看评价5,管理后厨和排号管理员6,查看排号数据  比如我查询某个用户的所有订单 查询所有新下单还未上菜的订单 还有更多的功能,我会在视频课里给大家用视频来演示,这样更直观。 4,数据库数据库我们这里用云开发自带的云数据库餐厅管理员查看趋势图

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧