CMFCMenuBar和TestStack.White win.MenuBar为空
我正在尝试使用TestStack.White自动化MFC应用程序(用于UI测试) 当将TestStack.White与使用CMFCMenuBar(后来的停靠框架MFC)编写的MFC应用程序一起使用时,我注意到下面的代码由于window.MenuBar为null而失败CMFCMenuBar和TestStack.White win.MenuBar为空,mfc,white-framework,Mfc,White Framework,我正在尝试使用TestStack.White自动化MFC应用程序(用于UI测试) 当将TestStack.White与使用CMFCMenuBar(后来的停靠框架MFC)编写的MFC应用程序一起使用时,我注意到下面的代码由于window.MenuBar为null而失败 var menu = window.MenuBar.MenuItem("Window"); menu.Click(); 我知道我可以通过以下方法克服这个问题 TestStack.White.UIItems.MenuItems.Me
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();
TestStack.White.UIItems.MenuItems.Menu windowMenu=win.Get是的,MFC功能包菜单实际上是一个带有按钮的工具栏。与旧式菜单相比,它使用不同的过程来实现
在CFrameWndEx
派生类中,要获取菜单栏,可以执行以下操作:
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();
CMenu* pMenu= pMenuBar->GetMenu();
那就要看怎么处理了。例如,如果要获取构成菜单栏的CMenu对象,可以执行以下操作:
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();
CMenu* pMenu= pMenuBar->GetMenu();
如果要删除某些菜单,可以执行以下操作(注意顺序相反):
通过YourCFrameWndExDerivedClass::GetMenu()
无法以典型方式获取菜单,因为这些新的MFC功能包类在初始化主框架时故意执行SetMenu(NULL)
,如调用堆栈中所示:
我不能完全确定,但我认为您也无法像在旧式菜单中那样覆盖YourCFrameWndExDerivedClass::OnInitMenu()
。但是您仍然可以使用YourCFrameWndExDerivedClass::OnInitMenuPopup()
override 是的,MFC功能包菜单实际上是一个带有按钮的工具栏。与旧式菜单相比,它使用不同的过程来实现
在CFrameWndEx
派生类中,要获取菜单栏,可以执行以下操作:
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();
CMenu* pMenu= pMenuBar->GetMenu();
那就要看怎么处理了。例如,如果要获取构成菜单栏的CMenu对象,可以执行以下操作:
CMFCMenuBar *pMenuBar= m_Impl.GetMenuBar();
CMenu* pMenu= pMenuBar->GetMenu();
如果要删除某些菜单,可以执行以下操作(注意顺序相反):
通过YourCFrameWndExDerivedClass::GetMenu()
无法以典型方式获取菜单,因为这些新的MFC功能包类在初始化主框架时故意执行SetMenu(NULL)
,如调用堆栈中所示:
我不能完全确定,但我认为您也无法像在旧式菜单中那样覆盖YourCFrameWndExDerivedClass::OnInitMenu()。但是您仍然可以使用YourCFrameWndExDerivedClass::OnInitMenuPopup()
override