我正在寫一個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