小弟刚开始学习C++不久,现有一个问题,想请大家帮帮我,谢谢你们了!
有个对话框,其中有一个LIST CONTROL,是REPORT风格的,我想在里面的SUBITEM上加COMBO控件,就是说鼠标点击任何一个SUBITEM单元格,就会跳出COMBO控件,让用户选择。选择好以后,就把选择的选项文本放到SUBITEM里面,然后CONBO控件消失,如果继续单击其他SUBITEM也一样。我查了一些资料,基本思想就是先定义一个COMBO控件,然后获取鼠标点击区域,判断是哪个SUBITEM,然后获取矩形,然后将这个COMBO控件放到改矩形上,以下是我的部分代码:
void CReservationPage::OnNMClickListbreakfastsituation(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int item=m_breakfastsituationctrl.GetHotItem();
POINT pt;
::GetCursorPos(&pt);
CRect rect;
m_breakfastsituationctrl.GetWindowRect(&rect);
pt.x-=rect.left;
for(int i=0,width=0;pt.x>width;i++)
width+=m_breakfastsituationctrl.GetColumnWidth(i);
int subitem=i-1;
m_breakfastsituationctrl.GetSubItemRect(item,subitem,LVIR_BOUNDS,rect);
CRect listrect,parentwindowrect;
m_breakfastsituationctrl.GetWindowRect(listrect);
GetWindowRect(parentwindowrect);
UINT x=listrect.left-parentwindowrect.left;
UINT y=listrect.top-parentwindowrect.top;
rect.left+=x;
rect.right+=x;
rect.top+=y;
rect.bottom+=y;
bfcount.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,rect,this,1);
bfcount.AddString("1");
bfcount.AddString("2");
bfcount.AddString("3");
bfcount.AddString("4");
bfcount.AddString("5");
bfcount.AddString("6");
bfcount.AddString("7");
bfcount.AddString("8");
bfcount.AddString("9");
bfcount.AddString("NULL");
bfcount.SetCurSel(0);
bfcount.GetFocus(); *pResult = 0;
}编译后,虽然点击LIST CONTROL能显示出COMBO BOX,但是大小不和SUBITEM一样,高度比SUBITEM的高度要高,为什么?另外,我不知道我的办法对不对,能不能介绍一下更好的办法?