CMFCMenuButton没有关闭

时间:2015-08-14 10:17:00

标签: menu mfc cdialog popupmenubutton cmfcmenubutton

我有driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@name='DeDuplication & Survivorship_iFrame']"))); //then access the webelements like drop down box or text box in the page Select dropdown = new Select(driver.findElement(By.id("ruleId"))); dropdown.selectByVisibleText("titlecheck");//etc //After accessing all the elements in that iframe switchout of the iframe driver.switchTo().defaultContent(); CDialog。当我打开它时,一切正常:

CDialog with menu button

当我点击其他地方关闭菜单时会出现问题。菜单似乎不可关闭,除非用户选择它的选项。如果我按下键盘上的Escape,对话框会自动关闭,这太激烈了;我真的希望它只关闭菜单。

我知道我可以通过设置其属性" OS菜单"来解决这个问题。在资源文件中为True(或等效地,分配其属性CFMCMenuButton)。我会得到:

CDialog with menu button having OS Menu property set to TRUE

正如您在图片中看到的,后果是:

  • 我放松了图标(不是很重要)
  • 我放了一些物品'由m_bOSMenu= TRUE完成的(非常重要的)(旁注:第二个菜单栏也由OnInitMenuPopup完成,它应该是显示的)。如果用户点击这些选项,他们将会工作,他们不应该。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

答案来自MFC来源。

afxmenubutton.cpp函数中的文件CMFCMenuButton::OnShowMenu建议使用CDialogEx代替CDialog

#ifdef _DEBUG
    if ((pParent->IsKindOf(RUNTIME_CLASS(CDialog))) && (!pParent->IsKindOf(RUNTIME_CLASS(CDialogEx))))
    {
        TRACE(_T("CMFCMenuButton parent is CDialog, should be CDialogEx for popup menu handling to work correctly.\n"));
    }
#endif

然后我将对话框类改为派生自CDialogEx,现在一切正常!将OS Menu属性设置为False,将显示图标,并且禁用的选项实际上已禁用并显示为灰色!

更新https://msdn.microsoft.com/en-us/library/Bb983913.aspx

上的一些文档