我正在写一个MFC程序,其中有很多Editboxes,我希望获取所有文本值并将它们放入容器中。如何在不为每个ID写入一行的情况下实现这一目标。我为每个ID使用此代码:
CEdit *edit;
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1));
但是,如果我使用该方法,则必须将其写入45次。这看起来不正确。 有没有办法让所有的Editboxes在一个容器中,所以我可以用它们这样的方式或类似的东西?访问MFC中的多个Editboxes
0
A
回答
1
你也可以创建一个数组(或其他容器)或指针的CEdit:CEdit edits[45];
如果IDC_NAME1
通过IDC_NAME45
值是连续的,你可以这样做:
for (int i=0; i<45; i++)
names[i] = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1 + i));
如果这些标识符可能不是连续的,那么你可以把它们放在一个数组中,并根据需要索引到该数组中。
一个警告:除非它们像一个网格,否则几乎相同的编辑控件,屏幕上的45可能会有点多。如果它们像网格一样,则可能需要查看许多可用的网格控件之一。
0
您不必使用控件ID。 使用EnumChildWindows并获取仅用于编辑控件的测试。片段如下。
添加在对话框的标题如下:
afx_msg LRESULT OnFoundEdit(WPARAM wParam, LPARAM lParam);
而这款以CPP:
#define WM_U_FOUND_EDIT WM_APP + 0x100
BEGIN_MESSAGE_MAP(CEditCtrlFishingDlg, CDialog)
ON_MESSAGE(WM_U_FOUND_EDIT, OnFoundEdit)
.
.
.
.
END_MESSAGE_MAP()
写这条线,你要开始编辑文本集合地点:
EnumChildWindows(m_hWnd, EnumChildProc, (LPARAM)m_hWnd);
Enum child proc edure:
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
CString csBuffer;
LPTSTR pBuf = csBuffer.GetBufferSetLength(MAX_PATH);
GetClassName(hwnd, pBuf, MAX_PATH);
csBuffer.ReleaseBuffer();
if(!csBuffer.CompareNoCase(_T("edit")))
{
SendMessage((HWND)lParam, WM_U_FOUND_EDIT, 0, (LPARAM)hwnd);
}
return TRUE;
}
和处理程序:
LRESULT YourDlg::OnFoundEdit(WPARAM wParam, LPARAM lParam)
{
CWnd *pWnd = FromHandle((HWND)lParam);
CString csTxt;
pWnd->GetWindowText(csTxt);
// do what you need with text here
return 0;
}
相关问题
- 1. C++ MFC访问多个文件
- 2. 如何访问MFC中的ActiveX控件?
- 3. MFC SDI访问从DOC
- 4. 如何从另一个类访问MFC中的对话框项?
- 5. Symfony2访问多个用户的多个对象的ACL访问
- 6. 访问的Win32/MFC“东西”从C#
- 7. MFC:从主机访问视图
- 8. 如何访问访问功能中的多个按钮?
- 9. 访问结果集中的多个表
- 10. 如何访问JFrame中的多个JPanel?
- 11. 访问多个文档中的数据
- 12. 访问s3中的多个存储桶
- 13. 访问位集中的多个位
- 14. 访问查询中的多个条件
- 15. 访问OpenCV Mat中的多个通道
- 16. 访问多个ItemRenderer在一个AdvancedDataGrid中
- 17. 在MFC中打开多个URL
- 18. 访问多个UIAlertViews边界的问题
- 19. 如何访问MFC中模态对话框的项目?
- 20. 访问VBA:搜索多个目录中的多个文件
- 21. 访问多个字典值
- 22. 访问多个表Mysql
- 23. 访问多个CSS属性
- 24. 访问多个QB公司
- 25. 多个工会ms访问
- 26. 访问多个文件
- 27. 多个AND访问查询
- 28. 访问DLookUp多个条件
- 29. 被多个线程访问
- 30. log4j访问多个包
所以IDC_NAME1 + 1 = IDC_NAME2? –
不起作用 –
@IliyanLaskov IDC_NAME1 + 1!= IDC_NAME2当然是ID,但是如果IDC_NAME1是200,IDC_NAME2是201,那是对的。你必须确保这些ID是连续的并且按照正确的顺序。检查您的resource.h文件 – MikMik