MFC任务栏和状态栏快速开发
来源:互联网 发布:淘宝详情页模版 编辑:程序博客网 时间:2024/05/22 01:36
任务栏和状态栏快速开发
1. MFC下托盘图标的实现和托盘菜单
对话框头文件XXXDlg.h:
1.添加成员变量NOTIFYICONDATA m_nid;
2.添加tray消息响应函数的声明
//响应在托盘图标上的单击
LONGOnNotifyIcon(WPARAM wParam,LPARAM lParam);
----------------------------------------------------------------------
对话框实现文件XXXDlg.cpp:
1.定义tray消息#defineWM_NOTIFYICON WM_USER+5
2.CXXXDlg的构造函数添加
//InitializeNOTIFYICONDATA struct
memset(&m_nid,0, sizeof(m_nid));
m_nid.cbSize = sizeof(m_nid);
m_nid.uFlags = NIF_ICON |NIF_TIP |NIF_MESSAGE;
3.CXXXDlg的析构函数添加
m_nid.hIcon = NULL;
Shell_NotifyIcon(NIM_DELETE,&m_nid);
4.添加消息映射:
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
//...
ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)//手工添加消息映射
//...
END_MESSAGE_MAP()
5.OnInitDialog函数添加:
//添加系统托盘
m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hWnd = m_hWnd;
m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_ICON |NIF_MESSAGE |NIF_TIP;
m_nid.uCallbackMessage= WM_NOTIFYICON;
m_nid.hIcon =m_hIcon;
strcpy(m_nid.szTip,_T("XXX系统"));
Shell_NotifyIcon(NIM_ADD,&m_nid);
6. OnNotifyIcon函数的实现:
//响应在托盘图标上的单击
LONG CMainDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
//wParam中是响应消息的图标ID,lParam中则是Windows的消息
switch (lParam)// The backdrop icon sent us a message. Let's see what it is
{
case WM_RBUTTONDOWN:
{// 用户在托盘图标上单击鼠标右键,弹出菜单
CMenupMenu;
if(pMenu.LoadMenu(IDR_NOTIFY_MENU))
{
CMenu*pPopup = pMenu.GetSubMenu(0);
int id;
ASSERT(pPopup!=NULL);
CPointPoint;
if(IsIconic()) pPopup->EnableMenuItem(ID_MINSIZE,MF_BYCOMMAND |MF_DISABLED | MF_GRAYED);
// 根据对话框窗口的显示/隐藏状态修改菜单名称
if(IsWindowVisible())
{
if(!IsIconic())
pPopup->EnableMenuItem(ID_MAINDLG,MF_BYCOMMAND |MF_DISABLED | MF_GRAYED);
}
else
pPopup->EnableMenuItem(ID_HIDE,MF_BYCOMMAND |MF_DISABLED | MF_GRAYED);
//确定鼠标位置以便在该位置附近显示菜单
GetCursorPos(&Point);
SetForegroundWindow();
//根据菜单项操作
id = pPopup->TrackPopupMenu(TPM_RETURNCMD |TPM_LEFTALIGN |TPM_RIGHTBUTTON,Point.x,Point.y, this);
CWnd*pWnd = AfxGetMainWnd();
switch(id)
{
case ID_MAINDLG:
//窗口前端显示
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
case ID_HIDE:
pWnd->ShowWindow(SW_HIDE);
break;
case ID_MINSIZE:
pWnd->ShowWindow(SW_SHOWMINIMIZED);
break;
case ID_EXIT:
::PostQuitMessage(0);
break;
default:
break;
}
}
}
break;
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
//窗口前端显示
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
}
return 0;
}
1. MFC状态栏显示系统时间
1. 头文件中声明:
private:
CStatusBar m_StatusBar; //状态栏对象
2. OnInitDialog函数添加
//创建状态栏
m_StatusBar.CreateEx(this, SBARS_SIZEGRIP);
UINT panels[5];
m_StatusBar.SetIndicators(panels, 32);
CRect rect;
GetClientRect(rect);
int width = rect.Width()/5;
for (int i = 0; i<5; i++)
{
m_StatusBar.SetPaneInfo(i, 1000 + i, 0,width);
}
m_StatusBar.SetPaneText(0, _T("当前登录用户:"));
m_StatusBar.SetPaneText(1,theApp.m_strCurUser + _T("(")+theApp.m_strUserType+_T(")"));
m_StatusBar.SetPaneText(2, _T("当前系统时间:"));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
//启动ID为1的定时器,定时时间为1秒,刷新系统时间
SetTimer(1,1000, NULL);
3. Timer消息
//定时器
void CMainDlg::OnTimer(UINT_PTR nIDEvent)
{
CString str; //获取系统时间
CTime tm = CTime::GetCurrentTime();
str =tm.Format(_T("%Y-%m-%d %H:%M:%S"));
m_StatusBar.SetPaneText(3, str);
CDialogEx::OnTimer(nIDEvent);
}
4. OnSize消息
void CMainDlg::OnSize(UINT nType, int cx,intcy)
{
CDialogEx::OnSize(nType,cx,cy);
//判断状态栏是否被创建
if (IsWindow(m_StatusBar.m_hWnd))
{
CRectrect;
GetClientRect(rect);
intwidth = rect.Width() / 5;
for (int i =0; i<5; i++)
{
m_StatusBar.SetPaneInfo(i, 1000 + i,0, width);
}
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}
}
参考网址: http://blog.sina.com.cn/s/blog_4a6151550100lqk0.html
- MFC任务栏和状态栏快速开发
- VC6.0 MFC 隐藏任务栏图标和状态栏图标
- 状态栏和任务栏
- Notification顶部状态栏和下拉任务栏通知
- MFC工具条和状态栏
- MFC工具条和状态栏
- MFC工具条和状态栏
- MFC工具条和状态栏
- MFC隐藏和显示任务栏与标题栏
- MFC修改任务栏,窗口和exe图标
- MFC修改任务栏,窗口和exe图标
- MFC的工具条和状态栏
- MFC状态栏创建和设计
- MFC状态栏创建和设计
- MFC的工具条和状态栏
- MFC教程-MFC工具条和状态栏
- Ubuntu12.04任务栏和状态栏消失的解决办法
- MFC入门(四) 工具条和状态栏
- 架构设计的一些理解
- [6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?
- php面向对象视频笔记之第五章(错误和异常处理)
- openjudge1.10简单排序
- PAT---A1077. Kuchiguse (20)
- MFC任务栏和状态栏快速开发
- Qt5.0中lineEdit的输入输出
- Linux内核静态映射表建立过程分析
- 基于Xbian的树莓派电视盒子
- MFC设置窗体透明
- python学习笔记(一)基础语法 — 参考创客智造
- MFC指定对话框大小
- 有关shared_ptr的使用总结
- mysql的事务隔离级别