今天应该算是我到公司第一次真的编程吧!我看了一些视频作为参考,基本也做到了将CComBoBox的对象添加到状态栏的新加的区域上去并显示,可是当我向CComBoBox的对象中插入了数据之后发现数据竟然无法显示,但在创建的时候如果设定一个固定的CRect的矩形区域的时候却可以显示插入的值?
后来才知道原来是因为动态获取的CRect的矩形区域的高度不够,此时动态获取的矩形区域用来存放CComBoBox的控件的时候,矩形区域的高度就是控件的总体(包括下拉部分)高度,故此时数据根本无法显示,就会觉得没有显示数据(实际上有数据显示不过我们没有看到而已)。
void CMainFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CFrameWnd::OnPaint()
CRect rect;
// CRect rect1(881,2,959,72);
m_wndStatusBar.GetItemRect(2,&rect);
rect.top=0;
rect.bottom += 75; *********//给combobox高度适当增加
rect.right+=20;
if (!m_comBoBox.m_hWnd){
m_comBoBox.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,
rect, &m_wndStatusBar, 1);
m_comBoBox.SetItemHeight(-1,15);
InsertToCom(5);
m_comBoBox.SetCurSel(0);//Selects a string in the list box of a combo box.设置combobox的初始默认值
/*获取当前选择项的值;
int selIndex=m_comBoBox.GetCurSel();
CString selValue;
m_comBoBox.GetLBText(selIndex,selValue);
MessageBox(selValue);
*/
}
else
{
m_comBoBox.MoveWindow(rect);
}
CFrameWnd::OnPaint();
}
void CMainFrame::InsertToCom(int p){
CString m_comStr;
for (int i=0;i<p;++i)
{
m_comStr.Format("num:%d",i);
m_comBoBox.InsertString(0,m_comStr);
}
}
如果想动态获取的矩形区域可以将CComBoBox的对象及插入的值都显示出来,则可以将矩形区域的bottom值增加适当。