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