动态创建的弹出式菜单,如何响应消息。
我用的是自定义消息WM_MYMESSAGE
sub1.AppendMenu(MF_STRING,WM_MYMESSAGE,"11 姚明");
然后在OnCommand响应但是用自定义消息的话虽然可以,但是我的菜单项非常多,而且个数是不确定的,更据数据而定,我该怎么办?

解决方案 »

  1.   

    都发送到一个自定义消息里,然后带一个ID号,根据ID做不同的switch分支
      

  2.   

    动态菜单通常用在具有相似功能上,这样可以靠一个ID就能够确定菜单行为。如现在换肤界面上,对界面风格的选择即可看作此种情形。此时你可以用:COMMAND_RANGE_HANDLER来设定菜单ID范围,你的动态菜单的ID只要放在这个范围就行了。COMMAND_RANGE_HANDLER(1001, 1100, DynMenu)LRESULT OnMenuExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    {
        switch( wID )
        {
            ...
        }
    }
      

  3.   

    楼上正解,消息的数目又没什么影响,直接switch,不需要的消息default。
      

  4.   

    只是我的菜单个数不确定,那我的case 后面得加多少个情况……
    问一下,COMMAND_RANGE_HANDLER(1001, 1100, DynMenu)这个改放在哪里?
      

  5.   

    添加菜单的时候保持ID在一定范围内连续,这个简单吧?然后用ON_COMMA那个ND_RANGE将这个范围内的菜单响应映射到一个函数中,参数就是菜单ID;然后你想用switch/case也可以,也可以用这个ID来调用相应的功能,比如一个ID和功能函数的映射表等,动动脑子,编程不是那么死板的。