大家好,我用下面的代码为ListBox加入项的时候, 为什么不能成功?CListBox *lst = (CListBox*)::AfxGetMainWnd()->GetDlgItem(IDC_LIST1);
for(int i = 0;i<=120;i++)
lst->SendMessage(LB_ADDSTRING,0,i);
另外一点小问题,当我放一个组件在窗体上的时候,我如何能知道它是属于哪个类的呢?

解决方案 »

  1.   

    >>当我放一个组件在窗体上的时候,我如何能知道它是属于哪个类的呢?
    在classwizard里 添加控件的变量时,会有一个默认的类,一般就是了
      

  2.   

    创建图形列表并和CListCtrl关联:
     m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192));
     m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );
     m_caller_list.SetImageList( &m_image_list, LVSIL_SMALL);
    为报表添加4列:
      char *szColumn[]={"昵称","IP地址","登陆时间","状态"};
      int widths[]={100,98,70,55};
      LV_COLUMN lvc;
      lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
      lvc.fmt=LVCFMT_LEFT;
      for(int i=0;i<4;i++) {//插入各列
       lvc.pszText=szColumn[i];
       lvc.cx=widths[i];
       lvc.iSubItem=i;
       m_caller_list.InsertColumn(i,&lvc);
      }
    为报表添加两项,以附加方式添加:
     char* data[4];
     data[0]="所有人";
     data[1]="0.0.0.0";
     data[3]="在线";
     data[2]=new char;
     CTime now=CTime::GetCurrentTime();
           CString temp = now.Format("%H:%M:%S");
     data[2]=temp.GetBuffer(1);
     LV_ITEM lvi;
     lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
     lvi.iSubItem=0;
     lvi.pszText=(char *)data[0];
     lvi.iImage = 0;
     lvi.iItem=0;
     m_caller_list.InsertItem(&lvi);
     for (int j=0;j<4;j++) m_caller_list.SetItemText(count,j,data[j]);
     count++;
     lvi.iImage = 1;
     lvi.iItem=count;
     m_caller_list.InsertItem(&lvi);
     data[0]="cherami";
     data[1]="127.0.0.1"; 
     for (int n=0;n<4;n++) m_caller_list.SetItemText(count,n,data[n]);
     count++;设置报表的样式
    选中一整行:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT); 
    绘制表格:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES);
    带复选框:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_CHECKBOXES);
    自动切换:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_TRACKSELECT);选定一行:
    设置CListCtrl的Show selection always选项
    SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)
     
    选中一个或多个项目时,会发送LVN_ITEMCHANGED消息,可以使用
    GetSelectedCount()方法得到被选定的项的数目。点击列头的消息响应:
    ON_NOTIFY(HDN_ITEMCLICKW, 0, ResponseFunc)
    消息,需要自己添加
    或者:
    ON_NOTIFY(LVN_COLUMNCLICK, ID_yourCtrl,  ResponseFunc)//向导添加
    前者后响应,后者先响应响应函数:
    ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult)双击CListCtrl中的ITEM的消息是及消息函数:
    ON_NOTIFY(NM_DBLCLK, ID_yourCtrl, ResponseFunc)单击ITEM的消息响应:
    ON_NOTIFY(NM_CLICK, ID_yourCtrl, ResponseFunc)
    ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult)
    HDN_ITEMCLICK    就是Header control Notify message for mouse left click on the Header control!
    而HDN_ITEMCLICK是当List View中存在一个Header Contrl时,Header Ctrl通知父窗口List View的!CListCtrl中的Item被选中触发LBN_SELCHANGE(通过WM_COMMAND)消息!删除CListCtrl中选定的项:
    POSITION pos;
    int nIndex;for(; pos= GetFirstSelectedItemPosition();)
    {
    nIndex = GetNextSelectedItem(pos);
    DeleteItem(nIndex);
    }
      

  3.   

    to  daphant(狒狒):
     不知道为什么,当我用AddString方法来添加时,运行时会出错,代码如下:
    void CModellessDlg::OnButton1() 
    {
    CListBox *lst = (CListBox*)::AfxGetMainWnd()->GetDlgItem(IDC_LIST1);
    for(int i = 0;i<=120;i++)
    {
    CString s;
    s.Format("%d",i);
    lst->AddString(s);
    }
    }
    另外,当我把整型转换为CString时,必须通过CString::Format来转换吗?不会吧?太麻烦了:(关于第二个问题,可能你看错我的意思了,我的意思是,如果我放一个按钮在窗体上,那么,我怎么才能看到它的类名其实是CButton呢?to  free_card(痛并快乐着) :
     谢谢你的回复,我还没有测试过你的代码,待会儿试试看,它好像是对TListView类(C++Builder中的叫法)进行操作的吧?