AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

WIN32用户界面设计基础之ListBox 篇

51自学网 2015-08-30 http://www.wanshiok.com
  一、 简单列表框的设计

  1、 使用结构存放批量数据

typedef struct
{
TCHAR name[25];
BOOL gender;
UINT age;
TCHAR country[25];
TCHAR email[25];
}Contactors
定义结构体
Contactors myCon[]={
{"SINOASTEROID",TRUE,22,"CHINA","sinoasteroid@sina.com"},
{"SMITH",TRUE,21,"AMERICA","smith@gsoft.com"},
{"ROSE",FALSE,20,"GERMEN","rose@psoftware.com"},
{"LICHADE",TRUE,21,"KOREA","lich@korea.com"},
}

  定义并初始化机构体数组

  2、 在对话框的WM_INITIAL消息中向LISTBOX添加项目

for(I=0;I<3;I++)
{
SendMessage(hlist,LB_ADDSTRING,0,(LPARAM)myCon[I].name;
)
file://使用LISTBOX无法正确显示,改用COMBOBOX,指定其Owner Draw 为None

  3、 捕获控件发往父窗口的通知消息

switch(LOWORD(wParam))
case IDC_LIST1:
{switch(HIWORD(wParam))
case LBN_SELCHANGE:
nItem=SendMessage(hlist,LB_GETCURSEL,0,0);

  LB_GETCURSEL得到列表框中当前选定的项目的以0为基准的索引值,如果没有选定值,返回LB_ERR,WPARAM和LPARAM均为0
I=SendMessage(hlist,LB_GETITEMDATA,nItem,0);

  对于自绘制的没有指定LBS_HANSTRING风格LISTBOX,LB_GETITEMDATA返回的值为在LB_ADDSTRING或LB_INSERTSTRING中的LPARAM参数,否则为LB_SETITEMDATA的LPARAM参数

  4、 将int、double类型变量转换成字符串

TCHAR tempbuffer;
_itoa(myCon[I].age,tempbuffer,10);

  整数转换成字符串,存入缓冲区tempbuffer,10为基数,如果要得到以16进制字符串表示,换10为16即可,也可以换为2

  _gcvt(myCon[I].adouble, 3, tempbuffer);

  浮点数转换成字符串,3为输出的位数

  二、 用LISTBOX显示文件列表

  1、 使用字符缓冲区存放当前目录

TCHAR pathBuffer[256];//缓冲区应当足够大
DWORD lenofPath;//存放字符串的长度定义为WORD、int仍正常运行
GetCurrentDirectory(256,pathBuffer);//将当前路径存入缓冲区pathBuffer
lenofPath=strlen(pathBuffer);//获得字符串的长度
pathBufer[lenofPath]=0;//截断字符串

  2、 在WM_INITDIALOG消息中填充列表框

DlgDirList(hDlg,//对话框句柄
pathBuffer,路径
IDC_LIST,//列表框
IDS_PATH,//显示路径的静态控件
DDL_DIRECTORY//除普通文件外还显示目录,如果此参数为0,只显示普通文件,还可以是DDL_READONLY、DDL_HIDE
);

  3、 用户双击,显示选定的字符串并删除

DWORD nItem;
TCHAR lpText[256];
case WM_COMMAND:
{switch LOWORD(wParam)
case IDL_FILELIST:
{switch HIWORD(wParam)
case LBN_DBLCLK:
nItem=SendMessage(hList,LB_GETCURSET,0,0);
SendMessage(hList,LB_GETTEXT,nItem,lpText);
SendMessage(hList,LB_DELETESTRING,nItem,0);
break;
}
break;
}

 

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:在存储过程中调用外部的动态连接库  下一篇:在VC++6.0中用MFC进行COM编程