MFC combox控件文本太长 如何换行显示

qdljgenius 2016-05-17 05:32:47
combox通过addstring("")添加内容,问题是,添加的各个选项的内容文字都很多,而在资源里的combox的长度不能再长了,如何让下拉的选项里的内容换行?

有什么方法可以实现?谢谢 必须自汇么?谁有源码给看下
...全文
813 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qdljgenius 2016-05-25
  • 打赏
  • 举报
回复
已解决 多谢大家
schlafenhamster 2016-05-24
  • 打赏
  • 举报
回复
windows 使用 “回车 \r (0x0D return; 换行\n 0x0A newline”.
qdljgenius 2016-05-24
  • 打赏
  • 举报
回复
引用 16 楼 schlafenhamster 的回复:
"CComboBox的自绘"代码如下:


void CMulitLineComBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)  
{  
    if(lpDrawItemStruct->CtlType==ODT_COMBOBOX)  
    {  
        CDC dc;  
        dc.Attach(lpDrawItemStruct->hDC);  
        CRect rcClient = lpDrawItemStruct->rcItem;  
        UINT state = lpDrawItemStruct->itemState;  
        CBrush br;  
        if(state&ODS_SELECTED)  
        {  
            br.CreateSolidBrush(RGB(51,153,255));  
        }  
        else  
        {  
            br.CreateSolidBrush(RGB(255,255,128));
        }  
        dc.FillRect(&rcClient,&br);  
        dc.SetBkMode(TRANSPARENT);  
        dc.SetTextColor(RGB(255,0,255));  
        //如果不是空项  
        if(lpDrawItemStruct->itemID!=(UINT)-1)  
        {  
            UINT id = lpDrawItemStruct->itemID;  
            CString strText;  
            GetLBText(id,strText);  
            rcClient.DeflateRect(1,1);  
			dc.DrawText(strText, strText.GetLength(),&lpDrawItemStruct->rcItem, DT_WORDBREAK);  
        }  
        dc.Detach();  
    }  
}  
  
void CMulitLineComBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)  
{  
    if( (lpMeasureItemStruct->CtlType==ODT_COMBOBOX)&&  
        (lpMeasureItemStruct->itemID!=(UINT)-1))  
    {  
        CString strText;  
        GetLBText(lpMeasureItemStruct->itemID,strText);
		CRect rect(0,0,100,100);
	    CDC* pDC = GetDC();   
		lpMeasureItemStruct->itemHeight = pDC->DrawText(strText, -1, rect, DT_WORDBREAK | DT_CALCRECT);   
        ReleaseDC(pDC);  
    }  
}  
不过 选择到 edit 后 多行怎么办?
换行这个我不会写。。。 那个用tooltip显示额外文本的代码你有吗 怎么给每个下拉项用tooltip添加文本?
schlafenhamster 2016-05-24
  • 打赏
  • 举报
回复
"CComboBox的自绘"代码如下:


void CMulitLineComBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)  
{  
    if(lpDrawItemStruct->CtlType==ODT_COMBOBOX)  
    {  
        CDC dc;  
        dc.Attach(lpDrawItemStruct->hDC);  
        CRect rcClient = lpDrawItemStruct->rcItem;  
        UINT state = lpDrawItemStruct->itemState;  
        CBrush br;  
        if(state&ODS_SELECTED)  
        {  
            br.CreateSolidBrush(RGB(51,153,255));  
        }  
        else  
        {  
            br.CreateSolidBrush(RGB(255,255,128));
        }  
        dc.FillRect(&rcClient,&br);  
        dc.SetBkMode(TRANSPARENT);  
        dc.SetTextColor(RGB(255,0,255));  
        //如果不是空项  
        if(lpDrawItemStruct->itemID!=(UINT)-1)  
        {  
            UINT id = lpDrawItemStruct->itemID;  
            CString strText;  
            GetLBText(id,strText);  
            rcClient.DeflateRect(1,1);  
			dc.DrawText(strText, strText.GetLength(),&lpDrawItemStruct->rcItem, DT_WORDBREAK);  
        }  
        dc.Detach();  
    }  
}  
  
void CMulitLineComBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)  
{  
    if( (lpMeasureItemStruct->CtlType==ODT_COMBOBOX)&&  
        (lpMeasureItemStruct->itemID!=(UINT)-1))  
    {  
        CString strText;  
        GetLBText(lpMeasureItemStruct->itemID,strText);
		CRect rect(0,0,100,100);
	    CDC* pDC = GetDC();   
		lpMeasureItemStruct->itemHeight = pDC->DrawText(strText, -1, rect, DT_WORDBREAK | DT_CALCRECT);   
        ReleaseDC(pDC);  
    }  
}  
不过 选择到 edit 后 多行怎么办?
qdljgenius 2016-05-24
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
有一种叫 “TitleTip”(请搜索) 方法 可以 用 Tip 展开 combo 中的 内容
你说的是Xtreme ToolkitPro吗 我找了 没有COMBO Box的啊
qdljgenius 2016-05-24
  • 打赏
  • 举报
回复
引用 12 楼 schlafenhamster 的回复:
1.http://blog.csdn.net/visualeleven/article/details/6072404 里 ‘'\' 写反了(/r/n); 应该是 strText = _T("Hello, World!\r\nHello, World!"); 2. 有了这个 CMulitLineListBox 就 可以 把 combo 里 Listbox 替换 为 CMulitLineListBox
这个帖子是CListBox的自绘 我需要CComboBox的自绘 把CListBox改为CComboBox的话,MeasureItem函数中的GetItemRect报错,不支持这个函数
schlafenhamster 2016-05-23
  • 打赏
  • 举报
回复
有一种叫 “TitleTip”(请搜索) 方法 可以 用 Tip 展开 combo 中的 内容
qdljgenius 2016-05-23
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
在 资源中 加 数据 220 也没问题 “qaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqasxcasdccccccccccccccccccccccccccccccccccccccccccasdawssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxssssssssssssssssssszzzzzzzzzzzzzzaaaasdc” 这样也行 214 个 m_ComboTest.AddString("qaqaqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewwwwwwwwwwwwwwwwwwwwcccccccccccccccwrtgerrgefrvgerfgezzzzzzzzzzzzzzzzqaqaqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewrtgerrgefrvgerfgezzzzzzzzzzzzzzzzxxxx"); m_ComboTest.AddString("qaqaqaqaqaqaqaqaqaqaqyhertherthyrtujrnjyhjjerthqaqadddddddddddddddqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewrtgerrgefrvgerfgezzzzzzzzzzzzzzzzgerthertheyhnyjnuyecevrghzzzzzddddddddddddddddddddzzzzzzzzzzz");
200多个是没问题,我的问题是框体长度只能留100个字符的长度,太长了都显示到外面了 需要重载,让里面字符换行显示
schlafenhamster 2016-05-23
  • 打赏
  • 举报
回复
另外即使 Combo 的 list 可以 多行, 那么 combo 的 edit 怎么 多行 ?
schlafenhamster 2016-05-23
  • 打赏
  • 举报
回复
1.http://blog.csdn.net/visualeleven/article/details/6072404 里 ‘'\' 写反了(/r/n); 应该是 strText = _T("Hello, World!\r\nHello, World!"); 2. 有了这个 CMulitLineListBox 就 可以 把 combo 里 Listbox 替换 为 CMulitLineListBox
schlafenhamster 2016-05-20
  • 打赏
  • 举报
回复
在 资源中 加 数据 220 也没问题 “qaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqasxcasdccccccccccccccccccccccccccccccccccccccccccasdawssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxssssssssssssssssssszzzzzzzzzzzzzzaaaasdc” 这样也行 214 个 m_ComboTest.AddString("qaqaqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewwwwwwwwwwwwwwwwwwwwcccccccccccccccwrtgerrgefrvgerfgezzzzzzzzzzzzzzzzqaqaqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewrtgerrgefrvgerfgezzzzzzzzzzzzzzzzxxxx"); m_ComboTest.AddString("qaqaqaqaqaqaqaqaqaqaqyhertherthyrtujrnjyhjjerthqaqadddddddddddddddqaqaqaqaqaqaqaqaqewdfereterthgerthefgefertherewrtgerrgefrvgerfgezzzzzzzzzzzzzzzzgerthertheyhnyjnuyecevrghzzzzzddddddddddddddddddddzzzzzzzzzzz");
schlafenhamster 2016-05-20
  • 打赏
  • 举报
回复
“而在资源里的combox的长度不能再长了” 200 不算长吧
qdljgenius 2016-05-20
  • 打赏
  • 举报
回复
[quote=引用 6 楼 schlafenhamster 的回复:] "文字都很多" 多到什么程度 ?[/quote 200多字符
toma2008 2016-05-19
  • 打赏
  • 举报
回复
不是可以用自绘实现吗,我也在找这和方法
schlafenhamster 2016-05-19
  • 打赏
  • 举报
回复
"文字都很多" 多到什么程度 ?
qdljgenius 2016-05-19
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
http://blog.csdn.net/visualeleven/article/details/6072404
你好,这个是LISTBOX的 能给个Combox的吗
qdljgenius 2016-05-19
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
http://blog.csdn.net/visualeleven/article/details/6072404
你好 ,我试了下 程序运行到下面的地方时会报错,程序崩溃,为什么呢 CMulitLineListBox m_listBox; // 成员变量 #define IDC_LISTBOX 0x11 CRect rc; GetClientRect(&rc); rc.bottom -= 35; rc.DeflateRect(CSize(10, 10)); m_listBox.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS, rc, this, IDC_LISTBOX);
Eleven 2016-05-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/visualeleven/article/details/6072404
qdljgenius 2016-05-17
  • 打赏
  • 举报
回复
开发环境是VS2010

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧