比如说,我想动态创建100个或者200个控件,而且不想和系统对话框创建的控件起相同,那么我动态创建的控件的取值范围要多少呢?

解决方案 »

  1.   

    你自己看看Resource.h就可以了,自己定个不与其中IDs冲突的范围就可以了。
      

  2.   

    问题是我的控件是动态产生多个,比如第一个是ID_BASE,可以保证不冲突,但是第100个控件ID_BASE+100就一定会不冲突吗?
      

  3.   

    Resource.h的ID,也不是杂乱无章的,一般间断连续,你找一个空缺处的id,开始连续一般不会冲突
      

  4.   

    id只不过是区分操作所对应的控件而已吧?
    我记得我用windiff糅合源于一个版本的两个程序,用另一个较高版本的源程序对照,直接把resource.h缺少的部分加进来,运气还比较好,没有发生冲突。
    我觉得只要id不会让程序分不清你当前操作针对的对象就好了,但如果你够勤劳,最好别耍小聪明。用有把握的数字区分开,以免程序做大了就比较混乱了。
      

  5.   

    >好像不同窗口的控件,即使它们id相同也不会冲突,是这样子的吗?
    ------------------------------------
    这与是否是同一个 project 有关. 
    一个 project, 只有一套 resource 起作用, 窗体不同, 但可能它们同在一个 project 中, 这 ID 就不能重; 如果 project 不同那就无所谓了.
      

  6.   

    取在RESOURCE.H里没出现滴就可以
      

  7.   

    你把ID也定义在resourse里,用的时候取你的宏就好了,呵呵
      

  8.   

    >好像不同窗口的控件,即使它们id相同也不会冲突,是这样子的吗?
    ------------------------------------
    这与是否是同一个 project 有关. 
    一个 project, 只有一套 resource 起作用, 窗体不同, 但可能它们同在一个 project 中, 这 ID 就不能重; 如果 project 不同那就无所谓了.
    -----------------------------------------------------------------------
    不是很同意,在不同的对话框内,控件的ID是可以重复的,比如任何对话框的控件ID都可以从指定的值比如9000开始,这样不会出现问题的,但是请不要和工程的全局ID重复,比如图片ID等.这是经过验证的,不信可以试试.说这个问题,主要是我在对话框重用里面把对话框的资源提取出来,然后控件的ID统一从9000开始,还没有出错过.不过根据官方说明,ID尽量不要重复.
    测试环境VC6
      

  9.   

    >好像不同窗口的控件,即使它们id相同也不会冲突,是这样子的吗?
    ------------------------------------
    这要看你怎么用控件了,如果你不需要区别它们,比如只是用来显示的静态控件,即使重复也是
    没有问题的;但是如果你要操作它们,比如要获得它们的句柄,就会出现问题。
      

  10.   

    #define _APS_NEXT_RESOURCE_VALUE        378
    #define _APS_NEXT_COMMAND_VALUE         40077
    #define _APS_NEXT_CONTROL_VALUE         2141上面是我工程里的Resource.h里最后定义的下一个生成ID的数值,真想改的话,打个比方,可以把40077改为41077,这样中间的东西就都归你自己用了。另外,一个project里是允许ID号重复的。因为有些ID是必须连在一起使用的,比如用ON_COMMOND_RANGE时就有这个要求。因此只是说可以重复,但一定要尽量避免这种情况的出现