实现程序运行后自动最小化到托盘,代码简单,仅供参考
主要是完成了点击托盘界面恢复,以及点击最小化之后,界面及任务栏图标消失,右键托盘后有对应菜单
#include "toolbox.h"
#include <cvirte.h>
#include <userint.h>
#include "demo.h"
static int panelHandle;
static int iconHandle;
int iconCB(int iconHandle, int event, int eventData);
void minimizeToTray(int panel);
void resetFromTray(int panel);
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "demo.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
minimizeToTray(panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
DetachTrayIconMenu (iconHandle);
RemoveSysTrayIcon (iconHandle);
return 0;
}
int CVICALLBACK panelCB (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
RemoveSysTrayIcon (iconHandle);
DetachTrayIconMenu (iconHandle);
break;
case EVENT_CLOSE:
QuitUserInterface (0);
break;
case EVENT_PANEL_MINIMIZE:
minimizeToTray(panel);
break;
}
return 0;
}
/*--------------------------------------------------------------------------*
* Description: 最小化该面板到托盘
*----------------------------------------------------------------------------*/
void minimizeToTray(int panel)
{
int index;
char file[500];
SetPanelAttribute (panel, ATTR_HAS_TASKBAR_BUTTON, 0);
SetSystemAttribute (ATTR_TASKBAR_BUTTON_VISIBLE, 0);
GetProjectDir(file);
strcat(file,"\\hand.ico");
InstallSysTrayIcon (file, "测试程序\n仅供装逼", iconCB, &iconHandle);
AttachTrayIconMenu (iconHandle);
InsertTrayIconMenuItem (iconHandle, "退出", &index);
InsertTrayIconMenuItem (iconHandle, 0, &index);
InsertTrayIconMenuItem (iconHandle, "显示主窗口", &index);
SetPanelAttribute (panel, ATTR_VISIBLE, 0);
}
/*--------------------------------------------------------------------------*
* Description: 从托盘中恢复
*----------------------------------------------------------------------------*/
void resetFromTray(int panel)
{
SetPanelAttribute (panel, ATTR_VISIBLE, 1);
SetSystemAttribute (ATTR_TASKBAR_BUTTON_VISIBLE, 1);
DisplayPanel (panel);
}
/*--------------------------------------------------------------------------*
* Description: 托盘函数
*----------------------------------------------------------------------------*/
int iconCB(int iconHandle, int event, int eventData)
{
switch(event)
{
case EVENT_MENU_ITEM:
switch(eventData)
{
case 1://对应 退出 索引
QuitUserInterface (0);
break;
case 3://对应 显示主窗口 索引
resetFromTray(panelHandle);
break;
}
break;
case EVENT_LEFT_CLICK:
resetFromTray(panelHandle);
break;
}
return 0;
}