自动重新排序MFC控件ID

时间:2016-02-02 21:19:15

标签: c++ visual-studio visual-c++ mfc resources

我有一个非常古老的MFC应用程序,多年来被许多人所感动(大多数人甚至可能都不是CS人),接下来,我喜欢称之为&#34 ;无政府状态的设计模式。"

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

enter image description here

现在,问题是附加的滑块和复选框采用与对话框的滑块/复选框系列顺序排列的ID。我的任务是在系列中添加更多滑块和复选框(在Slider Control组框的空白处)不幸的是,由于IDC_SLIDER57IDC_SLIDER61已经在对话框中(复选框也是如此) ,现有代码,例如下面的代码段将会破坏:

pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);

有没有更好的方法来修改资源文件而不手动执行?我已经看到了一个名为ResOrg的第三方工具,看起来它可以帮我做我想要的,但软件有点贵,特别是因为我只使用它一次。我想我可以试试这个演示,但限制可能会限制我。

仅供参考,我使用的是Visual C ++ 6.0(是的......我知道,不要笑,它会被强加给我)。

1 个答案:

答案 0 :(得分:7)

而不是写作:

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];    
}

使用此方法,IDC_SLIDERn符号不需要具有连续值。