访问 MFC 中的多个编辑框
Accessing multiple Editboxes in MFC
>我正在编写一个MFC程序,其中我有很多编辑框,我想获取它们的所有文本值并将它们放在容器中。如何在不为每个 ID 写一行的情况下实现这一点。我为每个 ID 使用以下代码:
CEdit *edit;
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1));
但是如果我使用这种方法,我将不得不写 45 次。这似乎不对。有没有办法将所有编辑框都放在一个容器中,以便我可以以这种方式或类似方式使用它们?
您当然可以创建一个数组(或其他容器)或指向 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 个很可能有点多。如果它们类似于网格,则可能需要查看许多可用的网格控件之一。
您不必使用控件 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);
枚举子过程:
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;
}
相关文章:
- C++MFC编辑框处理双击
- MFC:在编辑框中表示邻接矩阵
- MFC正在从线程将文本附加到富编辑框
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 如何处理 MFC 中编辑框的'Left mouse Clicked'事件
- 视觉对象 在 MFC C++ 上编辑中设置最大行数
- MFC编辑控制消息处理访问文档对象
- MFC滑块+编辑+微调器模式
- MFC Rich编辑控件2.0文本颜色
- c++ MFC 将编辑控件中的字符串转换为十六进制
- C MFC创建编辑控件可以拥有的最大数字
- mfc c++通过编辑控件设置另一个应用程序的HWND地址
- MFC C++ 从编辑控件更新文本文件
- 我自己的C++框架(类似MFC),我可以创建子窗口,但不能在WM_create时创建编辑框
- MFC C++正在从WM_KEYDOWN处理程序获取在OnDraw()中编辑的CDC pDC的句柄
- MFC C++VS 2010:编辑框只接受字母、退格和空格
- MFC - 编辑文件打开操作
- 更改编辑 mfc 控件文本
- CString 以在 MFC 中编辑控件
- 如何将 printf 的功能获取到 MFC 中的编辑控件