C++ 将我的图标添加到系统托盘的顺序?

C++ 将我的图标添加到系统托盘的顺序?,c++,windows,mfc,system-tray,trayicon,C++,Windows,Mfc,System Tray,Trayicon,我正在编写一个MFC/C++应用程序,在系统托盘上放置几个图标。(图标的数量由用户控制,如果用户愿意,最多可以达到10个左右——每个图标都是应用程序的特定功能。) 我的问题是,我可以控制这些图标在托盘上的放置顺序吗 现在发生的是当我打电话 Shell_NotifyIcon(NIM_ADD, &nid); 按照一定的顺序,图标在实际托盘上的显示顺序是不同的。任务托盘只是一个工具栏32控件。你可以用这样的方法来处理它: HWND hWnd = ::FindWindow(_T("Shell_

我正在编写一个MFC/C++应用程序,在系统托盘上放置几个图标。(图标的数量由用户控制,如果用户愿意,最多可以达到10个左右——每个图标都是应用程序的特定功能。)

我的问题是,我可以控制这些图标在托盘上的放置顺序吗

现在发生的是当我打电话

Shell_NotifyIcon(NIM_ADD, &nid);

按照一定的顺序,图标在实际托盘上的显示顺序是不同的。

任务托盘只是一个工具栏32控件。你可以用这样的方法来处理它:

HWND hWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL);
if(hWnd)
{
    hWnd = ::FindWindowEx(hWnd,NULL,_T("TrayNotifyWnd"), NULL);
    if(hWnd)
    {
        hWnd = ::FindWindowEx(hWnd,NULL,_T("SysPager"), NULL);
        if(hWnd)
        {                
            hWnd = ::FindWindowEx(hWnd, NULL,_T("ToolbarWindow32"), NULL);
        }
    }
}
那么您应该可以将其称为:

::SendMessage(hWnd, TB_MOVEBUTTON, nFrom, nTo);

我很想被证明是错的,但我认为这是不可能的。为什么要首先添加10个图标?难道菜单或其他东西不更有意义吗?@Thomas:好的。这显然回答了我的问题。谢谢。你无法控制图标的显示顺序。只是学到了一些东西。事实证明,用户可以用鼠标拖动托盘图标来更改其顺序。适用于Windows 7和Windows 7。我真的可以将
TB_MOVEBUTTON
发送到一个不在我的进程中的窗口吗?您依赖的是可以随时更改的实现细节。@c00000fd:是的,因为您只直接在消息参数中传递整数值,不是依赖于任何特定进程地址空间的指针。@RaymondChen:理论上是正确的,但对于任何给定的版本,它都不会改变。不过OP应该在每个操作系统上测试它,并可能根据您运行的版本进行调整。例如,如果使用Metro皮肤运行Win8+,这将没有多大用处。任何Windows更新都可以更改它。目前还不清楚OP如何在Windows10上测试,因为它还不存在。