【问题标题】:Accessing multiple Editboxes in MFC在 MFC 中访问多个编辑框
【发布时间】:2012-05-15 19:42:51
【问题描述】:

我正在编写一个 MFC 程序,其中有很多编辑框,我想获取它们的所有文本值并将它们放入容器中。如何在不为每个 ID 写一行的情况下实现这一点。我为每个 ID 使用此代码:
CEdit *edit;
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1));
但如果我使用这种方法,我将不得不写 45 次。这似乎不对。 有没有办法在一个容器中获取所有编辑框,以便我可以以这种方式或类似的方式使用它们?

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    您当然可以创建一个数组(或其他容器)或指向 CEdit 的指针:CEdit edits[45]; 如果 IDC_NAME1IDC_NAME45 的值是连续的,您可以执行以下操作:

    for (int i=0; i<45; i++)
       names[i] = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1 + i));
    

    如果这些标识符可能不连续,那么您可以将它们放入一个数组中,并根据需要对该数组进行索引。

    一个警告:除非它们是类似网格的东西,否则几乎相同的编辑控件,屏幕上的 45 个可能有点多。如果它们像一个网格,您可能需要查看许多可用的网格控件之一。

    【讨论】:

    • @IliyanLaskov IDC_NAME1+1 != IDC_NAME2 作为 ID,当然,但是如果 IDC_NAME1 是 200 而 IDC_NAME2 是 201,那就是真的。您必须确保 ID 是连续的且顺序正确。检查你的 resource.h 文件
    • 现在我明白 IDC_NAME1+1 是什么意思了。非常感谢
    【解决方案2】:

    您不必使用控件 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多