VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3539|回复: 28

右键单击,偶尔会同时显示托盘系统菜单和本身的弹出菜单,怎么解决?

[复制链接]

2

主题

15

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-4 10:30:01 | 显示全部楼层 |阅读模式
一盘情况下没问题,程序在托盘区显示一个图标,在图标上点右键,则出来程序设计好的弹出菜单,并且各功能都正常。
但,偶尔,偶尔会弹出托盘本身的系统菜单(同:在托盘时间上点右键出来的菜单),而且会导致我的程序本身的右键菜单失去焦点,但不消失。

请问怎么解决?是否要过滤掉托盘本身的系统菜单?怎样过滤?
尝试这样:
// 过滤系统菜单
HWND hTray = FindWindow(TEXT("Shell_TrayWnd"), NULL);
hTray = FindWindowEx(hTray, NULL, TEXT("TrayNotifyWnd"), NULL);
DestroyMenu( GetMenu(hTray) );
hTray = NULL;
但不行。

请高手指点,不胜感激!!
回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-4 11:18:01 | 显示全部楼层
是不是点右建的时候,你的图标被你动过了,比如删除,增加
回复

使用道具 举报

1

主题

15

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-1-5 02:24:01 | 显示全部楼层
是操作系统的问题,不是你的问题。
回复

使用道具 举报

0

主题

10

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-5 09:48:01 | 显示全部楼层
gz
回复

使用道具 举报

1

主题

15

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-5 10:15:01 | 显示全部楼层
是的,是操作系统的问题,这个问题碰到多了,比如那个音量,有时候点了好几个,怎么单击都关不掉
回复

使用道具 举报

2

主题

15

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-1-5 17:30:01 | 显示全部楼层
不应该是系统问题的。例如,卡巴斯基的托盘图标,就没有这种情况。我已经试了N次了...
回复

使用道具 举报

0

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-27 16:54:01 | 显示全部楼层
LPPOINT point = new tagPOINT;
GetCursorPos(point);
...
delete point;

用这行代码试试。
回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-28 11:09:01 | 显示全部楼层
在弹出菜单后
PostMessage(0)
回复

使用道具 举报

2

主题

15

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-7-14 13:45:01 | 显示全部楼层
PostMessage(0)
===============
这个怎么用,编译通不过啊。我是SDK编程。
是否:PostMessage(m_nid.hWnd, 0, 0, 0);
回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-7-21 22:15:01 | 显示全部楼层
To correct the first behavior, you need to make the current window the foreground window before calling TrackPopupMenu or TrackPopupMenuEx.

The second problem is caused by a problem with TrackPopupMenu. It is necessary to force a task switch to the application that called TrackPopupMenu at some time in the near future. This can be accomplished by posting a benign message to the window or thread.

The following code will take care of all of this:

    SetForegroundWindow(hDlg);

    // Display the menu
    TrackPopupMenu( hSubMenu,
                    TPM_RIGHTBUTTON,
                    pt.x,
                    pt.y,
                    0,
                    hDlg,
                    NULL);

    PostMessage(hDlg, WM_NULL, 0, 0);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表