主程序基于对话框,在主对话框上有按钮可以弹出子对话框,
右键菜单的问题出在子对话框上,我用
void CChildDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0); pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, 0, 0, this);
CDialog::OnRButtonDown(nFlags, point);
}
菜单闪一下,就没了。上面的代码如果放在主对话框中,就能弹出菜单,没问题
子对话框属性是popup的,请教各位!谢谢!
右键菜单的问题出在子对话框上,我用
void CChildDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0); pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, 0, 0, this);
CDialog::OnRButtonDown(nFlags, point);
}
菜单闪一下,就没了。上面的代码如果放在主对话框中,就能弹出菜单,没问题
子对话框属性是popup的,请教各位!谢谢!
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
ClientToScreen(&point);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, this);
CDialog::OnRButtonDown(nFlags, point);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* pPopMenu2=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
//SetForegroundWindow();
pPopMenu2->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pos.x,pos.y,this);
GetCursorPos( &p2 );
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
CWnd* pWnd = GetDlgItem( IDC_BUTTON1 );
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, p2.x, p2.y, this);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, p2.x, p2.y, this);
就阻塞了,根本不关析构的事!
bluebohe(不掠薄荷) 说的都是屁话,不要信他.
__________________________________________________________________________
请您放尊重些,我要求您向我道歉。否则,根据斑竹管理论坛暂行制度
http://expert.csdn.net/Expert/Manage/managerule.asp?frame=true&csdnstyle=
以及本版版规
http://expert.csdn.net/Expert/topic/2872/2872564.xml?temp=.7080805
我将向本版面版主投诉,请求他们处理您对我的伤害。
————————————————————————————————————
以下言论可直接删除(无论是否已结帖):
2.伤害他人的、故意挑起事端的话题:骚扰、中伤、污蔑他人,由受伤害者投诉或者网友评判;
CPoint p2;
GetCursorPos( &p2 );
CWnd* pWnd = GetDlgItem( IDC_BUTTON1 );
CRect rect;
CPoint p3 = p2;
pWnd->ScreenToClient( &p3 );
pWnd->GetClientRect( &rect );
if( rect.PtInRect( p2 ) )
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, p3.x, p2.y, this);
}
CMenu menu;在类成员中声明menu.LoadMenu(IDR_MENU1);
在对话框初始化时候加载
CMenu menu;
定义成表态变量或类成员或全局变量.
static CMenu menu ;---------------------------
技术上可行
符合你的要求吗?
如果不明白
请给我发短消息
请附: 帖子的地址
或在
http://www.338888.com/VCShare/Default.asp
上提问
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, this);//这里是阻塞的,在菜单没消息前pMenu并不会被析构
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, this);//这里是阻塞的,在菜单没消失前pMenu并不会被析构
//打错了一个字,sorry
menu.LoadMenu(IDR_MENU1);
CMenu *pMenu = menu.GetSubMenu(0);
ClientToScreen(&point);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, this);只是在该问题中没问题,:)
你说的是最好是这样做,但是你根本就没有解决原来的问题.
你解决的就是别人想要的,我就是给你这种人害惨了,说两句你就不满意了?
麻烦你在回答问题前想一想先,不要浪费别人时间,也不要浪费自己时间.
我查过你的帖子,你压根就没有发过一个帖子提问,那么何来的给我这种人害惨了?仁者见仁,智者见智,有不同意见你自己提就是了,何必要攻击别人?我知道TrackPopupMenu是阻塞的,但是楼主的问题在于菜单的一闪而逝,并且在主对话框中是没问题的,所以当然问题应该怀疑在于Menu对象的生命周期。你的代码中仅仅加入了菜单弹出位置的更改,并没有什么新的内容,所以不可能解决楼主的一闪而逝的问题。楼主的代码一般情况下是会在屏幕的左上角显示出一个菜单的
我没发过贴子?开玩笑!我之前就碰到这个问题
http://expert.csdn.net/Expert/topic/3025/3025575.xml?temp=9.951419E-02
你是怎么查的? 是不是search.csdn.net上查的?唉,我想我也是说得重了一点,我在这里向你道个歉。以后还要大家多多照顾呵~
楼主,这个问题该结了吧.
刚才搞错查询了,应该是下面的方式就对了:(,我没加后面的state参数http://expert.csdn.net/List/TopicsList.aspx?PostUserName=Meuck&page=20&State=1
bluebohe(不掠薄荷 )是个好人,向他学习!
up ~~!!!
不过bluebohe(不掠薄荷 )回答问题的时候也该想一下~~!
有一次我把所有原代码发给你,到现在还没有音信(如果很忙,没时间看,回个短消息就可以了,害我就像抓到救命稻草一样,苦等结果~~!!,后来还是自己动手解决了)不过算了,问题早解决了~~~~!!!!
说错了,不是bluebohe(不掠薄荷 )~~!!!!
道歉~~~!!!!!
我从来没有收到过你的代码啊!前些天垃圾邮件太多我的邮箱爆了,有问题,只要是到我邮箱的问题,无论我是否能解决都会回复的
我给出的代码是正确的,没有问题,错误在前面,
因原代码较长,我在原贴没给出OnRButtonDown函数前面部分的代码,
让大家疑惑,在此向大家致歉。
错误的原因是我在OnRButtonDown函数的前面部分,给另一个子窗口调用了SetActiveWindow,
从而导致右键菜单一闪而过,改正就ok了:)
因为在OnRButtonDown()函数前面部分给另一个子对话框发送了一个消息,在此消息处理中调用了SetActiveWindow(),实际上右键点下去这个SetActiveWindow无效,但却将右键弹出菜单迅速抹去了。
好了,谢谢各位,给分了!