我正在尝试使用TestStack.White自动化MFC应用程序(用于UI测试目的)
当在用CMFCMenuBar (后来的停靠框架)编写的MFC应用程序中使用TestStack.White时,我注意到以下代码由于window.MenuBar为空而失败
var menu = window.MenuBar.MenuItem("Window");
menu.Click();我知道我可以用以下方法来克服这个问题
TestStack.White.UIItems.MenuItems.Menu windowMenu = win.Get<TestStack.White.UIItems.MenuItems.Menu(SearchCriteria.ByText("Window"));
windowMenu.Click();但是我真正想做的是获取ChildMenus,这样我就可以在window菜单中查看打开的窗口列表,但是windowMenu.ChildMenus是空的
我很确定这是因为菜单实际上是一个工具栏/工具条(可停靠的)
有人知道如何获取菜单项(平铺、层叠、Window1……)从“窗口”菜单
还有没有人看过这个问题或者找到了解决办法?
提前感谢
保罗
发布于 2016-05-24 01:02:35
是的,MFC功能包菜单实际上是一个带有按钮的工具栏。与旧式菜单相比,它使用了不同的过程来实现。
在您的CFrameWndEx派生类中,为了获得菜单栏,您可以执行以下操作:
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();然后,这取决于如何处理它。例如,如果要获取构成菜单栏的CMenu对象,可以执行以下操作:
CMenu* pMenu= pMenuBar->GetMenu();如果你想删除一些菜单,你可以这样做(注意相反的顺序):
pMenuBar->RemoveButton(4);
pMenuBar->RemoveButton(3);您不能以典型的YourCFrameWndExDerivedClass::GetMenu()方式获取菜单,因为这些新的MFC Feature Pack类在初始化主框架时故意执行SetMenu(NULL),正如您在调用堆栈中所看到的:

我不是绝对确定,但我认为您不能像在旧样式菜单中那样执行覆盖YourCFrameWndExDerivedClass::OnInitMenu()。但您仍然可以使用YourCFrameWndExDerivedClass::OnInitMenuPopup()覆盖。
https://stackoverflow.com/questions/36422855
复制相似问题