文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MFC 的List Control控件实现可编辑

MFC 的List Control控件实现可编辑

时间:2010-11-05  来源:°ι 、曲 终


输入完成,点击空白处:

    在这里,响应List Control的双击事件:

    void  CAddInstanceDlg::OnNMDblclkList3(NMHDR  * pNMHDR, LRESULT  * pResult)
  {
      LPNMITEMACTIVATE pNMItemActivate  =  reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
  
       LVHITTESTINFO info;
       info.pt  =  pNMItemActivate -> ptAction;
   
        if (listControl.SubItemHitTest( & info)  !=   - 1  )
       {
         hitRow  =  info.iItem;
          hitCol  =  info.iSubItem;

           if (editItem.m_hWnd  ==  NULL) // editItem为一输入框控件, 
          {
              RECT rect;
              rect.left  =   0 ;
              rect.top  =   0 ;
              rect.bottom  =   15 ;
              rect.right  =   200 ;
              editItem .Create(WS_CHILD  |  ES_LEFT  |  WS_BORDER  |  ES_AUTOHSCROLL  |  ES_WANTRETURN  |  ES_MULTILINE, rect,  this ,  101 );
              editItem.SetFont( this -> GetFont(), FALSE);
          }
          CRect rect;
          listControl.GetSubItemRect(info.iItem, info.iSubItem, LVIR_BOUNDS, rect);
          rect.top  +=   12 ;
          rect.left  +=   13 ;
          rect.right  +=   13 ;
          rect.bottom  +=   12 ;
  
          editItem.SetWindowText(listControl.GetItemText( info .iItem,  info .iSubItem));
          editItem.MoveWindow( & rect, TRUE);
          editItem.ShowWindow( 1 );
          editItem.SetFocus();
      }
       * pResult  =   0 ;
  }

这里比较诡异的是我用Visual Studio 2008自动生成的事件响应函数的第一行居然出错,google之后第一个就是微软关于这个自动生成代码错误的修正。
    在这个代码里面先得到鼠标双击的位置,判断是否击中了单元格,击中就调用Edit Control ,大小就是选中的单元 格,至于为什么rect要+12啊+13什么的,那是因为他出来的输入框跟单元格没对齐,导致很丑。最后再给这个Edit Control 一 个焦点,就可以直接输入了。
    另外,为了能使输入之后有所反应,我们还要做一个鼠标的单击事件响应函数。

 

void  CAddInstanceDlg::OnNMClickList3(NMHDR  * pNMHDR, LRESULT  * pResult)
  {
      LPNMITEMACTIVATE pNMItemActivate  =  reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
  
       if (editItem.m_hWnd  !=  NULL)
      {
          editItem.ShowWindow( 0 );
           if (hitRow  !=   - 1 )
          {
              CString text;
              editItem.GetWindowText(text);
              listControl.SetItemText(hitRow, hitCol, text);
          }
      }
       hitCol  =  hitRow  =   - 1 ;
       * pResult  =   0 ;
  }
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载