是否有在MFC对话框中定义的控件列表或控件容器
Is there a list of controls or controls container defined in an MFC dialog
我在问mfc对话框中的列表或控件容器?我不是指列出对话框的子窗口,像这样的问题循环通过MFC子对话框,MDIFrames等,我想要的是一个列表的控件定义为变量在对话框类的那些DDX_Control方法应用于他们。
我需要在对话框中定义的所有控制变量的列表
没有这种事。控件由DDX使用是因为相应的DDX_*函数在对话框类的DoDataExchange方法中被调用。没有可以解析的表,因此无法动态确定在DoDataExchange方法中调用的是哪个DDX_*函数。
void CMySampleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CReprendBudgetDlg)
DDX_Text(pDX, IDC_EDIT1, m_name1);
DDX_Text(pDX, IDC_EDIT2, m_name2);
//}}AFX_DATA_MAP
}
但是您可以用您自己的一些函数"覆盖"DDX_*函数,这些函数将控件id放在一个数组中。因此,一旦dodataexchange函数被执行,该数组将包含DDX使用的所有控件id。
void AFXAPI MY_DDX_Text(CDataExchange* pDX, int nIDC, CString& value, CWordArray & ddxcontrols)
{
DDX_Text(pDX, nIDC, value);
if (!pDX->bSaveAndValidate)
ddxcontrols.Add(nIDC) ;
}
#define DDX_Text(a,b,c) MY_DDX_Text(a,b,c) // now we can continue to use DDX_Text
// and the Class Wizard will be happy
class CMySampleDlg : public CDialog
{
...
protected:
CWordArray m_ddxcontrols ; // array that will contain all control IDs use by DDX
...
}
void CMySampleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CReprendBudgetDlg)
DDX_Text(pDX, IDC_EDIT1, m_name1, m_ddxcontrols);
DDX_Text(pDX, IDC_EDIT2, m_name2, m_ddxcontrols);
//}}AFX_DATA_MAP
}
所以你要做的就是
- 为所有DDX_*函数编写MY_DDX_*函数(它们是在afxdd_h中定义。
- 在你所有的对话框中替换所有对DDX_*函数的调用我的MY_DDX_*函数
- 把m_ddxcontrols成员放到所有的对话框中
我知道没有,但是您可以将DoDataExchange块中的控件资源id复制到具有零终止符的数组中:
const UINT myControls[] =
{
IDC_EDIT1, IDC_EDIT2, IDC_EDIT3,
IDC_BUTTON1, IDC_BUTTON2, IDC_BUTTON3,
IDC_STATIC1, IDC_STATIC2, IDC_STATIC3,
0
};
,那么你可以使用这个数组来迭代你想做的控件:
for (const UINT* p = myControls; *p; ++p)
{
CWnd *wnd = GetDlgItem(*p);
...
}
不是一个动态的解决方案,但足够简单。
相关文章:
- 双击更改 mfc 中列表控件中的行的颜色
- 如何修复列表视图中的错误?,封装控件时无法选择任何项
- 当鼠标悬停在 MFC C++ 中列表控件的列标题上时,可视显示工具提示
- 如何在调整列表视图大小时将标题宽度设置为等于其列表视图控件宽度
- 在 MFC C++中悬停列表控件的列标题的可视化显示工具提示
- 如何在列表控件中创建右键单击菜单
- 如何在列表控件中使用复选框
- C++ 具有水平滚动条的 MFC 列表控件
- 在自定义组合框下拉列表控件上等待超过5秒会导致win32 C++应用程序在Windows7中挂起
- 在 MFC 中特定行的列表控件上插入项
- 在对话框窗口中使用列表控件
- 将项目添加到列表控件时,UI被冻结
- MFC应用程序在添加列表控件元素时卡住
- 如何在双击列表中插入编辑控件中的项目
- 如何在Visual c++中从窗口中获取控件列表
- 列表控件中的MFC对话框
- 是否有在MFC对话框中定义的控件列表或控件容器
- 如何为列表视图控件更改windowproc
- 列表控件按特定列删除项
- 从列表视图控件中丢失WM_NOTIFY