兄弟姐妹,我想在状态上显示一个图标,该怎么做呢
解决方案 »
- 有人用过Matrox 的图像处理库(MIL)吗?请教个问题啊!
- CScrollView类的坐标问题
- 新手请出函数返回的问题
- 如何判断一个对话框已经调用过OnInitDialog()函数了?
- 用对话框得到的路径的保存
- 怎么样在程序中设置MENU菜单项的可用属性(ENABLED)
- 100分求示例代码,分不够再加,一经提供,立即结贴
- ---*小弟有些疑问:关于构造函数和initDialog?
- 在VC++下大家常用的有关表格的控件都不什么呀!??
- 偶心情十分糟,决定在最近3天内,陆续散掉1000分,每贴100分,每贴只分给5名象我心情一样糟的哥们,每人20分。(第七个100分)
- 一个很简单的问题,给100分先,不够再给,偶有的是分
- 我们做的一些桌面上的游戏程序是怎样放到网页上供网友在线玩的啊?
NOTIFYICONDATA m_trayData;
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated"));
#define WM_TRAY_NOTIFICATION WM_USER + 2000 /* 添加图标到任务栏
*/
memset(&m_trayData, 0, sizeof(m_trayData));
m_trayData.cbSize = sizeof(m_trayData);
m_trayData.hWnd = GetSafeHwnd();
m_trayData.uID = IDR_TRAY;
m_trayData.uFlags = NIF_ICON | NIF_MESSAGE;
m_trayData.uCallbackMessage = WM_TRAY_NOTIFICATION;
m_trayData.hIcon = AfxGetApp()->LoadIcon(IDI_CLUB);
CString strTrayTip;
strTrayTip.LoadString(IDI_CLUB);
if (!strTrayTip.IsEmpty())
{
#if (_WIN32_IE < 0x0500)
#define MAX_TIP 64
#else
#define MAX_TIP 128
#endif
if (strTrayTip.GetLength() > MAX_TIP)
{
strTrayTip = strTrayTip.Left(MAX_TIP);
}
m_trayData.uFlags |= NIF_TIP;
memcpy(&m_trayData.szTip, strTrayTip, strTrayTip.GetLength());
}
Shell_NotifyIcon(NIM_ADD, &m_trayData);// 消息定义
ON_MESSAGE(WM_TRAY_NOTIFICATION, OnTrayNotification)
// 状态栏消息响应
LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent)
{
if (uID == IDR_TRAY)
{
switch (lEvent)
{
case WM_RBUTTONUP:
{
CMenu menu;
if (menu.LoadMenu(IDR_TRAY))
{
CMenu* pSubMenu = menu.GetSubMenu(0);
CPoint ptMouse;
GetCursorPos(&ptMouse);
SetForegroundWindow();
TrackPopupMenu(pSubMenu->m_hMenu, 0, ptMouse.x, ptMouse.y, 0, m_hWnd, NULL);
}
}
break;
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
{
if (IsWindowVisible())
{
OnAppMin();
}
else
{
OnShowMainwnd();
}
}
break;
default:
break;
}
}
return 0;
}
ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
// TASKBARCREATED 消息的作用是:当EXPOLORER程序出错时,系统会自动再创建一个EXPOLORER,如果你不响应这个消息,你的图标,就从状态栏消失了。。响应函数如下
LRESULT CMainFrame::OnTaskBarCreated(WPARAM uID, LPARAM lParam)
{
Shell_NotifyIcon(NIM_ADD, &m_trayData);
return 0;
}
在 OnSize()里
{
CDC* pDC = GetWindowDC(..);
计算相对位置然后:
pDC->DrawIcon(..);
}
HDC hDc = ::GetDC(w_wndStatusBar);
CDC dc;
dc.Attach(hDc);
dc.DrawIcon(..);