如何用api创建listview

dwd4141 2011-09-02 01:55:42
大家好,如题。我想用api创建一个listview,我用CreateWindow,传入TEXT("listview")给第二个参数,编译运行都可以,就是没有显示出列表框。我以为是没有Show,所以又调用了ShowWindow,但还是没看到。请教一下大家,是不能用这种方式创建,还是少了什么步骤?先谢谢各位了~
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
的确,网上一搜一堆
呵呵,学习了

#include <commctrl.h>

#pragma comment(lib, "comctl32.lib")

typedef struct
{
char szItemNr[8];
char szItem[32];
char szItemDescription[32];
}Item;

static CREATESTRUCT *cs;
static HWND hWndListView;
static HFONT hFont;
static LV_ITEM lv;
static Item ListItem[3];
static char szColumnHeader[3][12] = {"Number", "Item", "Description"};
int index;
int iiWidth[3];
LV_COLUMN lvC;
RECT rect;

LV_DISPINFO *lvd;
NMHDR *hdr;

cs = (CREATESTRUCT *)lParam;
hFont = CreateFont(11, 0, 0, 0, 500, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_CHARACTER_PRECIS, PROOF_QUALITY,
FF_DONTCARE, "MS SANS SERIF");
hWndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW,
"", WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS,
0, 0, 0, 0, hwnd,(HMENU)ID_LISTVIEW, cs->hInstance, NULL);

ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

iiWidth[0] = 60;
iiWidth[1] = 100;
iiWidth[2] = 400;

lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvC.fmt = LVCFMT_LEFT;

for(index = 0; index < 3; index++)
{
lvC.iSubItem = index;
lvC.cx = iiWidth[index];
lvC.pszText = szColumnHeader[index];
ListView_InsertColumn(hWndListView,index,&lvC);
}

// Add some items here
strcpy(ListItem[0].szItemNr, "1");
strcpy(ListItem[0].szItem, "Cat");
strcpy(ListItem[0].szItemDescription, "Pet");

strcpy(ListItem[1].szItemNr, "2");
strcpy(ListItem[1].szItem, "Dog");
strcpy(ListItem[1].szItemDescription, "Pet");

AdjustListView(hWndListView, &lv, index);

dwd4141 2011-09-02
  • 打赏
  • 举报
回复
搞定了,给大家看下一个人告诉我的,相信对一些朋友会有帮助的。
Howdy,

While the temptation is to just use the string "listview" - well, one does simply use "button" after all, right? This temptation will prove ill-fated.

commctrl.h has a whole bunch of defines for (amongst other things) the strings to be used when requesting a windows control of a particular class.

Whenever I use them, I just use the #defined WC_LISTVIEW. Upon closer inspection, one can see that this is defined as WC_LISTVIEWW, which in turn is #defined as "SysListView32".


So, simply change the TEXT("listview") to TEXT("SysListView32") and you should be ready to rock'n'roll.
healer_kx 2011-09-02
  • 打赏
  • 举报
回复
简单做就是来看mfc代码
dwd4141 2011-09-02
  • 打赏
  • 举报
回复
哦 dialogBox的我懂 我是想在一个主窗口上添加一个listview显示信息,因为这对于我的程序来说会容易处理一些。你如果知道用CreateWindowEx创建listview,麻烦弄下代码咯。我只要它的 edit,button什么的我都懂。
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
eHandle = CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or WS_VISIBLE or
WS_BORDER, 60, 26, 360, 21, Handle, 0, Inst, nil);

nil 是delphi7的,对于c++的NULL
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
这样搞太麻烦,所以,你懂的,我只是弄着玩玩,知道怎么做的,就可以了,用来写东西累死人可不带偿命的
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
用资源的,用DialogBox就可以了
CreateWindowEx, 比如创建个edit,
eHandle = CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or WS_VISIBLE or
WS_BORDER, 60, 26, 360, 21, Handle, 0, Inst, nil);
dwd4141 2011-09-02
  • 打赏
  • 举报
回复
楼上的兄弟 可否说说用CreateWindowEx如何创建?
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
listview不是一下子create出来的吧,应该是个组合的,
标准的只包括
BUTTON
COMBOBOX
EDIT
LISTBOX
MDICLIENT
RichEdit
RICHEDIT_CLASS
SCROLLBAR
STATIC

CreateWindowEx 带风格的
dwd4141 2011-09-02
  • 打赏
  • 举报
回复
哦我说错了是第一个参数。。谢谢楼上的朋友。你们能详细说下用CreateWindow怎么创建listview吗??一些要注意的细节。我先用CreateWindow弄出来再去试试用资源文件: )
TitanQuest 2011-09-02
  • 打赏
  • 举报
回复
CreateWindowEx
jackyjkchen 2011-09-02
  • 打赏
  • 举报
回复
理论上任何控件都可以用CreateWindow,但我推荐你用资源文件,可视化编辑,纯C API下可用(不需要MFC工程)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧