Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动重新排序MFC控件ID_C++_Visual Studio_Visual C++_Mfc_Resources - Fatal编程技术网

C++ 自动重新排序MFC控件ID

C++ 自动重新排序MFC控件ID,c++,visual-studio,visual-c++,mfc,resources,C++,Visual Studio,Visual C++,Mfc,Resources,我有一个非常古老的MFC应用程序,多年来被很多人(他们中的大多数人甚至可能不是CS的人)所触动,我喜欢称之为“无政府设计模式” 无论如何,其中一个对话框有一系列56个垂直滑块和复选框。但是,对话框上还有其他滑块和复选框,如下所示 现在,问题是附加的滑块和复选框采用的ID与对话框的滑块/复选框系列顺序一致。我的任务是将更多的滑块和复选框添加到系列中(在滑块控制组框中的空白处),不幸的是,由于代码> IDCXSLIDRID57 通过代码> IDCXSLULLID61/代码>已经在对话框中(同样用于

我有一个非常古老的MFC应用程序,多年来被很多人(他们中的大多数人甚至可能不是CS的人)所触动,我喜欢称之为“无政府设计模式”

无论如何,其中一个对话框有一系列56个垂直滑块和复选框。但是,对话框上还有其他滑块和复选框,如下所示

现在,问题是附加的滑块和复选框采用的ID与对话框的滑块/复选框系列顺序一致。我的任务是将更多的滑块和复选框添加到系列中(在滑块控制组框中的空白处),不幸的是,由于代码> IDCXSLIDRID57 通过代码> IDCXSLULLID61/代码>已经在对话框中(同样用于复选框),现有代码,如下面的片段将被打破:

pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
有没有更好的方法可以不用手动修改资源文件?我见过一个叫做的第三方工具,看起来它能帮我做我想做的事情,但是这个软件有点贵,特别是因为我只会用一次。我想我可以试试这个演示,但是这些限制可能会限制我

FI,我使用Visual C++ 6(是的…我知道,不要笑,它是强迫我)。< /P> < P>代替书写:

pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
你可以写:

pVSlider = (CSliderCtrl *)GetDlgItem(GetSliderID(i));
其中,
GetSlider
是一个返回滑块编号i的id的函数

GetSlider函数

int GetSliderID(int nslider)
{
  static int sliderids[] = {IDC_SLIDER1, IDC_SLIDER2, IDC_SLIDER3, .... IDC_SLIDERn};
  ASSERT(nslider < _countof(sliderids));
  return sliderids[nslider];    
}
int-GetSliderID(int-nslider)
{
静态int sliderids[]={IDC_SLIDER1,IDC_SLIDER2,IDC_SLIDER3,….IDC_SLIDERn};
断言(nslider<_countof(sliderids));
返回滑块[nslider];
}
使用此方法,
IDC\u滑块
符号不需要具有顺序值。

而不是写入:

pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
你可以写:

pVSlider = (CSliderCtrl *)GetDlgItem(GetSliderID(i));
其中,
GetSlider
是一个返回滑块编号i的id的函数

GetSlider函数

int GetSliderID(int nslider)
{
  static int sliderids[] = {IDC_SLIDER1, IDC_SLIDER2, IDC_SLIDER3, .... IDC_SLIDERn};
  ASSERT(nslider < _countof(sliderids));
  return sliderids[nslider];    
}
int-GetSliderID(int-nslider)
{
静态int sliderids[]={IDC_SLIDER1,IDC_SLIDER2,IDC_SLIDER3,….IDC_SLIDERn};
断言(nslider<_countof(sliderids));
返回滑块[nslider];
}

使用该方法,代码不需要有连续值。

Visual C++ 6是经典的,我不会笑的,我保证。如果您留下足够的空间,只需更改一位数字,那么手动重新编号资源ID并不困难。例如,如果
IDC_SLIDER57
为234,而
IDC_SLIDER61
为238,只需将第一位数字从2改为3,您就可以释放IDs 234-333。是的,但我也希望名称保持一致,这会引起问题,因为它会对我大喊大叫,符号已经存在,您可以为滑块保留位置,从4000到5000,用不同的名称<代码>定义ICDSLoLoxDyx1 4001 /Cuth.Do手动完成,否则对话框编辑器试图控制这些常量(并且备份您的项目,如果您碰到错误的东西,所有这些都出错)。如果您希望更新的UI外观Visual C++ 6是一个经典的话,请参见此,我不会笑。如果您留下足够的空间,只需更改一位数字,那么手动重新编号资源ID并不困难。例如,如果
IDC_SLIDER57
为234,而
IDC_SLIDER61
为238,只需将第一位数字从2改为3,您就可以释放IDs 234-333。是的,但我也希望名称保持一致,这会引起问题,因为它会对我大喊大叫,符号已经存在,您可以为滑块保留位置,假设从4000到5000,使用不同的名称
#定义IDC_SLIDER_X1 4001
手动执行此操作,否则对话框编辑器会尝试控制这些常量(并备份您的项目,如果您触摸错误的东西,一切都会出错)。如果您想要更新UI外观,请参见此