在组合框中选择项目时显示格式化的文本 [英] Display formatted text on selecting item in the combobox

查看:171
本文介绍了在组合框中选择项目时显示格式化的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

0 否决投票
最爱


我有一个组合框,我想在选择组合中的项目时显示不同的字符串.

我的组合框是一个下拉组合框.

例如:我的组合框中有以下内容.

亚历克斯-经理

雨-项目负责人

Shiney-工程师

Meera-高级工程师

在选择组合框中的项目时,我只想显示名称,即Alex.

我能够实现我的要求OnComboSelChange()和Arrow Keys事件,但是在组合框中使用箭头键后按Enter键时,它不会在组合框中显示格式化的文本.

我尝试过的事情:

0 down vote
favorite


I have a combobox in that I want to display different string on selecting an item in Combo.

My combo box is a dropdown combobox.

For eg: I have following in my combobox.

Alex - Manager

Rain - Project Lead

Shiney - Engineer

Meera - Senior Engineer

OnSelecting an item in combobox I want to diaply only name i.e. Alex.

I am able to achieve my requirement OnComboSelChange() and Arrow Keys event but on pressing enter key after using arrow keys in combo box, it is not showing formatted text in combo box.

What I have tried:

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);
}

推荐答案

此链接帮助我解决了问题.
c ++-在组合框中选择项目时显示格式化的文本-堆栈溢出 [ ^ ]
This link helped me to resolve my problem.
c++ - Display formatted text on selecting item in the Combobox - Stack Overflow[^]


这篇关于在组合框中选择项目时显示格式化的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆