我要做的效果是这样的:
学号 姓名 年龄 备注
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"));
只能这样添加吗?? 那我后面的姓名,年龄,备注都这么加呢??
位置如何确定呢?
还有就是如何设置学号 姓名 年龄 备注
这一栏为不能选中呢,,,意思就是总是放在最上面的。。 或者,用什么函数能实现这一功能呢。。
学号 姓名 年龄 备注
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"));
只能这样添加吗?? 那我后面的姓名,年龄,备注都这么加呢??
位置如何确定呢?
还有就是如何设置学号 姓名 年龄 备注
这一栏为不能选中呢,,,意思就是总是放在最上面的。。 或者,用什么函数能实现这一功能呢。。
你好好看看~其实很简单的~
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++;
}
在 WIN32 API 环境下你与控件窗口通信只能采用消息方式, 或者你自己写个类把控件封装起来.
http://www.vckbase.com/document/viewdoc/?id=243