//===================================================================================================================================
2.关于图标的更改,和托盘化。
2.1如何加图标:资源ICON里面把要导入的图标加入(注意图标有一定的要求,一般很小),注意icon的ID。
2.2如何设置托盘菜单:相应的在menu里面插入资源,写上字。
2.3最小化托盘和删除托盘...: 函数名 void ToTray(); void DeleteTray();
afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);//响应鼠标对托盘图标左键点击,右键点击等事件的处理函数
afx_msg void OnShow();//自定义消息连接(将消息跟窗口函数挂钩)
afx_msg void OnClose();
//============================================
BEGIN_MESSAGE_MAP(CDBToolDlg,CDialog)//系统消息函数连接
。。。。。。。
ON_MESSAGE(WM_SHOWTASK, &CDBToolDlg::OnShowTask)
ON_COMMAND(ID_SHOW, &CDBToolDlg::OnShow)//ID_SHOW是menu打开主界面的字的ID
ON_COMMAND(ID_CLOSE, &CDBToolDlg::OnClose)
END_MESSAGE_MAP()
//========================================
void CDBToolDlg::ToTray()//在托盘区显示图标
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_ICON3;//次ID就是软件图形的id
nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK;// #define WM_SHOWTASK (WM_USER+1)//自定义消息名称
nid.hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));
strcpy(nid.szTip,"数据库工具");//信息显示条
shell_NotifyIcon(NIM_ADD, &nid);// 在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口
}
void CDBToolDlg::DeleteTray()//托盘区图标撤去
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_ICON3;//次ID就是软件图形的id
nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK;// #define WM_SHOWTASK (WM_USER+1)//自定义消息名称
nid.hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));
strcpy(nid.szTip,"程序名称");//信息显示条
shell_NotifyIcon(NIM_DELETE, &nid);// 在托盘区删除图标//其中只有shell命令换了NIM_DELETE vs NIM_ADD
}
//=========================================================
void CDBToolDlg::OnShow()
{
this->ShowWind(SW_SHOW);
DeleteTray();//主界面显示后,退去托盘图标
}
void CDBToolDlg::OnClose()
{
DeleteTray();//点击托盘菜单显示的推出按钮后,推出程序,删掉图标
exit(1);
}
//=====================================================================
LRESULT CDBToolDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
if(wParam!=IDI_ICON3)
return 1;//如果鼠标位置不是移动在ID为IDI_ICON3的ICON上,则程序返回
switch(lParam)//如果移动到该图标,且鼠标做了iParam的信息则根据信息选择函数功能执行
{
case WM_RBUTTONUP://右键起来时的消息,做出如下
{
CMenu menu;
Cpoint point;
::GetCursorPos(& point);//将显示的位置委托给point变量来操作
menu.LoadMenu(IDR_MENU1);//显示我们先前创建的Menu资源
menu.GetSubMenu(0)->TrackPopupMenu(TPM_CENTERALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,point.x,point.y,this);
}
break;
case WM_LBUTTONDBLCLK://双击左键
{
OnShow();//显示主界面,并撤掉图标
}
default::
break;
}
return 0;
}
//====================================修改关掉界面的操作============
void CDBToolDlg::OnSysCommand(UINT nID,LPARAM lParam)//修改系统函数
{
if(nID== SC_MINIMIZE )//窗口上最小化图标点击后,就托盘化(最小化)
ToTray();
else if(nID== SC_CLOSE)//窗口上关闭图标点击后,就关闭
OnClose();
else
CDialog::::OnSysCommand(nID,lParam);
}