首页 > 学院 > 开发设计 > 正文

[ windows程序设计(programing windows) ] - 控制项之列表框扩展

2019-11-06 06:29:54
字体:
来源:转载
供稿:网友

上一篇讲了基本的列表框用法,我后来看了一下文章,感觉可能有些人看完文章都不知道怎么用,就像我刚开始一样,是这样的,我在这里再说一些多余的话,对于控件怎么用,注意windows是基于消息队列的,所以一切都是基于消息的,所以比如说对列表框的初始化,如添加字串,设置默认显示,这些就可以在父窗口的WM_CREATE消息中尽心,而像选择什么的会引起识别码(ID)的操作,必须在WM_COMMAND消息下处理,还有其他的一些内容则需要读者自己判断应该在什么位置进行。

然后进入本文的正文,上篇讲了很多列表框的消息,本片我则会介绍一个功能强大的列表框消息,LB_DIR,DIR即是directory,如果用过kali linux或者windows command line(cmd)应该会知道dir是显示当前目录的文件夹和文件的命令,那么对于列表框来说,就是在列表框中列出当前问目录下的文件夹和文件作为可选择的项目。

先说创建,你可以在父窗口的WM_CREATE消息下用CreateWIndow函数来创建列表框,然后用SendMessage函数来告诉这个列表框你应该显示目录

#define DIRATTR (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_DIRECTORY | DDL_ARCHIVE | DDL_DRIVES)
hwndList = CreateWindow(TEXT("listbox"), NULL, WS_CHILDWINDOW | WS_VISIBLE | LBS_STANDARD, cxChar, cyChar * 3, cxChar * 13 + GetSystemMetrics(SM_CXVSCROLL), cyChar * 10, hWnd, (HMENU)ID_LIST, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);SendMessage(hwndList, LB_DIR, DIRATTR, (LPARAM)TEXT("*.*"));上面的代码是我从一本书上面的样例代码直接扒下来的= =!。然后来说一下SendMessage函数在这种情况下要怎么用,

第一个参数是列表框的窗口句柄,从CreateWindow函数返回;第二个参数是LB_DIR消息,第三个参数wParam指出要被加入到列表框的文件或者目录的属性,

DDL_ARCHIVE包含档案文件
DDL_DIRECTORY包含子目录,子目录名称在方括号 [ ] 中包含
DDL_DRIVES包含所有驱动器,也就是磁盘,磁盘以 [-X-] 这样的形式被列出,如 [-C-] 表示c盘
DDL_EXCLUSIVE包含指定属性的可执行文件,默认情况下,即使DDL_READWRITE没有指定也会显示read/write属性的文件
DDL_HIDDEN包含隐藏文件
DDL_READONLY包含只读文件
DDL_READWRITE包含只有读写属性的文件,这是默认选项
DDL_SYSTEM包含系统文件
第四个参数lParam是一个null结尾的字符串,只有与此字串匹配的文件才会显示,如TEXT("*.*"),它的意思是文件全名中间有个点的文件才会显示,换句话说就是有后缀的文件会显示,在这个字串中,?可以替换*,?只能表示一个字符,*可以表示多个字符,对于三个文件a.b,a.bb,aa.bb,如果用TEXT("*.*")则全部会显示,如果用TEXT("?.?")则会只会显示a.b,如果用TEXT("?.??")则会显示a.bb。

除了以上介绍的,这个列表框还会显示一个 [..] 选项,这个选项的意思是返回上一层。

以上便是本文的全部内容,欢迎指出不对的地方,欢迎评论,共同学习,共同进步。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表