在我的一个窗口上做了一个菜单,TrackPopupMenu后,我希望过几秒如果没有操作,就在SetTimer里把菜单销毁了,怎么把这个TrackPopupMenu的菜单销毁了?

解决方案 »

  1.   

    一般不这样用,希望这样做的都是针对窗口.因为菜单点一下别处或ESC自然会销毁.
    实在想使用时间来销毁,这样做试试
    1) 重载PreTranslateMessage(), 监视键盘鼠标消息, 并记录到一个Timer能访问的变量中
    2) SetTimer(), 在这个函数中查看1)中设置的变量,若没有动作,则销毁菜单.
      

  2.   

    我是要问如何实现销毁菜单的这个动作?用DeleteMenu,菜单窗口没有消失!
      

  3.   

    DestroyMenu也不行啊,那窗口还在
      

  4.   


    窗口还在?你到底是要销毁什么?销毁菜单就用DestroyMenu,检查一下菜单句柄对不对
      

  5.   

    DestroyMenu后菜单窗口也就没了么?
    句柄正确也执行了,就是那窗口没有消失
      

  6.   


    先SetMenu(NULL, hMenu)再DestroyMenu试试。如果不行话就发鼠标点击消息来模拟鼠标点击。
      

  7.   

    //定时销毁和定时不显示可是两回事,DestroyMenu他的作用是你创建一个弹出按钮之后(比如右键弹出菜单),对他的操作结束后你需要用这个函销毁他,下次右键再重新创建弹出,
    //如果你本次创建完了不销毁,你下次再右键弹出就会出错. 这个当然满足不了楼主的要求.你可以考虑设计一个BOOL变量来调用m_menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
    //改变最后一个参数的值,最后一个参数为NULL的时候就不会显示,this会显示.我没有试过,你可以去试试
      

  8.   

    在时钟消息里模拟一个esc键消息
    keybd_event(VK_ESCAPE, 0, 0, 0);
    keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);
      

  9.   

    试了下 还真不行 弹出菜单不消失 都无法响应timer函数 也无法模拟按键
      

  10.   

    我测试了
    可以啊
    我用的MFC单文档