mfc 组合框添加字符串

Posted

技术标签:

【中文标题】mfc 组合框添加字符串【英文标题】:mfc acombo box add string 【发布时间】:2012-09-03 17:45:59 【问题描述】:
HKEY hKey = 0;
DWORD dwType = REG_SZ;
TCHAR buf[255] = 0;
DWORD dwBufSize = sizeof(buf);
DWORD ret;
CComboBox m_portCombo;

if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS )

    if( RegQueryValueEx( hKey, TEXT("\\Device\\Serial0"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    
        CString str = buf;
        m_portCombo.AddString(str);
    

    if( RegQueryValueEx( hKey, TEXT("\\Device\\Serial1"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    
        CString str = buf;
    

    if( RegQueryValueEx( hKey, TEXT("\\Device\\Serial2"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    
        CString str = buf;
    

    if( RegQueryValueEx( hKey, TEXT("\\Device\\Serial3"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    
        CString str = buf;
    

第一个问题:我想将TEXT("\\Device\\Serial3") 更改为TEXT("\\Device\\Serial",%i) 之类的东西,这样我就可以将所有代码行恢复到for 循环。这是一种完成的方法这个?

第二个问题:如果我使用m_portCombo.AddString(str);,我会收到Debug Assertion Failed! 错误,当然,组合框没有填充该注册表值。为什么会这样?

【问题讨论】:

【参考方案1】:

第一个问题:使用 CString Format() 函数,将 %d 用于整数。

for (int i =0 ; i<10; i++)

    CString szPath;
    szPath.Format(TEXT("\\Device\\Serial%d"),i);
    // ...

第二个问题: 失败的原因可能有很多。最有可能的是尚未创建组合框。(它需要一个窗口句柄才能添加字符串)要找出调试断言的原因,请单击“调试断言失败”窗口上的“重试”按钮,然后应该跳转到导致断言的代码。例如,它可能是这样的:

ASSERT(GetSafeHwnd()!=NULL);

【讨论】:

【参考方案2】:

在调用第一个 DoDataExchange 之前,您的组合框类不会被“子类化”(并且在此之前使用它的任何尝试都会断言)。要么等到基类运行 OnInitDialog,要么执行以下操作:

CComboBox * pcombo = static_cast<CComboBox*>(GetDlgItem( IDC_MYCOMBO ));
pcombo->AddString( szPath );

查看@TheSteve 对字符串问题的回答。

【讨论】:

我不相信他说过任何关于对话的事情。

以上是关于mfc 组合框添加字符串的主要内容,如果未能解决你的问题,请参考以下文章

将字符串添加到 MFC 组合框

MFC中怎样实现组合框显示下拉列表啊?

MFC 组合框不可编辑

列表控件中的 MFC 对话框组合框

组合框不显示数据项

向 CMFCToolbar 添加复选组合框