我要做的效果是这样的: 
学号    姓名      年龄      备注 
001    张三      20      
002    李四      15      0 
003    王五      21      5 
...    ...      ...      ... 像这样的界面,我是mobile,sdk。 
我dialog中用了listbox。 
只能用::SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)_T("001")); 
SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)_T("002")); 
只能这样添加吗?? 那我后面的姓名,年龄,备注都这么加呢?? 
位置如何确定呢? 
还有就是如何设置学号    姓名      年龄      备注 
这一栏为不能选中呢,,,意思就是总是放在最上面的。。 或者,用什么函数能实现这一功能呢。。

解决方案 »

  1.   

    给你来一段代码最实在~最近写的
    你好好看看~其实很简单的~
    CRect rect;
    m_Server.GetWindowRect(&rect); m_Server.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES );
    int m_Width=rect.right-rect.left;
    m_Width=(m_Width-20)/5; m_Server.InsertColumn(0,"服务名称",LVCFMT_LEFT,m_Width,0);
    m_Server.InsertColumn(1,"显示名称",LVCFMT_LEFT,m_Width,1);
    m_Server.InsertColumn(2,"启动状态",LVCFMT_LEFT,m_Width-30,2);
    m_Server.InsertColumn(3,"启动类型",LVCFMT_LEFT,m_Width-30,3);
    m_Server.InsertColumn(4,"程序路径",LVCFMT_LEFT,m_Width+60,4);
    SC_HANDLE scm;  if((scm=::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL) 
    {
    MessageBox("OpenSCManager Error\n"); 
    return;
    }

    LPENUM_SERVICE_STATUS lpServices= NULL; //定义
    DWORD nSize = 0; 
    DWORD n;
    DWORD nResumeHandle=0;
    lpServices=(LPENUM_SERVICE_STATUS)LocalAlloc(LPTR, 64*1024);//分配内存 ::EnumServicesStatus(scm,SERVICE_WIN32,SERVICE_STATE_ALL,lpServices,
    64*1024,&nSize,&n,&nResumeHandle); LPQUERY_SERVICE_CONFIG ServicesInfo = NULL;
    UINT m_Current;//=m_Server.GetItemCount();
    m_Current=0;
    for(int i=0;i<n;i++)
    {
    SC_HANDLE service=NULL;
    DWORD nResumeHandle=0; m_Server.InsertItem(m_Current,lpServices[i].lpServiceName,0);
    m_Server.SetItemText(m_Current,1,lpServices[i].lpDisplayName);
    if(lpServices[i].ServiceStatus.dwCurrentState!=SERVICE_STOPPED)
    m_Server.SetItemText(m_Current,2,"已启动");
    else
    m_Server.SetItemText(m_Current,2,"未启动"); CString str;
    service=OpenService(scm,lpServices[i].lpServiceName,SERVICE_QUERY_CONFIG); 
    // ServicesInfo=(LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,64*1024); //注意分配足够的空间
    ServicesInfo=(LPQUERY_SERVICE_CONFIG)new BYTE[8*1024];
    if(!::QueryServiceConfig(service,ServicesInfo,8*1024,&nResumeHandle))
    {
    if(GetLastError()==ERROR_INVALID_HANDLE)
    str.Format("%d==ERROR_INVALID_HANDLE",GetLastError());
    MessageBox(str);
    return; //枚举各个服务信息
    }
    if(SERVICE_AUTO_START==ServicesInfo->dwStartType) //启动方式 

    m_Server.SetItemText(m_Current,3,"自动");

    if(SERVICE_DEMAND_START==ServicesInfo->dwStartType)
    {
    m_Server.SetItemText(m_Current,3,"手动");

    if(SERVICE_DISABLED==ServicesInfo->dwStartType) 

    m_Server.SetItemText(m_Current,3,"禁止");
    }  m_Server.SetItemText(m_Current,4,ServicesInfo->lpBinaryPathName);
    delete ServicesInfo;
    CloseServiceHandle(service);
    m_Current++;
    }
      

  2.   

    Windows Mobile 提供了标准控件 List View,可以满足你的需求。
      

  3.   

    我是mobile 是win32的,不是MFC,我在dialog中没有看到 List View啊。只有list control 和list box。。请大姐大哥指导下啊。
      

  4.   

    m_Server这个是什么呢?你这个是用什么写的呢??我是win32的。。你写的我好像看不懂啊都不知道你是用那个函数实现的,
      

  5.   


    在 WIN32 API 环境下你与控件窗口通信只能采用消息方式, 或者你自己写个类把控件封装起来.
      

  6.   

    怎么封装个类啊。。能给个例子不。不知道怎么封装啊。比如钩子的,就是自己封装了个,觉得还可以,不怎么难,,网上也有一些代码,参考下就可以了,可现在要封装个eidt,combox,listview等,,到底怎么做呢,,能给点演示不,,所编一个,就可以。。谢谢
      

  7.   

    楼主参考一下这个吧
    http://www.vckbase.com/document/viewdoc/?id=243