mfcc++托盘应用程序问题
MFC C++ Tray Application Issue
我正在创建一个mfc应用程序的任务栏图标,在MyView.cpp文件中我已经写了
static const UINT WMU_NOTIFY_TASKBAR_ICON = ::RegisterWindowMessage(_T("NOTIFY_TASKBAR_ICON"));
IMPLEMENT_DYNCREATE(CMyView, CView)
BEGIN_MESSAGE_MAP(CMyView, CView)
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
// added messages by the developer
ON_REGISTERED_MESSAGE(WMU_NOTIFY_TASKBAR_ICON, OnNotifyTaskbarIcon)
END_MESSAGE_MAP()
//...
void CMyView::AddTaskbarIcon()
{
DWORD dwMessage = NIM_ADD;
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = HWND(AfxGetApp()->m_pMainWnd);
nid.uID = 0;
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
nid.uCallbackMessage = WMU_NOTIFY_TASKBAR_ICON;
nid.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_SS_ICON));
nid.dwInfoFlags = NIIF_INFO;
::Shell_NotifyIconW(dwMessage, &nid);
}
LRESULT CMyView::OnNotifyTaskbarIcon( WPARAM wParam, LPARAM lParam )
{
UINT uID = (UINT)wParam;
UINT uMouseMsg = (UINT)lParam;
switch(uMouseMsg)
{
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONDBLCLK:
//if(IsIconic())
{
break;
}
case WM_RBUTTONDOWN:
{
// must be implemented:
// app popup menu will be showed
CMenu* pMenu = GetMenu();
if( pMenu )
{
CMenu *pSubMenu = NULL;
pSubMenu = pMenu->GetSubMenu( 0 );
{
SetForegroundWindow(); // *** little patch here ***
POINT pointCursor;
::GetCursorPos( &pointCursor );
pSubMenu->TrackPopupMenu( TPM_RIGHTALIGN,
pointCursor.x, pointCursor.y,
this );
}
}
}
break;
case WM_RBUTTONDBLCLK:
break;
case WM_MOUSEMOVE:
break;
}
return 0L;
}
和My.cpp
BOOL CMyApp::InitInstance()
{
//...
myViewPtr->AddTaskbarIcon();
//...
}
应用程序启动,图标出现在任务栏上,但鼠标悬停时它就消失了。我做错什么了吗?谢谢
AfxGetApp()->m_pMainWnd
指向主框架窗口,而不是视图。我怀疑框架窗口正在接收WMU_NOTIFY_TASKBAR_ICON
消息,而没有处理它,所以Windows删除了图标。
您可以在框架窗口类中处理消息,或者将句柄传递给视图,像这样:
void CMyView::AddTaskbarIcon()
{
...
nid.hWnd = GetSafeHwnd();
...
}
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 覆盖应用程序的低级别键盘挂钩问题
- Android因为权限问题而杀死Qt应用程序
- 通过 COM 对象连接 x64 应用程序时出现问题
- C# 的垃圾回收会给实时音频应用程序带来问题吗?
- 需要有关在qt c ++应用程序中使用崩溃问题的建议
- 将文件从 iOS 应用程序加载到 C++ 对象中/<iostream>iOS 上的问题
- 在跨平台桌面/移动应用程序套件中使用 ZeroMQ 来解决架构问题
- opengl 飞行模拟器应用程序中的文本呈现问题
- 按名称问题获取卸载应用程序路径
- 使用 OpenSSL 运行应用程序时出现问题
- Visual Studio 中的 Hello World C++ 应用程序 - 关于预编译标头不同的问题
- 获取应用程序图标时出现问题
- QML&C++应用程序中的绑定循环问题
- Android OpenCV 应用程序的内存问题
- 在Mac OS上编译Halide的camera_pipe应用程序时出现问题
- 在Qt和C++中从另一个应用程序启动一个应用软件会产生问题
- MVC:命令行应用程序的实现问题
- 模板化的部分应用程序调用问题
- 以下宏可能会给应用程序带来什么问题