回 帖 发 新 帖 刷新版面

主题:datagrid与combobox

请问如何实现如下功能:
首先在对话框上有一个datagrid控件,现在我想在鼠标点击datagrid中的单元格时就在点击的单元格上显示一个combobox控件,请问如何实现?是在vc中哦。

回复列表 (共4个回复)

沙发

在WM_LBUTTONUP消息中处理,让一个combobox移动到鼠标位置(还要加些调整,以便对齐DataGrid的格子)

板凳

有没有相应的例子,能不能发到我的邮箱cjqzdm@163.com?谢谢了

3 楼

DataGrid做起来太麻烦
当你鼠标点击的时候他的行和列的值是不一定对的...
用LISTCTRL个人感觉要好做些...
其实说起来并不难
首先得到你点的DATAGRID的位置,然后得到每一个DATAGRID的RECT,然后通过计算得到你点的位置在那个RECT里面
然后创建一个combobox并设置他的长宽和位置,让他恰好出现在你需要他出现的位置.
然后再向里面添加STRING的数据.
最后选择....

4 楼

但是我得到的位置总是不对,不知道为什么。以下是代码:
    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);       

我来回复

您尚未登录,请登录后再回复。点此登录或注册