【问题标题】:mfc acombo box add stringmfc 组合框添加字符串
【发布时间】: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! 错误,当然,组合框没有填充该注册表值。为什么会这样?

【问题讨论】:

    标签: windows mfc combobox registry serial-port


    【解决方案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 对字符串问题的回答。

      【讨论】:

      • 我不相信他说过任何关于对话的事情。
      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2011-12-07
      相关资源
      最近更新 更多