一般是这样写的:
point.x = LOWORD (lParam) ;
point.y = HIWORD (lParam) ;
ClientToScreen (hwnd, &point) ;
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL)
其中,point是POINT型的,用来得到鼠标点的位置,hMenu是HMENU型的,在响应WM_CREATE时可用LoadMenu得到菜单句柄

解决方案 »

  1.   

    请问楼上,LoadMenu的格式是这样的
    HMENU LoadMenu(          
        HINSTANCE hInstance,
        LPCTSTR lpMenuName
    );
    那么这两个参数分别填写什么呢?貌似没有联系到菜单的资源ID
      

  2.   

    HMENU LoadMenu(
    HINSTANCE hInstance,
    LPCTSTR lpMenuName 《----菜单ID的名字
    );
    lpMenuName
    [in] Pointer to a null-terminated string that contains the name of the menu resource. Alternatively, this parameter can consist of the resource identifier in the low-order word and zero in the high-order word. To create this value, use the MAKEINTRESOURCE macro
    通常用MAKEINTRESOURCE 这个宏
      

  3.   

    HMENU hMenu = LoadMenu(          
        NULL,
        MAKEINTRESOURCE(ID),
    );
    point.x = LOWORD (lParam) ;
    point.y = HIWORD (lParam) ;
    ClientToScreen (hwnd, &point) ;
    TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL)
      

  4.   

    我采用了楼上高手的方法,把它的代码加入到WndProc()中的WM_CONTEXTMENU消息响应中运行,结果可以出现菜单,但是菜单的第一级显示不出来,只显示了一个细长条,第二级可以正常显示,怎么办呢?
      

  5.   

    用GetSubMenu获得的子菜单来弹出。