Tab Control And List Control使用小记

目录(?)[+]

  1. Tab Control
  2. List Control

Tab Control

TCITEM tci;
tci.mask = TCIF_TEXT;
tci.pszText = TEXT("Tab1");
TabCtrl_InsertItem(hTab, 0, &tci);	// 其中0为第几个Tab页,这里为第0个,也就是第一个

tci.pszText = TEXT("Tab2");
TabCtrl_InsertItem(hTab, 1, &tci);	// 第1个Tab,也就是第二个

切换Tab页程序需要处理WM_NOTIFY消息, 消息的wParam参数的低16位为控件标识符, lParam参数为一个指向NMHDR结构的指针,切换时,NMHDR结构的code成员指定的当前动作,TCN_SELECHANGING为切换中,这时获取当前的Tab页时还是获取的旧的,TCN_SELECHANG这个消息时获取当前Tab页为切换后的Tab页

NMHDR结构:

typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT idFrom;
    UINT code;
} NMHDR;

List Control

添加分栏 > 这里所说的分栏呢就是上面图中的分栏1、分栏2那里,当然,可以多分,添加分栏可以发送消息,LVM_INSERTCOLUMN,wParam参数为分栏号,从0开始,lParam为LVCOLUMN结构指针

如:

			LVCOLUMN column;
			// 指定LCOLUMN结构的pszText, fmt, cx有效
			column.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH;
			// 设置有效地域的属性
			column.fmt = LVCFMT_CENTER;		// 指定文本居中显示
			column.cx = 100;				// 指定此栏的宽度
			column.pszText = "分栏1";	// 指定此栏显示的文本
			// 添加一个新的专栏
			SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&column);
			// 再添加一个专栏
			column.pszText = "分栏2";
			column.cx = 50;
			SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&column);

添加行 > 这里可能说法不同吧,我是说的“行”,这个行就是指Test1和Teste2那一行了,这里有几个消息,分别记录,消息如下:

WM_INSERTITEM > 这里的wParam参数为0, lParam参数为一个LVITEM结构的指针

WM_SETITEM > wParam参数为0, lParam参数为LVITEM的指针

WM_SETITEMTEXT > wParam参数为行号,lParam参数为指向LVITEM的指针

先说WM_INSERTITEM和WM_SETITEMTEXT的配合:

// 插入一行
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT;			// 指定pszText域有效 

lvi.iItem = nItem;				// LVM_INSERTITEM消息里, iItem为行号
lvi.pszText = TEXT("Test1");   	// 设置文本
SendMessage(hWndList, LVM_INSERTITEM, 0, (long)&item);          // 分栏1 的文本被设置(第0列)  

// 设置每行第0列以后的列的内容
lvi.iSubItem = 1;       		// 指定要设置的列, 这里的第1列也就是分栏2那一列
lvi.pszText = TEXT("Test2");    // 要设置的文本
SendMessage(hWndList, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);   // nItem为行号,设置第1列  

下面是WM_INSERTITEM和WM_SETITEM的配合:

// 插入一行
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT;          	// 指定pszText域有效

lvi.iItem = nItem;				// LVM_INSERTITEM消息里, iItem为行号
lvi.pszText = NULL;    			// 设置文本
int nLine = SendMessage(hWndList, LVM_INSERTITEM, 0, (long)&lvi);   // 这样子是添加一个空行,每行的所有列的内容为空 

// 设置行中每列的值
lvi.iItem = nItem;      		// 行号
lvi.iSubItem = 0;       		// 列号,从0开始
lvi.pszText = TEXT("Test1");    // 要设置的文本
SendMessage(hWndList, LVM_SETITEM, 0, (LPARAM)&lvi);    // 设置lvi.iItem行第lvi.iSubItem列的内容

lvi.iItem = nItem;      		// 行号
lvi.iSubItem = 1;       		// 列号
lvi.pszText = TEXT("Test2");    // 要设置的文本
SendMessage(hWndList, LVM_SETITEM, 0, (LPARAM)&lvi);  

处理消息也是在WM_NOTIFY中,参数同Tab,(NMHDR *)lParam)->code指向一些消息,如NM_RCLICK是右击ListView控件

时间: 2024-09-11 09:35:04

Tab Control And List Control使用小记的相关文章

Control.Refresh Control.Invalidate 和 Control.OnPaint之间的联系和区别

1.Control.Invalidate会放一个WM_PAINT消息到消息队列,当Control处理到该消息的时候,就调用OnPaint. 2.Control.Refresh相当于以下两行:Control.Invalidate(true);Control.Update(); 3.Control.Update会搜索消息队列,如果找到WM_PAINT,就把它取出,'直接'调用OnPaint. 因此,Invalidate告诉系统当前窗口要求重画,但不要求立即执行,那些排在WM_PAINT前面的消息会先

WinForm中Component Class、User Control及Custom Control的区别和使用建议

reference: http://blog.csdn.net/redstonehe/article/details/1536549 .NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功能.确定创建何种类型的控件可能会费一番功夫.本节重点介绍了各类可继承控件间的区别,同时提供关系到为项目选择的类型的注意事项. 1. Component Class Component Class

WinForm中Component Class、User Control及Custom Control的区别和使用-转

转http://www.cnblogs.com/jhtchina/archive/2010/11/28/1028591.html NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功 能.确定创建何种类型的控件可能会费一番功夫.本节重点介绍了各类可继承控件间的区别,同时提供关系到为项目选择的类型的注意事项. 1. Component Class Component Class可以

WinForm中Component Class、User Control及Custom Control的区别和使用

NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功 能.确定创建何种类型的控件可能会费一番功夫.本节重点介绍了各类可继承控件间的区别,同时提供关系到为项目选择的类型的注意事项. 1. Component Class Component Class可以从任何现有的 Windows 窗体控件继承产生新的控件.此方法使您得以保留 Windows 窗体控件所有固有功能,然后通过添加自定

VS中Component Class、User Control及Custom Control的区别 .

.NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功能.确定创建何种类型的控件可能会费一番功夫.本节重点介绍了各类可继承控件间的区别,同时提供关系到为项目选择的类型的注意事项. 1. Component Class Component Class可以从任何现有的 Windows 窗体控件继承产生新的控件.此方法使您得以保留 Windows 窗体控件所有固有功能,然后通过添加自定

A Complete ActiveX Web Control Tutorial

? Introduction ActiveX is a Microsoft technology developed in the mid 90's, that allows for the creation of applet-like applications that can be downloaded and run within Microsoft's Web browser. This article is intended for Visual C++ developers who

System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

#region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll #endregion using System.Collections; using System.ComponentModel; using Syst

Overview of Form Control Types [AX 2012]

Overview of Form Control Types [AX 2012] Other Versions 0 out of 1 rated this helpful - Rate this topic Updated: October 11, 2011 Applies To: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2, Microsoft Dynamics AX 2012 Feature Pack, Micro

ImageBox Control with Zoom/Pan Capability

Download source files - 10.8 Kb Download demo project - 6.81 Kb Introduction This control extends the capability of an ImageBox by including scrollbars to pan the image and a method for zooming the size of the image. My goal here is to show you two t