大家知道,调用TrackPopupMenu弹出菜单时,要求调用这个api的线程和接受菜单消息的窗口属于同一个线程,不然菜单不能成功的弹出。
我最近的一个项目里,就遇到了这个问题:要在UI线程弹出菜单,但是接收菜单消息的窗口在另外一个逻辑线程。
为了能够正常弹出菜单,我们一开始的想法是规避这个问题,让菜单在同一个线程工作,但是这样对现有的架构改动比较大。
我最后是这样解决这个问题的:
1.创建一个和菜单在同一线程的窗口来接收菜单消息,保证菜单能正常弹出。
2.将接收到的菜单消息,转发给另一个线程的窗口。
目前菜单工作的很正常。