steffi123 Ответов: 1

Отображение форматированного текста при выборе элемента в выпадающем списке


Ноль вниз голосовать
любимый


У меня есть combobox, в котором я хочу отобразить другую строку при выборе элемента в Combo.

Мое поле со списком - это выпадающий список.

Например: у меня есть следующее В моем combobox.

Алекс-Менеджер

Rain-Руководитель Проекта

Шини-Инженер

Мира-Старший Инженер

При выборе элемента в combobox я хочу использовать только имя, то есть Alex.

Я могу выполнить свое требование OnComboSelChange () и событие клавиш со стрелками, но при нажатии клавиши enter после использования клавиш со стрелками в поле со списком он не показывает форматированный текст в поле со списком.

Что я уже пробовал:

struct details{
CString name;
CString des;
};

BOOL CComboTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

details d1;
d1.name = _T("alex");
d1.des =_T("manager");
m_vec.push_back(d1);

details d2;
d2.name = _T("Rain");
d2.des =_T("Engineer");
m_vec.push_back(d2);

// TODO: Add extra initialization here
for(int i=0;i<m_vec.size();i++)
{
m_ctrlCombo.AddString(m_vec[i].name+m_vec[i].des);
m_ctrlCombo.SetItemData(i,(DWORD_PTR)&m_vec[i]);
}
m_ctrlCombo.SelectString(-1,m_vec[0].name);
m_ctrlCombo.SetWindowText(m_vec[0].name);

return TRUE;  // return TRUE  unless you set the focus to a control
}

void CComboTestDlg::OnCbnSelchangeCombo1()
{
int nItem = m_ctrlCombo.GetCurSel();
details* det = (details*)m_ctrlCombo.GetItemData(nItem);
PostMessage(SETCOMBOTEXT,IDC_COMBO1,(LPARAM)(LPCTSTR)det->name);
}

BOOL CComboTestDlg::PreTranslateMessage(MSG* pMsg) 
{
MSG msg1=*pMsg;//I am loosing the value after  checking ..so storing temp.
MSG msg;
CopyMemory(&msg, pMsg, sizeof(MSG));
HWND hWndParent = ::GetParent(msg.hwnd);
while (hWndParent && hWndParent != this->m_hWnd)
{
msg.hwnd = hWndParent;
hWndParent = ::GetParent(hWndParent);
}
if (pMsg->message==SETCOMBOTEXT && (pMsg->wParam == IDC_COMBO1))
SetDlgItemText(IDC_COMBO1, (LPCTSTR)pMsg->lParam);
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_RETURN && msg.hwnd ==m_ctrlCombo.m_hWnd )
{
OnCbnSelchangeCombo1();
}
} 
return CDialog::PreTranslateMessage(pMsg);
}

1 Ответов