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我,这里贴怕吞。
在VC++中,想实现最小化MFC程序的时候,最小化到系统托盘,需要调用NOTIFYICONDATA类下面我们就来讲解一下如何简单实现一个系统托盘 我们以对话框程序为列
第一步:在Dlg类中//定义一个NOTIFYICONDATA类的成员变量,用来设置托盘
NOTIFYICONDATA NotifyIcon
第二步:声明一个消息响应函数 afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam)
上面那条代码也放在Dlg的头文件中
第三步:定义一个自定义消息 #define WM_NC WM_USER+1
上面那条代码也在Dlg的头文件中声明
注册消息 ON_MESSAGE(WM_NC,OnNotifyIcon)
上面那条代码在Dlg类中
第四步:在Dlg头文件中添加一个函数 用来响应点击最小化按钮
void changeMini()
并在Dlg类中实现这个函数
//响应最小化消息
void CChangeScreenDlg::changeMini()
{
ShowWindow(SW_HIDE)
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA)
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME)
NotifyIcon.hWnd=m_hWnd
lstrcpy(NotifyIcon.szTip,"MediaCraft EMMG")
NotifyIcon.uCallbackMessage=WM_NC
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP
Shell_NotifyIcon(NIM_ADD,&NotifyIcon)
}
第五步:截获最小化事件
在Dlg类中找到OnSysCommand函数
修改代码如下
if ((nID &0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout
dlgAbout.DoModal()
}
//拦截最小化事件
if(nID==SC_MINIMIZE)
{
//ToTray()
//用我们自己的消息响应最小化事件
changeMini()
}
else
{
CDialog::OnSysCommand(nID, lParam)
}
第六步:响应托盘的鼠标事件 也是实现我们第二部声明的消息响应函数
void CChangeScreenDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST)
ShowWindow(SW_SHOW)
}
}
最后一步:在类的析构函数中 记得销毁托盘图标对象
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon)
希望对你能有所帮助。
自定义消息:#define wm_user_msg + 100在消息响应中添加:
ON_MESSAGE(wm_user_msg, 自定的消息响应函数)
建立消息映射函数:
afx_msg 返回值 函数名(WPARAM wParam, LPARAM lParam)
再在CPP中写消息映射函数(消息处理部分)
即可实现消息的响应
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)