自动重新排序 MFC 控件 ID
Reordering MFC control IDs automatically
我有一个非常古老的 MFC 应用程序,这些年来很多人都接触过它(他们中的大多数人可能甚至连 CS 人员都没有接触过),然后是我喜欢称之为 "anarchy design pattern."
无论如何,其中一个对话框有一系列 56 个垂直滑块和复选框。但是,对话框中还有其他滑块和复选框,如下所示。
现在,问题是额外的滑块和复选框采用的 ID 与对话框的 slider/checkbox 系列顺序一致。我的任务是向系列添加更多滑块和复选框(在滑块控件组框中的空白 space 中)不幸的是,由于 IDC_SLIDER57
到 IDC_SLIDER61
已经在对话框中(同样如此对于复选框),现有代码(例如下面的代码段)将中断:
pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
有没有更好的不用手动修改资源文件的方法?我见过一个名为 ResOrg 的第三方工具,它看起来可以帮助完成我想做的事情,但该软件有点贵,尤其是因为我只会使用它一次。我想我可以试一试演示,但限制可能会限制我。
仅供参考,我使用的是 Visual C++ 6.0(是的...我知道,别笑,这是被强加给我的)。
而不是写作:
pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
你可以这样写:
pVSlider = (CSliderCtrl *)GetDlgItem(GetSliderID(i));
其中 GetSlider
是 returns 第 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
符号不需要有顺序值。
我有一个非常古老的 MFC 应用程序,这些年来很多人都接触过它(他们中的大多数人可能甚至连 CS 人员都没有接触过),然后是我喜欢称之为 "anarchy design pattern."
无论如何,其中一个对话框有一系列 56 个垂直滑块和复选框。但是,对话框中还有其他滑块和复选框,如下所示。
现在,问题是额外的滑块和复选框采用的 ID 与对话框的 slider/checkbox 系列顺序一致。我的任务是向系列添加更多滑块和复选框(在滑块控件组框中的空白 space 中)不幸的是,由于 IDC_SLIDER57
到 IDC_SLIDER61
已经在对话框中(同样如此对于复选框),现有代码(例如下面的代码段)将中断:
pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
有没有更好的不用手动修改资源文件的方法?我见过一个名为 ResOrg 的第三方工具,它看起来可以帮助完成我想做的事情,但该软件有点贵,尤其是因为我只会使用它一次。我想我可以试一试演示,但限制可能会限制我。
仅供参考,我使用的是 Visual C++ 6.0(是的...我知道,别笑,这是被强加给我的)。
而不是写作:
pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
你可以这样写:
pVSlider = (CSliderCtrl *)GetDlgItem(GetSliderID(i));
其中 GetSlider
是 returns 第 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
符号不需要有顺序值。