急,怎样知道PopupMenu是弹出了还是消失了?

SuperQM 2001-02-06 07:51:00
...全文
343 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhl2000 2001-02-10
  • 打赏
  • 举报
回复
可用api的anypopup函数来判断
SAsura 2001-02-09
  • 打赏
  • 举报
回复
你可以用新版oicq试一下,左键点击系统托盘中的oicq图标,会弹出一个PopupMenu,再点别的程序,这个菜单是不会消失的,这是我才发现的,不知道算不算Bugs?
iamfool 2001-02-09
  • 打赏
  • 举报
回复
我试了
没有两个POPUP那回事呀,只能出来一个
SAsura 2001-02-08
  • 打赏
  • 举报
回复
TPopupMenu中有三个不同的句柄
1.PopupMenu->Handle //菜单句柄
2.PopupMenu->WindowHandle //处理菜单消息的窗口句柄
3.PopupMenu->Items->Handle //???可能是子菜单句柄

这三个句柄我都试了,都不行。

你用Winsight32可以看到PopupMenu的窗口句柄和类名称,类名称是{#32768:PopupMenu}和Desktop的类名称有些相似,应该是由系统建立的,而且同一时间内只可能有一个这样的窗口,其实同一时间内不论是菜单还是弹出式菜单都只可能有一个。
现在的问题就是找到这个窗口的句柄,由于是系统建立的,而且不返回句柄,所以TPopupMenu累里也没有保存这个句柄,看来是只能用FindWindow或EnumWindows来找了,但是如果传入#32768:PopupMenu的类名的话,是找不到的,不过Winsight32能看到就肯定能找到。另外,这个句柄是变化的,看来是动态创建的。你可以是一下用EnumWindows,应该能找到。
BCB 2001-02-08
  • 打赏
  • 举报
回复
BOOL EnumChildWindows(

HWND hWndParent, // handle to parent window
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);


BCB 2001-02-08
  • 打赏
  • 举报
回复
PopupMenu弹出时创建了一个窗体,问题是怎么找到这个窗体的句柄:

API有上个列出当前进程所有窗口的句柄,
我查一下




SuperQM 2001-02-08
  • 打赏
  • 举报
回复
看来我是不是该把这问题放到VC++中去了?
SuperQM 2001-02-08
  • 打赏
  • 举报
回复
to SAsura
我给的是PopupMenu->WindowHandle,
也试过从Form中取Menu然后再传都不行,你有何高见?
SAsura 2001-02-08
  • 打赏
  • 举报
回复
你打开这些窗口的时候有没有用winsight32看一下窗口类和句柄?
SAsura 2001-02-08
  • 打赏
  • 举报
回复
SAsura@263.net
SuperQM 2001-02-08
  • 打赏
  • 举报
回复
to SAsura
要是不信的话,告诉我你的Email,我把界面截给你看看!
SAsura 2001-02-08
  • 打赏
  • 举报
回复
你是怎么打开的?我怎么打不开?是不是右键的那个弹出式菜单?还是他们的弹出式窗口?

一个系统中可以同时弹出两个以上的右键菜单吗?不回吧。

你可以用Winsight32看一看,类名要是我说的那一个的窗口才是弹出式菜单的,我还没有见过有两个那个类名的窗口出现的时候。
SuperQM 2001-02-08
  • 打赏
  • 举报
回复
to SAsura
你说:"同一时间内不论是菜单还是弹出式菜单都只可能有一个",这可未必,我在我的机器上试了,我同时打开了“金山词霸”、我的程序、“输入法”等等的弹出菜单,并且每一个都是有效的,操作完一个还可以操作另一个……
SAsura 2001-02-07
  • 打赏
  • 举报
回复
PopupMenu弹出时创建了一个窗体,问题是怎么找到这个窗体的句柄
to SuperQM:
你用GetWindowInfo传给他的是谁的句柄?
gameboy999 2001-02-07
  • 打赏
  • 举报
回复
我也想知道!!!!!!!!
对了,如何获得当前系统中所有注册了的menu类?即正在运行中的窗体的所有菜单对象。
SuperQM 2001-02-07
  • 打赏
  • 举报
回复
The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right clicked) in the window.
不行的!


没辙了,我用GetWindowInfo,发现它的WINDOWINFO始终不变,连dwWindowStatus也从未改变!!
lixif 2001-02-07
  • 打赏
  • 举报
回复
procedure TForm.WndProc(var Msge: TMessage);
begin
inherited WndProc(Msge);
with Msge do
case Msg of
WM_CONTEXTMENU://PopupMenu弹出时
{在这里添加你的执行代码}
end;
end;
linkie 2001-02-07
  • 打赏
  • 举报
回复
有谁解决了这个问题,请各位告诉我一声呀!
Thank you!
SuperQM 2001-02-07
  • 打赏
  • 举报
回复
是啊,
我用API:GetMenuInfo()和GetMenu***()等,不知为何总是不行,GetLastError得知是参数错误,可是我的参数根本没错啊 :(
BCB 2001-02-07
  • 打赏
  • 举报
回复
呵呵,难度较大,弹出可以跟踪,什么时候又被关了,就没法知道了;
加载更多回复(2)

5,931

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧