动态创建好控件cbutton,我想在改变clistCtrl列宽的时候也动态改变cbtton的大小,代码是这样的:
oid CeditDlg::OnHdnItemchangingList1(NMHDR *pNMHDR, LRESULT *pResult)
{
.....
new_Rt.right = new_Rt.left + m_List.GetColumnWidth(0);
m_pEdit->MoveWindow(new_Rt,true);
tmpCt = new_Rt;
tmpCt.left = (tmpCt.right)*70/100; 
pAddBtn->MoveWindow(tmpCt,true);
pAddBtn->SetRedraw(true);}
其中new_Rt是以获得单元格大小,我想让cbtton显示30%的比例在变化列宽的时候,谁给支招~~

解决方案 »

  1.   

    tmpCt.left = tmpCt.right - tmpCt.Width() * .3;
      

  2.   

    我写这个是没错的
    tmpCt.left = (tmpCt.right)*70/100; 
    左边的宽度 是右边的70%,那麽剩下的30%就是tmpCt所占用的空间,不好意思,刚才忘记说问题了,问题是,在执行这个OnHdnItemchangingList1函数的时候,按钮就不见了~,是被掩盖了,还是消失了?
    假如我要改成
    pAddBtn->MoveWindow(CRect(20,0,40,40),true);
    pAddBtn->SetRedraw(true);
    则完全可以显示,动态改变空间位置就不行吗?
      

  3.   

    CRect::DeflateRectvoid DeflateRect( int x, int y );
    void DeflateRect( SIZE size );
    void DeflateRect( LPCRECT lpRect );
    void DeflateRect( int l, int t, int r, int b );参数: x 指定缩小CRect的左和右边的单位数。  
    y 指定缩小CRect的上、下边的单位数。  
    size 一个指定缩小CRect的单位数的SIZE或CSize。cx值指定缩小左、右边的单位数,cy指定缩小上、下边的单位数。  
    lpRect 指向一个RECT结构或CRect,指定缩小每一边的单位数。  
    l 指定缩小CRect左边的单位数。  
    t 指定缩小CRect上边的单位数。  
    r 指定缩小CRect右边的单位数。  
    b 指定缩小CRect下边的单位数。  说明:
    DeflateRect通过将CRect的边向其中心移动来缩小它。为了做到这一点,DeflateRect将单位数增加到矩形的左边和上边,从右边和下边减去单位数。DeflateRect的参数是有符号的值;正值缩小CRect,而负值则放大它。
    前两个重载函数使CRect相对的两对边都缩小,因此CRect的总宽度减小了两倍x(或cx),总高度减小了两倍y(或cy)。其它两个重载函数使CRect的边相对独立的缩小。
      

  4.   


    哦,对头,你的是没错。可能是显示覆盖的问题,把“pAddBtn->SetRedraw(true); ”换成“pAddBtn->Invalidate()”。
      

  5.   

    首先跟踪tmpCt.left = (tmpCt.right)*70/100;看数据是否是想要的值CRect( int l, int t, int r, int b );
    都是int型的
    执行tmpCt.left = (tmpCt.right)*70/100; 时
    可能会出现数据丢失
      

  6.   

    搞定! tmpCt.left = (new_Rt.right-new_Rt.left)*70/100; 
    tmpCt.top = 0;
    tmpCt.right = new_Rt.right -new_Rt.left;
    tmpCt.bottom = 21; pAddBtn->MoveWindow(tmpCt,true);//当时用pAddBtn->MoveWindow(tmpCt,true);不行是因为tmpCt是相对于m_list,而这里的button位置则是相对于cedit的
    pAddBtn->SetRedraw(true);
    }马上结贴