我在ResourceView里建了几组菜单IDR_MENU1、IDR_MENU2...
然后想右键弹出相应的菜单
开始照书上的:
POINT pp;
GetCursorPos(&pp); CMenu *pt, t;
t.LoadMenu(IDR_MENU1);
pt=t.GetSubMenu(0);
::SetForegroundWindow(tind.hWnd);
::TrackPopupMenu(pt->m_hMenu, 0, pp.x, pp.y, 0, m_hWnd, NULL);
::PostMessage(m_hWnd, WM_NULL, 0, 0);结果编译通过,一点右键就报access violation的错,
后来在网上查了查,改成:
POINT pp;
GetCursorPos(&pp); CMenu hMenu;
hMenu.LoadMenu(IDR_MENU1);
hMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, pp.x, pp.y, this);还是一样的错,错误指向:
BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect)
{
=> ASSERT(m_hMenu != NULL); _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
......报m_hMenu的错,也不知道怎么搞的
现在只好先用CreatePopupMenu和AppendMenu自定义菜单,很郁闷,
请高手指点一下弹出做好的菜单该怎么写?谢谢!
然后想右键弹出相应的菜单
开始照书上的:
POINT pp;
GetCursorPos(&pp); CMenu *pt, t;
t.LoadMenu(IDR_MENU1);
pt=t.GetSubMenu(0);
::SetForegroundWindow(tind.hWnd);
::TrackPopupMenu(pt->m_hMenu, 0, pp.x, pp.y, 0, m_hWnd, NULL);
::PostMessage(m_hWnd, WM_NULL, 0, 0);结果编译通过,一点右键就报access violation的错,
后来在网上查了查,改成:
POINT pp;
GetCursorPos(&pp); CMenu hMenu;
hMenu.LoadMenu(IDR_MENU1);
hMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, pp.x, pp.y, this);还是一样的错,错误指向:
BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect)
{
=> ASSERT(m_hMenu != NULL); _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
......报m_hMenu的错,也不知道怎么搞的
现在只好先用CreatePopupMenu和AppendMenu自定义菜单,很郁闷,
请高手指点一下弹出做好的菜单该怎么写?谢谢!
{
CView::OnRButtonDown(nFlags, point); CRect rc;
GetWindowRect(&rc);
point.x = rc.left + point.x;
point.y = rc.top + point.y;
CMenu* pPopMenu = new CMenu;
pPopMenu->LoadMenu(IDR_MENU1);
CMenu* pFileMenu = pPopMenu->GetSubMenu(0);
pFileMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x,
point.y, this);
delete pPopMenu;
}
GetCursorPos(&pt);
CMenu menu;
VERIFY( menu.LoadMenu( IDR_RIGHTMENU ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this );
错误指向WINCORE.CPP :
...
BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect)
{
=> ASSERT(m_hMenu != NULL); _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
...不会是我的vc有问题吧
敲了回车放到了下一行,这一行什么都没有,结果还是有个错误标志指向这个什么都没有的行
,晕