当前位置:编程学习 > C#/ASP.NET >>

请问 :在Ocx组件里 用TrackPopupMenu 不能显示弹出菜单

     网页调用组件,在有的网页显示出得来,在有的网页不能显示出来。 --------------------编程问答-------------------- 在xp 上 弹出菜单显示的出来, 
在win2008上不能显示弹出菜单,iSelection 总是返回0
void CWebSignCtrlCtrl::DoRightClick()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CMenu   m_popmenu; 
m_popmenu.LoadMenu(IDR_MENU1); 

if (m_Lock=="1") {
m_popmenu.GetSubMenu(0)->ModifyMenu(ID_0_LOCK, MF_BYCOMMAND|MF_STRING, ID_0_LOCK, "解除锁定");
}

int iSelection = ::TrackPopupMenu(m_popmenu.GetSubMenu(0)->m_hMenu,TPM_LEFTALIGN|TPM_RETURNCMD,pMouse.x,pMouse.y,0,hWnd,NULL);

LRESULT lr = ::SendMessage(hWnd, WM_COMMAND, iSelection, (LPARAM)this);


}
--------------------编程问答-------------------- 看看和下面的情况是否有关联
http://forums.devx.com/showthread.php?t=136075
--------------------编程问答-------------------- http://www.windows-devel.com/windev.htm

Why doesn't my Context Menu dismiss properly when I click elsewhere ? [Context Menu, TrackPopupMenu(), Article, Visual C++] www.mooremvp.freeserve.co.uk 20-Sep-2001 by Bob Morre

21. 
Why doesn't my Context Menu dismiss properly when I click elsewhere ?
 
This is a known problem with TrackPopupMenu(). The cure is simple, 
though somewhat obscure. Immediately before you call TrackPopupMenu, make a 
call to SetForegroundWindow for your menu's owner window. Then immediately 
after the call to TrackPopupMenu, post the same window a WM_NULL message. 
Bizarre, but it works. Look at this sample code:
 
    HMENU hQuick = ::GetSubMenu (m_hUtility, IDM_QUICK);
    POINT CurPos ;
    GetCursorPos (&CurPos);
 
    SetForegroundWindow (); // Bodge
 
    TrackPopupMenu (hQuick,
                    TPM_LEFTBUTTON,
                    CurPos.x,
                    CurPos.y,
                    0,
                    GetSafeHwnd(),
                    NULL);
 
    PostMessage (WM_NULL, 0, 0); // Bodge
 
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,