listbox使用

ListBox控件的使用  该实例的功能是使用左边的ListBox控件向用户显示预定义选项列表,单击向右按钮,将用户选择的项添加到右边的ListBox控件中,单击向左的按钮,将右边的ListBox控件中用户选择的项添加到左边的ListBox控件中。以下是源代码:using System;using System.Data;using System.Configuration;using System.Collect 阅读详情

 

在vc中如何使用listcontrol (更多信息:www.qqsmy.cn  www.2345.com/?318 )
  这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。

 条款一:设置ListCtrl的风格
 在优快云上常常看到有人问怎么设置风格的,他们ListCtrl的样子是一个列表,有横条和竖条分界线,然后选中一行,要整一行都选中,而不是只有某一列被选中,等等,这里给一个比较全面的设置方法。//获得原有风格
DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
//设置新风格
     SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,
dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);

//设置扩展风格
DWORD styles =
LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;
ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,
styles );
其中LVS_EX_FULLROWSELECT 就是前面说得整行选中
LVS_EX_GRIDLINES 网格线(只适用与report风格的listctrl)
LVS_EX_CHECKBOXES 前面加个checkbox
pListCtrl->SetExtendedStyle(   m_listctrl.GetExtendedStyle()
|LVS_EX_SUBITEMIMAGES);

这也是一个很重要的属性,这样的话,可以在列表中加ICON,记得windows的任务管理器吗,你想做得那样,这个属性也要加哦,这个我以后会讲的~

条款二:加入列头  这是一个比较实质的东西,给列表框分列,然后加上列头代码说话,来了  

TCHAR rgtsz[2][10] = {_T("列头1"), _T("列头2")};

LV_COLUMN lvcolumn;
CRect rect;
m_listctrl.GetWindowRect(&rect);
for(int i=0;i<2;i++)
{
    lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
               | LVCF_WIDTH | LVCF_ORDER;
    lvcolumn.fmt = LVCFMT_LEFT;
    lvcolumn.pszText = rgtsz[i];
  lvcolumn.iSubItem = i;
    lvcolumn.iOrder = i;
  if(i==0)
    {
       lvcolumn.cx = rect.Width()*3/5 ;
  }
  else
      lvcolumn.cx = rect.Width()*2/5;
       
   m_listctrl.InsertColumn(i, &lvcolumn);
 }
这是插入两列的做法,你要插入20列??随便你,依样画葫芦~~ lvcolumn.mask 中那个mask可以有各种属性,具体去看msdn吧,

条款三:把记录,插入列表框中
 int nIndex = m_listctrl.GetItemCount();
   LV_ITEM    lvitemAdd = {0};
   lvitemAdd.mask = LVIF_TEXT;
   lvitemAdd.iItem = nIndex ;
   lvitemAdd.iSubItem = 0;
   lvitemAdd.pszText =_T("毛毛1");;
  
   if (m_listctrl.InsertItem(&lvitemAdd) != -1)
   {
    LV_ITEM lvitem = {0};
    lvitem.mask = LVIF_TEXT;
    lvitem.iItem = nIndex ;
    lvitem.iSubItem = 1;

    lvitem.pszText =_T("毛毛2");
    m_listctrl.SetItem(&lvitem);
   
   }
nIndex 是当前的行数,然后把新的一行,插在最下面,

条款四:给列表中插入图标
 在report格式中,也能插入图标
 继续代码说话
 m_image是个CImageList对象
 m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);
m_listctrl.SetImageList(&m_image,LVSIL_SMALL);
然后调用CImageList的成员函数int CImageList::Add( HICON hIcon );
把ICON插入到imagelist, 然后在插入记录的时候
 lvitemAdd.mask = LVIF_TEXT; -》 lvitemAdd.mask =
LVIF_TEXT|LVIF_IMAGE
 然后添加一个lvitemAdd.iImage = n;
 这个n是imagelist中的序号,表示是具体的哪一个图标,list么,呵呵

条款五: 插入记录时使用额外的信息,lParam 的使用有时候,你想对于某一行,加入一些额外的信息,那么就可以使用这个
lParam
  msdn是这么描述的Specifies the 32-bit value of the item
  我上次是为了在某一行加入一个信息,窗口句柄,然后是这么加的,
  int nIndex = m_listctrl.GetItemCount();
   LV_ITEM    lvitemAdd = {0};
   lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
   lvitemAdd.iItem = nIndex ;
   lvitemAdd.iSubItem = 0;
   lvitemAdd.pszText =_T("毛毛1");;
   lvitemAdd.iImage = n;
   lvitemAdd.lParam = (LPARAM)hwnd;(某个窗口的窗口句柄)

   if (m_listctrl.InsertItem(&lvitemAdd) != -1)
   {
    LV_ITEM lvitem = {0};
    lvitem.mask = LVIF_TEXT;
    lvitem.iItem = nIndex ;
    lvitem.iSubItem = 1;

    lvitem.pszText =_T("毛毛2");
    m_listctrl.SetItem(&lvitem);
   
   }
ok,这是一个比较全的例子的,又插ICON,又使用PARAM的


条款六 : 点击列表框,获取选中行信息
  响应NM_CLICK消息,如果你有MSDN,可以看到,有专门关于listview的
NM_CLICK的介绍
void CMyDlg::OnItemClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nItem = -1;

LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
if(lpNMItemActivate != NULL)
{
      nItem = lpNMItemActivate->iItem;
}
}
现在nItem就是点击选中那行的index了,有了index,获取那行的信息还难吗?懒汉说:难,因为你还没讲,晕,那就继续说

条款七: 根据行的index,获取该行的信息
 直接上代码吧
 LV_ITEM lvitem = {0};
    lvitem.iItem = nIndex;
    lvitem.iSubItem = 0;
    lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
m_listctrl.GetItem(&lvitem)
这样,就把nindex,第一列的信息取出来了,包括刚才我们加入的ICON,和那个额外信息(窗口句柄),
比如我要获取窗口句柄,就可以hwnd = (HWND)lvitem.lParam;
mask 用来指明你想获取那些信息具体可以查msdn中LVITEM Structure的定义和CListCtrl::GetItem

条款八:用程序选中某一行,使之选中
选中之 
m_listctrl.SetItemState
(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
不选中,取消选中之
m_listctrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);

条款九:获取当前所有选中的行(多选)这个,俺就比较懒了,抄msdn的代码吧,反正很简单
  
Example
// CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem
(IDC_YOURLISTCONTROL);
ASSERT(pListCtrl != NULL);
POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
    TRACE0("No items were selected!/n");
else
{
   while (pos)
   {
      int nItem = pList->GetNextSelectedItem(pos);
      TRACE1("Item %d was selected!/n", nItem);
      // you could do your own processing on nItem here
   }
}

条款十:删除条款九中选中的行
  这个相对前面九个条款是比较麻烦的,因为如果你要删除多行的话。往往要出错 比如,我现在要删除第0行和第1行(列表的行序列是从0开始的)那么好啊。我来删了
  m_listctrl.DeleteItem(0)
         m_listctrl.DeleteItem(1)
  恭喜你,错了,我好开心啊 :)
  因为你删除第0行以后,下面的行会往上移,那么原来的第1行就变成了第0行,那么你再
m_listctrl.DeleteItem(1),那么删除的是原来的第2行,真麻烦,所以,只有从下往上删,才是安全的,先删的,不会影响后面的操作,
    m_listctrl.DeleteItem(1)
         m_listctrl.DeleteItem(0)
  但有时候,我们也不知道要删除哪些行,只知道要删除选中的那些行,像条款九中的那些如果我们还是用
   
POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
    TRACE0("No items were selected!/n");
else
{
   while (pos)
   {
      int nItem = m_listctrl.GetNextSelectedItem(pos);   
 m_listctrl.DeleteItem(nItem );
   }
}
你就等着犯错吧!这时候我们就要鄙视一下微软了,为虾米木有GetLastselectedItemPosition 和GetPrevSelectedItem
多写一对成员函数会死啊没办法,办法自己想,这里有个笨办法
 POSITION   sSelPos = NULL;
while(sSelPos = m_listctrl.GetFirstSelectedItemPosition())
{
         int nSelItem = -1;
          nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);
          if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount())
        {
              好了,这个nSelItem 就是我们要的DD
       }
}
GetNextSelectedItem这个函数,看msdn的用法,其实是返回第一个的index,然后走到下一个选中的行去,所以这么做也是安全的,当然,还有个办法,先通过GetFirstSelectedItemPosition和GetNextSelectedItem来获取所有的选中行的index,然后把这些index放到一个数组里,然后再从下往上删唉真麻烦啊,还要不定数组,不说用new在堆上开吧,那么一个vector总是要的吧,麻烦啊所以我暂时是用上述的办法来删除,也供大家参考,希望能找到更好的办法。

 

 

 

 

 

 

 

1. ListCtrl 风格

      LVS_ICON: 为每个item显示大图标

      LVS_SMALLICON: 为每个item显示小图标

      LVS_LIST: 显示一列带有小图标的item

      LVS_REPORT: 显示item详细资料

      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”

--------------------------------------------------------------------------------

2. 设置listctrl 风格及扩展风格

      LONG lStyle;

      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style

      lStyle &= ~LVS_TYPEMASK; //清除显示方式位

      lStyle |= LVS_REPORT; //设置style

      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style

 

      DWORD dwStyle = m_list.GetExtendedStyle();

      dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)

      dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)

      dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件

      m_list.SetExtendedStyle(dwStyle); //设置扩展风格

--------------------------------------------------------------------------------

3. 插入数据

      m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列

      m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

      int nRow = m_list.InsertItem(0, “11”);//插入行

      m_list.SetItemText(nRow, 1, “jacky”);//设置数据

--------------------------------------------------------------------------------

4. 一直选中item

    选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS

--------------------------------------------------------------------------------

5. 选中和取消选中一行

    int nIndex = 0;

    //选中

    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);

    //取消选中

    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);

 

--------------------------------------------------------------------------------

6. 得到listctrl中所有行的checkbox的状态

      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);

      CString str;

      for(int i=0; i<m_list.GetItemCount(); i )

      {

           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))

           {

                str.Format(_T("第%d行的checkbox为选中状态"), i);

                AfxMessageBox(str);

           }

      }

--------------------------------------------------------------------------------

7. 得到listctrl中所有选中行的序号

      方法一:

      CString str;

      for(int i=0; i<m_list.GetItemCount(); i )

      {

           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )

           {

                str.Format(_T("选中了第%d行"), i);

                AfxMessageBox(str);

           }

      }

      方法二:

      POSITION pos = m_list.GetFirstSelectedItemPosition();

      if (pos == NULL)

           TRACE0("No items were selected!/n");

      else

      {

           while (pos)

           {

                int nItem = m_list.GetNextSelectedItem(pos);

                TRACE1("Item %d was selected!/n", nItem);

                // you could do your own processing on nItem here

           }

      }

--------------------------------------------------------------------------------

8. 得到item的信息

      TCHAR szBuf[1024];

      LVITEM lvi;

      lvi.iItem = nItemIndex;

      lvi.iSubItem = 0;

      lvi.mask = LVIF_TEXT;

      lvi.pszText = szBuf;

      lvi.cchTextMax = 1024;

      m_list.GetItem(&lvi);

--------------------------------------------------------------------------------

9. 得到listctrl的所有列的header字符串内容

      LVCOLUMN lvcol;

      char  str[256];

      int   nColNum;

      CString  strColumnName[4];//假如有4列

      nColNum = 0;

      lvcol.mask = LVCF_TEXT;

      lvcol.pszText = str;

      lvcol.cchTextMax = 256;

      while(m_list.GetColumn(nColNum, &lvcol))

      {

           strColumnName[nColNum] = lvcol.pszText;

           nColNum ;

      }

--------------------------------------------------------------------------------

10. 使listctrl中一项可见,即滚动滚动条

    m_list.EnsureVisible(i, FALSE);

--------------------------------------------------------------------------------

11. 得到listctrl列数

    int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();

--------------------------------------------------------------------------------

12. 删除所有列

      方法一:

         while ( m_list.DeleteColumn (0))

       因为你删除了第一列后,后面的列会依次向上移动。

      方法二:

      int nColumns = 4;

      for (int i=nColumns-1; i>=0; i--)

          m_list.DeleteColumn (i);

--------------------------------------------------------------------------------

13. 得到单击的listctrl的行列号

      添加listctrl控件的NM_CLICK消息相应函数

      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)

      {

           // 方法一:

           /*

           DWORD dwPos = GetMessagePos();

           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

  

           m_list.ScreenToClient(&point);

  

           LVHITTESTINFO lvinfo;

           lvinfo.pt = point;

           lvinfo.flags = LVHT_ABOVE;

    

           int nItem = m_list.SubItemHitTest(&lvinfo);

           if(nItem != -1)

           {

                CString strtemp;

                strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);

                AfxMessageBox(strtemp);

           }

          */

  

          // 方法二:

          /*

           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

           if(pNMListView->iItem != -1)

           {

                CString strtemp;

                strtemp.Format("单击的是第%d行第%d列",

                                pNMListView->iItem, pNMListView->iSubItem);

                AfxMessageBox(strtemp);

           }

          */

           *pResult = 0;

      }

--------------------------------------------------------------------------------

14. 判断是否点击在listctrl的checkbox上

      添加listctrl控件的NM_CLICK消息相应函数

      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)

      {

           DWORD dwPos = GetMessagePos();

           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

  

           m_list.ScreenToClient(&point);

  

           LVHITTESTINFO lvinfo;

           lvinfo.pt = point;

           lvinfo.flags = LVHT_ABOVE;

    

           UINT nFlag;

           int nItem = m_list.HitTest(point, &nFlag);

           //判断是否点在checkbox上

           if(nFlag == LVHT_ONITEMSTATEICON)

           {

                AfxMessageBox("点在listctrl的checkbox上");

           }

           *pResult = 0;

      }

--------------------------------------------------------------------------------

15. 右键点击listctrl的item弹出菜单

      添加listctrl控件的NM_RCLICK消息相应函数

      void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)

      {

           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

           if(pNMListView->iItem != -1)

           {

                DWORD dwPos = GetMessagePos();

                CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

   

                CMenu menu;

                VERIFY( menu.LoadMenu( IDR_MENU1 ) );

                CMenu* popup = menu.GetSubMenu(0);

                ASSERT( popup != NULL );

                popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );

           }

           *pResult = 0;

  }

--------------------------------------------------------------------------------

16. item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序

      添加listctrl控件的LVN_ITEMCHANGED消息相应函数

      void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)

      {

           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

           // TODO: Add your control notification handler code here

   

           CString sTemp;

 

           if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&

            (pNMListView->uNewState & LVIS_FOCUSED) == 0)

           {

                sTemp.Format("%d losted focus",pNMListView->iItem);

           }

           else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&

               (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)

           {

                sTemp.Format("%d got focus",pNMListView->iItem);

           }

 

           if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&

            (pNMListView->uNewState & LVIS_SELECTED) == 0)

           {

                sTemp.Format("%d losted selected",pNMListView->iItem);

           }

           else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&

            (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)

           {

                sTemp.Format("%d got selected",pNMListView->iItem);

           }

   

           *pResult = 0;

      }

--------------------------------------------------------------------------------

17. listctrl的  subitem 添加图标

      注意: 首先要用 InsertItem() 插入一行的第一列, 然后才能用 SetItem 设置其他项 

      m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);

      m_userlist.SetItem(..);

--------------------------------------------------------------------------------

18. 在CListCtrl显示文件,并根据文件类型来显示图标

      网上找到的代码,自己试用并改正过, share

 步骤1: 设置 list 的图像列表为 系统图像列表   

 BOOL SetSystemImageList( CListCtrl & list )

{     

 HIMAGELIST himlSmall;

 HIMAGELIST himlLarge;

 SHFILEINFO sfi;

 char  cSysDir[MAX_PATH];

 CString  strBuf;

 memset(cSysDir, 0, MAX_PATH);

 GetWindowsDirectory(cSysDir, MAX_PATH);

 strBuf = cSysDir ;

 

 // SHGetFileInfo:

 // If uFlags contains SHGFI_SYSICONINDEX, the return value is a handle to

 // an image list that contains the large icon images.

 // If SHGFI_SMALLICON is included with SHGFI_SYSICONINDEX, the return value

 // is the handle to an image list that contains the small icon images.

 //

 himlSmall = (HIMAGELIST)SHGetFileInfo ( (LPCSTR)cSysDir, 

     0, 

     &sfi,

     sizeof(SHFILEINFO), 

     SHGFI_SYSICONINDEX | SHGFI_SMALLICON );

 himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir, 

     0, 

     &sfi, 

     sizeof(SHFILEINFO), 

     SHGFI_SYSICONINDEX | SHGFI_LARGEICON);

 if (himlSmall && himlLarge)

 {

  ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,

      (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);

  

  ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,

      (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);

 }

 return TRUE;

}

步骤2:  给列表添加指定的文件, 同时获得该文件的的图标索引, 给 list 添加图标

int GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected) ; //  向前声明

void AddFiles(CListCtrl & list, LPCTSTR lpszFileName, BOOL bAddToDocument)

{

 int nIcon = GetIconIndex(lpszFileName, FALSE, TRUE);

 CString strSize;

 CFileFind filefind;

 //  get file size

 if ( filefind.FindFile(lpszFileName))

 {

  filefind.FindNextFile();

  strSize.Format("%d", filefind.GetLength());

 }

 else

  strSize = "0";

 // split path and filename

 CString strFileName = lpszFileName;

 CString strPath;

 int nPos = strFileName.ReverseFind('//');

 if (nPos != -1)

 {

  strPath = strFileName.Left(nPos);

  strFileName = strFileName.Mid(nPos 1);

 }

 // insert to list

 int nItem = list.GetItemCount();

 

 

 //list.InsertItem(nItem, strFileName, nIcon);

 //list.SetItemText(nItem, 1, strSize);

 //

 // 此处可以根据实际需要修改代码

 //

}

     

--------------------------------------------------------------------------------

19. listctrl内容进行大数据量更新时,避免闪烁

      m_list.SetRedraw(FALSE);

      //更新内容

      m_list.SetRedraw(TRUE);

      m_list.Invalidate();

      m_list.UpdateWindow();

20. 清除 ListCtrl 以重新初始化:

      // 删除所有行

 m_ctrllist.DeleteAllItems() ;    

 // 删除所有列

 int iColCount = m_ctrllist.GetHeaderCtrl()->GetItemCount() ;

 

 // 方法 1

 // 原理: 删除第一列后, 其他列向前移动

 while( m_ctrllist.DeleteColumn(0) ) ;

   

 // 方法 2

 for (int i=0; i < iColCount ; i )

 {

  m_ctrllist.DeleteColumn(0);

 }

 // 方法 3

 for (int i=iColCount-1; i >= 0; i-- )

 {

  m_ctrllist.DeleteColumn( i );

 }

 

 

 

 

 

 

AWR1642+DCA1000EVM 不使用mmWave Studio软件采集原始ADC数据 Timeout问题汇总 DCA1000 EVM Timeout问题汇总 阅读详情

相关推荐

YOLOv11n-seg 实战指南:从训练到模型部署的完整流程

本文提供了YOLOv11n-seg实例分割模型从环境准备、数据标注到模型训练、验证及最终部署的完整实战指南。详细讲解了如何准备多边形掩码数据、配置关键训练参数、解读分割核心评估指标,并重点介绍了将模型导出为ONNX等格式进行部署的流程与优化技巧,帮助开发者高效完成从开发到生产的全链路实践。

weixin_29062255的博客 554

VC中ListCtrl控件的使用(一)

在vc中如何使用listcontrol   这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。 条款一:设置ListCtrl的风格 在优快云上常常看到有人问怎么设置风格的,他们ListCtrl的样子是一个列表,有横条和竖条分界线,然后选中一行,

w0911h的专栏 2956

从理论到实践:使用Sigrity SystemSI完成DDR4信号完整性仿真全流程解析

本文详细解析了使用Sigrity SystemSI完成DDR4信号完整性仿真的全流程,从核心挑战到实战操作。文章深入探讨了DDR4信号完整性问题,介绍了SystemSI工具链的演进与分工,并提供了从前期准备到高级技巧的详细指南,帮助工程师有效解决DDR4设计中的信号完整性问题。

weixin_30505225的博客 511

FreeMarker

一、主要内容 二、 FreeMarker 概述 1. FreeMarker概念 FreeMarker 是⼀款 模板引擎: 即⼀种基于模板和要改变的数据, 并⽤来⽣成输出⽂本(HTML⽹⻚,电⼦邮件,配置⽂件,源代码等)的通⽤⼯具。 是⼀个Java类库。 FreeMarker 被设计⽤来⽣成 HTML Web ⻚⾯,特别是基于 MVC 模式的应⽤程序,将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,⽽是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有⼀些编程的能⼒,但通常由

姓程名序种族猿 906

从原理到代码:拆解UniFormer中动态位置嵌入(DPE)的3D卷积实现

本文深入解析了UniFormer模型中动态位置嵌入(DPE)模块的3D卷积实现原理与代码。DPE通过一个轻量的3D深度可分离卷积,替代传统静态位置编码,使模型能自动学习视频数据的时空位置关系。文章对比了其与Swin Transformer相对位置偏置的优劣,并提供了PyTorch实现代码与高级定制方案,为视频理解任务提供了高效灵活的动态位置编码解决方案。

weixin_29207149的博客 309

SAP-FICO LSMW实战:批量导入财务凭证与固定资产主数据(AS91)的完整指南

本文详细介绍了SAP-FICO中LSMW工具在批量导入财务凭证与固定资产主数据(AS91)的完整流程与实战技巧。从基础概念、环境准备到财务凭证导入全流程,特别针对AS91历史资产导入的日期逻辑和关键字段映射提供了专项指南,并分享了常见错误排查与性能优化建议,帮助用户高效完成SAP数据迁移任务。

weixin_29230649的博客 505

VC中ListCtrl经验总结【转载】

ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这个是参照《Eff

aikker的专栏 1751

CANFD升级踩坑实录:DBC转换时DLC大于8的信号怎么处理?

本文详细探讨了CANFD升级过程中DLC大于8的信号处理问题,提供了工程化解决方案和AutoSar BSW层配置要点。通过分析CAN与CANFD的DLC本质差异,提出信号拆分重组、DLC重映射和协议层适配三种策略,并给出验证与测试方案,帮助开发者避免数据截断和通信故障。

weixin_42521843的博客 229

FTL的使用及Maven整合项目

FTL即FreeMarker,是一款模板引擎,类似于Thymeleaf,都是通过传入的数据来对页面进行渲染,用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。

weixin_45266856的博客 1940

【深度学习新浪潮】智能体在图像处理领域的技术突破与实践指南

智能体正在重构图像处理的技术版图:从多智能体分工的"专业化协作",到多模态统一的"极简架构",再到工具增强的"实战能力",技术突破不断降低开发门槛并拓展应用边界。对于开发者而言,2025年的核心机遇在于结合具体场景选择成熟框架(如医疗用IteR-MRL、工业用NVIDIA NIM),通过微调与工具集成快速落地解决方案。随着硬件成本下降与开源生态完善,图像处理智能体将从当前的"高端场景赋能"走向"千行百业普及",真正成为数字世界的"视觉感知与操作核心"。

专注:太空算力、AI infra、异构调度、大模型成本工程 439

华为od 面试八股文_C++_04_含答案

华为od 面试八股文_C++_04_含答案

MISAYAONE的博客 2472

vc列表控件List Control删除、插入、勾选行

本文介绍列表框删除行,插入行,全部勾选,全部取消功能。 在对话框上拖入一个List Control控件,并类向导为其添加变量m_listctrl。 还是直接给代码: BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); //1 列表控件要足够宽,以便容纳5列 m_listctrl.InsertColumn(0,“编号”,LVCFMT_CEN...

datoulaile123的博客 2262

AI翻译工具自动翻译日语视频生成srt中文字幕,支持离线轻松生成任意日语视频字幕!可选择支持显卡模式和cpu模式低显存也能用

【AI离线字幕神器:日语视频一键转中文字幕】推荐一款基于Faster-Whisper的本地化字幕工具,可离线生成日语视频的中文字幕(.srt格式),支持CPU/GPU加速处理。实测1小时视频最快4-5分钟完成翻译,无需联网保护隐私。操作简单只需拖拽文件,支持批量处理音频(mp3/wav)和视频(mp4/mkv)文件,还能自定义输出格式和参数调整。特别适合需要观看无字幕日语资料的用户,堪称技术宅必备神器。下载地址附后,包含详细使用教程和参数配置说明。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

listbox的事件

有两个专用于wx.ListBox 的命令事件。EVT_LISTBOX 事件在当列表中的一个元素被选择时触发(即使它是当前所选择的元素)。如果列表被双击,EVT_LISTBOX_DCLICK 事件发生。

Tony_Wong的专栏 2393

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

wpf之ListBox

wpf中ListBox在针对多个选项选择中的应用十分广泛,本文就来讲解非Mvvm和Mvvm模式下如何使用ListBox。

qq_34059233的博客 1795

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ListBox使用

 ListBox     2006-11-14 09:35:43 大 中 小 1、让ListBox中某一个指定的索引值的项获得焦点(选中)ListBox.SelectedIndex=索引值; 2、把全部选中项都清除ListBox.ClearSelected(); 3、使其中指定索引值的某项不被选中ListBox.SetSelected(0,False

xzweihe的专栏 2118

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[WPF](小结1)ListBox嵌套ListBox

思路:大项目的每项中包含一个小项目集合,用ListBox嵌套ListBox或ListBox嵌套ItemsCtrol是个比较好的方式,现总结如下: 第一:先构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下: (为方便看清语句,类直...

weixin_30268921的博客 805

listbox

ListBox作为vb的一个控件中文名称列表框可以通过vb的代码添加、修改列表框的内容列表框可以在编程中显示各种需要的数值方法:Sub AddItem(Item As String, [Index])    VB.ListBox 的成员    添加一项到 Listbox 控件。参数:Item:所要添加的字符串Index:可选,将字符串插入在第Index项

yiminu5的专栏 1086

vba中ListBox控件的使用

给ListBox添加内容 If CheckBox8 = True Then---------------------------checkbox控件被选中 For i = 0 To ListBox1.ListCount - 1--------------循环将值赋到ListBox中 If i < ListBox1.ListCount Then '...

weixin_30695195的博客 6996

WPF中ListBox控件的使用

环境:VS2008 SP1+Northwind数据库1.直接在代码中使用ItemsSource进行绑定Data.NorthwindDataContext context = new Data.NorthwindDataContext();var customer = from c in context.Customers               select c;//thi

Teng_s2000的专栏 1万+

WPF ListBox

一、ListBox系列索引 1、WPF ListBox基础(包括ListBox多列展示,ListBox实现分页效果,ListBox绑定XML数据源) 2、ListBox 单击变大动画效果(使用模板、样式、绑定数据源等) 二 ListBox基础:包括ListBox多列展示,ListBox实现分页效果,ListBox绑定XML数据源。 1.ListBox多列展示 ?

Waitforsniping的专栏 950

ListBox.Resources与ListBox.ItemContainerStyle的区别

ListBox.Resources中定义的style不起作用,ListBox.Resources与ListBox.ItemContainerStyle的区别

qq_52049141的博客 495

listbox控件的一些操作

1. 属性列表: SelectionMode 组件中条目的选择类型,即多选(Multiple)、单选(Single) Rows 列表框中显示总共多少行 Selected 检测条目是否被选中 SelectedItem 返回的类型是ListItem,获得列表框中被选择的条目 Count 列表框中条目的总数 SelectedIndex 列表框中被选择项的索引值 Items 泛指列表框中的所

zhengzhengliang的专栏 4348

delphi listbox 使用

listbox删除 删除选中的某个:procedure TForm1.Button1Click(Sender: TObject); var i:integer;begin i:=0; while i 0) then begin Items.Move(ItemIndex, ItemIndex - 1); lst2.SetFocus; ...

420

如何在sap的screen中使用ListBox

1、拖入一个编辑控件到屏幕,设置“下拉”属性为“ListBox”2、设置Function-CODE,3、listbox的列表的取值有三种方法:A)默认取Dictionary;B)使用“VRM_SET_VALUES"函数在PBO中设置 ,代码见后面代码C)使用Process On Value-request事件和“F4IF_INT_Table_Value_request”函数设置输入帮助

SAP BLOG--Jack Wu 3394

html中listbox效果,listbox控件的使用

VB的listbox控件怎么使用每次我点击一个图片时,怎么让listbox.list加载一个数字 如我点4张 它的假设Listbox控件名字是List1: List1.Clear '清空列表中所有元素 List1.AddItem ("获得分数:1") '添加一行列表内容 List1.AddItem("获得分数:2") '作用同上 在图片的Click事件中选择性地加入上述部分代码就行了。 以上是VB...

weixin_32110907的博客 1937
上一篇: 深入探讨MFC消息循环和消息泵
下一篇: VC非模态对话框创建和销毁
NewJerryj
博客等级 码龄19年 196粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值