主题:datagrid与combobox
cjqzdm
[专家分:0] 发布于 2007-12-28 18:20:00
请问如何实现如下功能:
首先在对话框上有一个datagrid控件,现在我想在鼠标点击datagrid中的单元格时就在点击的单元格上显示一个combobox控件,请问如何实现?是在vc中哦。
回复列表 (共4个回复)
沙发
华山论剑 [专家分:5310] 发布于 2007-12-29 16:27:00
在WM_LBUTTONUP消息中处理,让一个combobox移动到鼠标位置(还要加些调整,以便对齐DataGrid的格子)
板凳
cjqzdm [专家分:0] 发布于 2007-12-29 17:31:00
有没有相应的例子,能不能发到我的邮箱cjqzdm@163.com?谢谢了
3 楼
liyu355 [专家分:980] 发布于 2007-12-31 17:45:00
DataGrid做起来太麻烦
当你鼠标点击的时候他的行和列的值是不一定对的...
用LISTCTRL个人感觉要好做些...
其实说起来并不难
首先得到你点的DATAGRID的位置,然后得到每一个DATAGRID的RECT,然后通过计算得到你点的位置在那个RECT里面
然后创建一个combobox并设置他的长宽和位置,让他恰好出现在你需要他出现的位置.
然后再向里面添加STRING的数据.
最后选择....
4 楼
cjqzdm [专家分:0] 发布于 2008-01-04 11:33:00
但是我得到的位置总是不对,不知道为什么。以下是代码:
float Collength=0,Rowlength=0;
CPoint Movepoint,DateGridpoint,Dlgpoint;
CClientDC dc(&m_dgPrice);
long nCol=m_dgPrice.GetCol();
long nRow=m_dgPrice.GetRow();
GetCursorPos(&Movepoint);
//DateGridpoint=dc.GetWindowOrg();
//Dlgpoint=dc1.GetWindowOrg();
//ClientToScreen(&DateGridpoint);
//ClientToScreen(&Dlgpoint);
//ClientToScreen(&Movepoint);
CColumns columns=m_dgPrice.GetColumns();
VARIANT index;
index.vt=VT_I4;
index.lVal=nCol;
CColumn column=columns.GetItem(index);
float aa=column.GetWidth()/1000;
//CDC* pDC =GetDC();
//int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ;
//int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ;
//计算选中格的左上角的坐标(象素为单位)
for(int i=0;i<nCol;i++) //计算列数
{
Collength+=aa;
}
for(int ii=0;ii<nRow;ii++) //计算行数
{
Rowlength+=m_dgPrice.GetRowHeight()/1000;
}
//float nRowlength=m_dgPrice.GetRowHeight();
Ccombox.DestroyWindow();
DateGridpoint.x=Collength;
DateGridpoint.y=Rowlength;
Movepoint.x=Collength+aa+25;
Movepoint.y= Rowlength+100;
CRect rect(DateGridpoint,Movepoint);
Ccombox.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,rect,&m_dgPrice,IDC_COMBO1);
我来回复