解决MFC中MDI程序中子级 菜单不能自动消失的问题。

来源:互联网 发布:淘宝怎么上传图片 编辑:程序博客网 时间:2024/06/05 06:16
使菜单自动消失的语句是
SetTimer(nRemovePopupTimerEvent, max(0, m_uiPopupTimerDelay - 1), NULL);
该语句在afxribbonpanelmenu.cpp中,其中 的值的初始化在
int CMFCPopupMenuBar::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CMFCToolBar::OnCreate(lpCreateStruct) == -1)return -1;if (m_uiPopupTimerDelay == (UINT) -1) // Not defined yet{m_uiPopupTimerDelay = 500;CSettingsStoreSP regSP;CSettingsStore& reg = regSP.Create(FALSE, TRUE);if (reg.Open(_T("Control Panel\\Desktop"))){CString strVal;if (reg.Read(_T("MenuShowDelay"), strVal)){m_uiPopupTimerDelay = (UINT) _ttol(strVal);// Just limit it to 5 sec:m_uiPopupTimerDelay = min(5000, m_uiPopupTimerDelay);}}}::GetCursorPos(&m_ptCursor);return 0;}

菜单不消失,是因为一些优化软件优化了MenuShowDelay使之变成了。从而导致max(0, m_uiPopupTimerDelay - 1)值为0xffffff,所以菜单要等到0xfffffff毫秒f秒之后才消失。解决方法,就是修改该注册表。

void CxxApp::FixMenuShowDelayTime(){UINT m_uiPopupTimerDelay = 500;CSettingsStoreSP regSP;CSettingsStore& reg = regSP.Create(FALSE, FALSE);if (reg.Open(_T("Control Panel\\Desktop"))){CString strVal;if (reg.Read(_T("MenuShowDelay"), strVal)){m_uiPopupTimerDelay = (UINT) _ttol(strVal);if (m_uiPopupTimerDelay == 0 ){strVal = _T("400");reg.Write(_T("MenuShowDelay"), strVal);}}reg.Close();}}

	
				
		
原创粉丝点击