您当前的位置: 首页 > 

txwtech

暂无认证

  • 3浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

VS2010 MFC如何添加菜单栏与弹出式菜单

txwtech 发布时间:2019-06-08 16:15:33 ,浏览量:3

VS2010 MFC如何添加菜单栏与弹出式菜单

 

 

右键弹出式菜单代码:

 

 

void CVs2010_MenuDlg::OnRButtonDown(UINT nFlags, CPoint point) //右键点击屏幕弹出菜单
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
  /*POINT screenPoint=point;
  ClientToScreen(&screenPoint);
  CMenu menu;
  VERIFY(menu.LoadMenu(IDR_MENU_RightButton));
  CMenu* pPopup=menu.GetSubMenu(0);
  ASSERT(pPopup!=NULL);
  pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,screenPoint.x,screenPoint.y,AfxGetMainWnd());*/
    CMenu m_Menu;
	CMenu* pMenu;
	CRect rect;
	ClientToScreen(&point);//坐标转换
	m_Menu.LoadMenu(IDR_MENU_RightButton);//加载菜单资源
	pMenu=m_Menu.GetSubMenu(0);//获取菜单句柄
	rect.top=point.x;
	rect.left=point.y;
	pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,rect.top,rect.left,this,&rect);//显示弹出菜单
    CDialogEx::OnRButtonDown(nFlags, point);//调用基类的方法
}

效果:

相关报错代码:

Vs2010_Menu.exe 中的 0x78ec643e (mfc100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突

 

BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,   CWnd* pWnd, LPCRECT lpRect) {  ASSERT(m_hMenu != NULL);//菜单的下级无内容,就会报错

 

 _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();  HWND hWndOld = pThreadState->m_hTrackingWindow;  HMENU hMenuOld = pThreadState->m_hTrackingMenu;  pThreadState->m_hTrackingWindow = pWnd->GetSafeHwnd();  pThreadState->m_hTrackingMenu = m_hMenu;  BOOL bOK = ::TrackPopupMenu(m_hMenu, nFlags, x, y, 0,    pThreadState->m_hTrackingWindow, lpRect);  pThreadState->m_hTrackingWindow = hWndOld;  pThreadState->m_hTrackingMenu = hMenuOld;

 

 return bOK; }

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0397s