我自己创建了一个菜单,想通过点击右键弹出这个菜单。我想默认情况用 TPM_LEFTALIGN 方式弹出,如果右键点击的位置过低,导致窗口无法按照 TPM_LEFTALIGN 方式弹出,则采用 TPM_LEFTBUTTON 方式弹出菜单,现在的问题是我如何判断菜单的高度,从而选择弹出方式。

解决方案 »

  1.   

    取得鼠标所在点的屏幕坐标位置:
    DWORD dwPos = GetMessagePos();
    CPoint point(LOWORD(dwPos),HIWORD(dwPos));
    根据point的不同以不同方式显示
      

  2.   

    1楼3楼,是会在动选择,但不是我想要的效果,我实在Windows Mobile 上作的
      

  3.   

    如果无法获得,那就自己做一个Pop-up的Dialog出来吧。这样肯定可以取得弹出菜单的尺寸。
      

  4.   

    在 WM_ENTERMENULOOP 消息里用 FindWindow 可以得到菜单的句柄,然后 GetWindowRect
      

  5.   

    WM_ENTERMENULOOP  我用的是vs 2005,我在属性框的“消息”里面没有找到这个消息
    我怎么重写这个函数啊?
    谢了
      

  6.   

    GetMenuItemCount() * GetSystemMetrics(SM_CYMENU)
      

  7.   

    你别管IDE里面有没有,你直接在重载这个消息对应的OnEnterMenuLoop 就行了,自己写映射
      

  8.   

    消息映射写好了,Findwindow找不到菜单,参数应该怎么写啊?
    FindWindow(L“CMenu”, NULL); 不行吗?
      

  9.   

    你的菜单的类是不是自己写的?那就在第一个参数中写自己的菜单类名,比如"CMyMenu",怎么可能直接是CMenu呢?
      

  10.   

    不是自己写的啊,就是在资源里编辑一个,然后
    CMenu MyMenu.LoadMenu(ID);这样装载的,
    我刚才查资料说是菜单的窗口类名#32768,试了也不行。