繁体   English   中英

mfc acombo box添加字符串

[英]mfc acombo box add string

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\\\\Serial",%i)类的东西来改变TEXT("\\\\Device\\\\Serial3") TEXT("\\\\Device\\\\Serial",%i) ,所以我可以将所有代码行恢复for循环这是一种实现这个目标的方法吗?

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

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

for (int i =0 ; i<10; i++)
{
    CString szPath;
    szPath.Format(TEXT("\\Device\\Serial%d"),i);
    // ...
}

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

ASSERT(GetSafeHwnd()!=NULL);

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

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

请参阅@ TheSteve的字符串问题答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM