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 组合框添加字符串的主要内容,如果未能解决你的问题,请参考以下文章