VC中怎样建立一个只有系统托盘的程序

VC中怎样建立一个只有系统托盘的程序,第1张

不建窗口无法实现托盘消息的处理,随便建个窗口,隐藏了不就行了?

#define WM_NOTIFYICON (WM_USER+1)

#define IDM_SHOWMAIN 8577//托盘右键菜单的打开主界面选项

#define IDM_EXIT 24876//托盘右键菜单的退出选项

HMENU hpopupmenu

NOTIFYICONDATA notifyicondata

hpopupmenu=CreatePopupMenu()//创建一个d出式菜单

//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。

AppendMenu(hpopupmenu,MF_STRING,IDM_SHOWMAIN,TEXT("打开主界面"))

AppendMenu(hpopupmenu,MF_STRING,IDM_EXIT,TEXT("关闭"))

notifyicondata.cbSize=sizeof(NOTIFYICONDATA)

notifyicondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP//旗标NIF_ICON使hIcon成员有效,NIF_MESSAGE使uCallbackMessage成员有效,NIF_TIP使szTip成员有效

notifyicondata.hIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON))//拖盘图标

notifyicondata.hWnd=hwnd//接收通知消息的窗口

strcpy(notifyicondata.szTip,TEXT("鼠标悬停在托盘图标上的提示信息"))

notifyicondata.uCallbackMessage=WM_NOTIFYICON//自定义通知消息的ID

notifyicondata.uID=104//任务栏图标的ID,作为通知消息的wParam发送

Shell_NotifyIcon(NIM_ADD,&notifyicondata)

1、创建mfc工程(对话框)

2、在myApp.cpp中InitInstance()中修改如下:

CDialog* pd = new CDialog

HICON hIcon = LoadIcon(IDR_MAINFRAME)

pd->Create(IDD_TEMP_DIALOG)//IDD_TEMP_DIALOG是一个不显示的对话框资源ID

pd->SetWindowText("QQ_Loginer")

pd->SetIcon(hIcon, TRUE)

CQQ_LoginerDlg dlg(pd)

m_pMainWnd = &dlg

int nResponse = dlg.DoModal()

3、在myAppDlg.h中加入初始化变量和函数:

public:

void InitialNotifyIcon()

BOOL wndst

NOTIFYICONDATA NotifyIcon

protected:

afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam)

4、在myAppDlg.cpp中的OnInitDialog()加入如下代码:

wndst = FALSE

InitialNotifyIcon()

加入函数:

void CmyAppDlg::OnNotifyIcon(WPARAM wParam, LPARAM IParam)

{

if (IParam == WM_LBUTTONUP)

{

if (wndst)

{

ShowWindow(SW_SHOW)

}

else

{

ShowWindow(SW_HIDE)

}

wndst = !wndst

}

}

void CmyAppDlg::InitialNotifyIcon()

{

ShowWindow(SW_HIDE)

NotifyIcon.cbSize = sizeof(NOTIFYICONDATA)

NotifyIcon.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME)

NotifyIcon.hWnd = m_hWnd

lstrcpy(NotifyIcon.szTip, "QQ_Loginer")

NotifyIcon.uCallbackMessage = WM_NC

NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP

Shell_NotifyIcon(NIM_ADD, &NotifyIcon)

}

别忘记加入消息函数:

void CmyAppDlg::OnClose()

{

Shell_NotifyIcon(NIM_DELETE, &NotifyIcon)

exit(0)

CDialog::OnClose()

}

附:改变停留消息提示(淡黄色便签提示)的方法:

CString title

title = "[Refresh rate: " + m_interval + "s]"

AfxGetMainWnd()->SetWindowText(title)

lstrcpy(NotifyIcon.szTip, title)

Shell_NotifyIcon(NIM_MODIFY, &NotifyIcon)

要源码的hi我,这里贴怕吞。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7824637.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存