首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMFCMenuBar和TestStack.White win.MenuBar为空

CMFCMenuBar和TestStack.White win.MenuBar为空
EN

Stack Overflow用户
提问于 2016-04-05 17:50:32
回答 1查看 220关注 0票数 1

我正在尝试使用TestStack.White自动化MFC应用程序(用于UI测试目的)

当在用CMFCMenuBar (后来的停靠框架)编写的MFC应用程序中使用TestStack.White时,我注意到以下代码由于window.MenuBar为空而失败

代码语言:javascript
复制
var menu = window.MenuBar.MenuItem("Window");
menu.Click();

我知道我可以用以下方法来克服这个问题

代码语言:javascript
复制
TestStack.White.UIItems.MenuItems.Menu windowMenu = win.Get<TestStack.White.UIItems.MenuItems.Menu(SearchCriteria.ByText("Window"));
windowMenu.Click();

但是我真正想做的是获取ChildMenus,这样我就可以在window菜单中查看打开的窗口列表,但是windowMenu.ChildMenus是空的

我很确定这是因为菜单实际上是一个工具栏/工具条(可停靠的)

有人知道如何获取菜单项(平铺、层叠、Window1……)从“窗口”菜单

还有没有人看过这个问题或者找到了解决办法?

提前感谢

保罗

EN

回答 1

Stack Overflow用户

发布于 2016-05-24 01:02:35

是的,MFC功能包菜单实际上是一个带有按钮的工具栏。与旧式菜单相比,它使用了不同的过程来实现。

在您的CFrameWndEx派生类中,为了获得菜单栏,您可以执行以下操作:

代码语言:javascript
复制
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();

然后,这取决于如何处理它。例如,如果要获取构成菜单栏的CMenu对象,可以执行以下操作:

代码语言:javascript
复制
CMenu* pMenu= pMenuBar->GetMenu();

如果你想删除一些菜单,你可以这样做(注意相反的顺序):

代码语言:javascript
复制
pMenuBar->RemoveButton(4);
pMenuBar->RemoveButton(3);

您不能以典型的YourCFrameWndExDerivedClass::GetMenu()方式获取菜单,因为这些新的MFC Feature Pack类在初始化主框架时故意执行SetMenu(NULL),正如您在调用堆栈中所看到的:

我不是绝对确定,但我认为您不能像在旧样式菜单中那样执行覆盖YourCFrameWndExDerivedClass::OnInitMenu()。但您仍然可以使用YourCFrameWndExDerivedClass::OnInitMenuPopup()覆盖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36422855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档