VC通用控件编程之CImageList控件
VC MFC列表框(CListBox)控件

列表框控件简单应用重复性的过程我就不详细讲明了,只给出类里面函数的解释。
int CListBox::AddString( LPCTSTR lpszItem );//添加一个项,lpszItem是项文本内容int CListBox::InsertString( int nIndex, LPCTSTR lpszItem );//同上,只不过这个可以指定项位置(索引),由参数nIndex指定int CListBox::GetCurSel( ) const;//获取当前选中项的索引,函数返回索引值int CListBox::GetText( int nIndex,CString &rString ) const;//根据索引获得项文本int CListBox::GetCount( ) const;//获取项数量void CListBox::ResetContent( );//删除列表框所有的项int CListBox::DeleteString( UINT nIndex );//根据项索引从列表框删除一个项int CListBox::SetItemHeight( int nIndex, UINT cyItemHeight );//设置一个项的高度,注意:列表框具有//LBS_OWNERDRAWVARIABLE风格才可以单独设置一个项的高度,否则是所有项的高度自绘列表框这里自绘要达到的效果,就是简单模仿一下QQ界面里类似列表框控件的那种效果,先往对话框里添加列表框控件.然后再改一下列表框的属性,所有者绘制项选择固定,有字符串前面打上勾.接着准备两张位图,一张用于列表框的背景,一张用于项选中时的背景,ID号分别为:IDB_BK、IDB_SELECTED如下两张位图:再导入五张位图(QQ头像),ID号保持默认不变。
从CListBox派生出子类CNewListBox,往CNewListBox添加一个函数,用于画位图,函数如下:void CNewListBox::DrawBK(CDC *pDC, CRect rect, UINT uIDBK){CDC memDC;memDC.CreateCompatibleDC(pDC);//兼容DCCBitmap bmp;bmp.LoadBitmap(uIDBK);//加载位图BITMAP bmpInfo;bmp.GetBitmap(&bmpInfo);//获取位图信息memDC.SelectObject(&bmp);//选入位图pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);bmp.DeleteObject();memDC.DeleteDC();}然后给CNewListBox添加WM_ERASEBKGND消息处理函数,这个消息是系统擦除背景时产生。
CImageList的用法

VC通用控件编程之CImageList控件图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。
可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。
(一)图像控制的对象结构1、图像控制的数据成员m_hImageList 连接图像对象的控制句柄2、图像控制的建立方法CimageList&imageList建立图像控制对象结构Create 初始化图像列表并绑定对象图像控制的建立方法如下:BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask ); BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2 ,int nImage2,int dx, int dy );其中各项参数的含义为:cx定义图像的宽度,单位为象素;cy定义图象的高度,单位为象素;nFlags确定建立图像列表的类型,可以是以下值的组合:ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用来确定图像列表包含的图像数量;nGrow用来确定图像列表可控制的图像数量。
VCMFC之ListCtrl控件使用经验总结(转)

VCMFC之ListCtrl控件使用经验总结(转)以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的一些宏。
如ListView_InsertColumn--------------------------------------------------------------------------------1. CListCtrl 风格LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”--------------------------------------------------------------------------------2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示方式位lStyle |= LVS_REPORT; //设置styleSetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置styleDWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件m_list.SetExtendedStyle(dwStyle); //设置扩展风格注:listview的style请查阅msdn/library/default.asp?url=/library/ en-us/wceshellui5/html/wce50lrflistviewstyles.asp--------------------------------------------------------------------------------3. 插入数据m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );int nRow = m_list.InsertItem(0, “11”);//插入行m_list.SetItemText(nRow, 1, “jacky”);//设置数据--------------------------------------------------------------------------------4. 一直选中item选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS--------------------------------------------------------------------------------5. 选中和取消选中一行int nIndex = 0;//选中m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);//取消选中m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);--------------------------------------------------------------------------------6. 得到listctrl中所有行的checkbox的状态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i)){str.Format(_T("第%d行的checkbox为选中状态"), i);AfxMessageBox(str);}}--------------------------------------------------------------------------------7. 得到listctrl中所有选中行的序号方法一:CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ) {str.Format(_T("选中了第%d行"), i);AfxMessageBox(str);}}方法二:POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos == NULL)TRACE0("No items were selected!\n");else{while (pos){int nItem = m_list.GetNextSelectedItem(pos);TRACE1("Item %d was selected!\n", nItem);// you could do your own processing on nItem here}}--------------------------------------------------------------------------------8. 得到item的信息TCHAR szBuf[1024];LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;hTextMax = 1024;m_list.GetItem(&lvi);关于得到设置item的状态,还可以参考msdn文章Q173242: Use Masks to Set/Get Item States in CListCtrl/kb/173242/en-us--------------------------------------------------------------------------------9. 得到listctrl的所有列的header字符串内容LVCOLUMN lvcol;char str[256];int nColNum;CString strColumnName[4];//假如有4列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;hTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)){strColumnName[nColNum] = lvcol.pszText;nColNum++;}--------------------------------------------------------------------------------10. 使listctrl中一项可见,即滚动滚动条m_list.EnsureVisible(i, FALSE);--------------------------------------------------------------------------------11. 得到listctrl列数int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();--------------------------------------------------------------------------------12. 删除所有列方法一:while ( m_list.DeleteColumn (0))因为你删除了第一列后,后面的列会依次向上移动。
CommonDialog控件使用方法

CommonDialog控件使用方法CommonDialog控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。
运行 Windows 帮助引擎时,控件还能够显示帮助。
CommonDialog控件在Visual Basic和 Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。
为了用该控件创建对话框,必须要求Commdlg.dll 在 Microsoft Windows \System 目录下。
为了在应用程序中使用 CommonDialog控件,应将其添加到窗体上并设置属性。
控件显示的对话由控件的方法决定。
运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将 CommonDialog控件显示成一个图标。
此图标的大小不能改变。
CommonDialog控件可以显示如下常用对话框:“打开”“另存为”“颜色”“字体”“打印”要使用 CommonDialog控件1. 若未添加 CommonDialog控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。
在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。
2. 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。
在窗体上绘制 CommonDialog控件时,控件将自动调整大小。
象 Timer控件一样,CommonDialog控件在运行时不可见。
3. 运行时,请适当使用下表所列方法显示需要的对话。
显示“打开”和“另存为”对话框有了“打开”对话框就可指定驱动器、目录、文件扩展名和文件名。
“另存为”对话框在外观上与“打开”对话框相同,只是对话框的标题和文件名是暗淡的。
运行时选定文件并关闭对话框后,可用 FileName 属性获取选定的文件名。
要显示“打开”对话框1. 指定在“文件类型”列表框中显示的文件过滤器列表。
可用下列格式设置 Filter 属性:description1 | filter1 | description2 | filter2...Description 是列表框中显示的字符串——例如,"Text Files (*.txt)"。
mfc中cimagelist(图形列表控件)和ctreectrl(树形列表控件)的简单用法

函数说明Create 创建一个CImageList控件GetImageCount 获取图像的数目GetImageInfo 获取图像信息Add 添加图像到图像列表控件Remove 从列表中删除图像Replace 替换列表中指定的图像例如:CImageList m_imageList;//创建CImageList对象m_imageList.Create(16, 16, ILC_COLOR8, 0, 4);//加载图标m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ROOT));然后该CTreeCtrl了,这是一个树形列表控件,提供了分层级结构显示数据的功能。
这个控件有可视化的界面,可以通过界面编辑器进行创建,只需要拉到界面上即可;同样也可以通过Create函数创建一个树形列表控件,由于这种方法通常不用,这里不再赘言。
另外该控件还有很多树形,如Has Button、Has Line等,可以在界面编辑器的属性中查看并设置。
树形控件有两个非常重要的数据结构:TV_ITEM和TV_INSERTSTRUCT。
前者用来描述一个树节点的信息;后者描述要插入树时所需的信息。
结构如下:typedef struct _TV_ITEM {UINT mask; //结构成员有效性屏蔽位HTREEITEM hItem; //数据项控制句柄UINT state; //数据项状态UINT stateMask; //状态有效性屏蔽位LPSTR pszText; //数据项名称字符串int cchTextMax; //数据项名称的最大长度int iImage; //数据项图标索引号int iSelectedImage; //选中数据项图标索引号int cChildren; //子项标识LPARAM lParam; //程序定义的32位数据TVIF_PARAM} TV_ITEM, FAR *LPTV_ITEM;typedef struct _TV_INSER TSTRUCT{HTREEITEM hParent; //父项控制句柄HTREEITEM hInsertAfter; //插入树项的位置TV_ITEM item; //数据项的结构} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;使用CImageList可以方便的为CTreeCtrl提供图标。
C#2010 ImageList控件

C#2010 ImageList控件
ImageList控件提供一个集合,可以用于存储在窗体的其他控件中使用图像。
可以在图像列表中存储任意大小的图像,但在每个控件中,每个图像的大小必须相同。
对于后面要介绍的ListView控件,则需要两个ImageList控件才能显示大图像和小图像。
ImageList是一个无法在窗体中直接显示的控件。
在将其拖放到窗体上时,它并不会显示于窗体上,而是在窗体的内部以代码的形式存在,并包含所有需要存储的组件。
这个功能可以防止非用户界面组成的控件遮挡窗体设计器。
ImageList控件的位置是固定的,无法由Top等属性更改其坐标。
开发者可以在设计和执行程序时为ImageList控件添加图像。
如果开发者知道在设计期间要显示哪些图像,就可以直接单击该控件Images属性右边的按钮,如图8-10所示。
图8-10 插入ImageList控件
在弹出的【图像集合编辑器】对话框中,开发者可以单击【添加】按钮,在弹出的【打开】对话框中选择图像,将这些图像添加到ImageList控件的集合中,并在右侧的窗格内编辑图像的名称等信息,单击【确定】按钮完成图像添加,如图8-11所示。
图8-11 添加图像到集合中
ImageList控件具有几个独特的属性,与其他控件有所不同,如表8-9所示。
表8-9 ImageList控件的属性。
VCMFC中TREE树控件的使用

VC中树控件的使用树控件可以对数据进行分层显示。
在树控件中,除根节点以外,每个节点都有一个父节点,可以拥有多个兄弟节点和子节点,从而可以是数据以梳妆结构清晰的显示出来。
(树控件图标)一.创建树控件BOOL Create(DWORD dwStyle , const RECT & rect , CWnd * pParentWnd ,UINT nID);dwStyle 控件的风格rect 控件显示区域pParantWnd 父窗口指针nID 命令ID值dwStyle中可以使用以下一些树形控件的专用风格:TVS_HASLINES 在父/子结点之间绘制连线TVS_LINESATROOT 在根/子结点之间绘制连线TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开TVS_EDITLABELS 结点的显示字符可以被编辑TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点TVS_DISABLEDRAGDROP 不允许Drag/DropTVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符树控件通常和图像列表控件一起使用,在树控件中可以显示图像列表中的图标,即为树控件添加图标。
CImageList * SetImageList(CImageList * pImageList , int nImageListType);pImageList 标识图像列表控件指针nImageListType 标识图像列表类型Eg.m_Tree.Create(TVS_LINESATROOT|TVS_HASLINES|TVS_H ASBUTTONS|WS_BORDER);......m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,0);......m_Tree.SetImageList(&m_ImageList , LVSIL_NORMAL); 二.向树控件中插入数据在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄。
VC++ 列表控件(CList) 使用方法 (2)

VC++ 列表控件(CList) 使用方法(2)列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nI D );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用intInsertItem( intnItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn( intnCol, LPCTSTR lpszColumnHeading, intnFormat , intnWidth, i ntnSubItem);可以插入列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC通用控件编程之CImageList控件
图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。
可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。
(一)图像控制的对象结构
1、图像控制的数据成员
m_hImageList 连接图像对象的控制句柄
2、图像控制的建立方法
CimageList&imageList建立图像控制对象结构
Create 初始化图像列表并绑定对象
图像控制的建立方法如下:
BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );
BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2
,int nImage2,int dx, int dy );
其中各项参数的含义为:cx定义图像的宽度,单位为象素;cy定义图象的高度,单位为象素;nFlags 确定建立图像列表的类型,可以是以下值的组合:ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用来确定图像列表包含的图像数量;nGrow用来确定图像列表可控制的图像数量。
NbitmapID 用来确定图像列表联系的位图标志值;crMask表示颜色屏蔽位;
LpszBitmapID 用来确定包含位图资源的标识串;
imagelist1 指向图像列表控制对象的一个指针;nImage1图像列表1中包含的图像数量;imagelist2指向图像列表控制对象的一个指针;nImage2图像列表2中包含的图像数量;dx表示以象素为单位的图像宽度;dy表示以象素为单位的图像高度。
同样,图像控制的建立也包括两个步骤,首先建立图像列表结构,然后建立图像列表控制。
3、图像控制的属性类
图像控制的属性类包括返回m_hImageList.控制句柄GetSafeHandle、取得图像列表中的图像数量GetImageCount、设置图像列表的背景颜色SetBkColor、取得图像列表的背景颜色SetBkColor和取得图像的有关信息SetBkColor。
4、图像控制的操作方法
图像控制的操作方法包括将一个图像列表绑定到一个对象上Attach、将对象上的图像列表解除绑定并返回句柄Detach、删除一个图像列表DeleteImageList、将一个图像增加到图像列表中Add和将一个图像从图像列表中删除Remove等。
(二)图像控制的应用技巧
对于图像控制,同样不能单独使用,必须与列表控制、树控制和标签控制相互结合应用,下面分别介绍其具体应用技巧。
1、图像控制在列表控制中的应用技巧
①设置图像控制CListCtrl::SetImageList的调用格式如下:
CImageList* SetImageList( CImageList* pImageList, int nImageList );
其返回值是指向前一个图像列表控制的一个指针,如果不存在前一个图像列表则为NULL;其中参数pImageList是指向图像列表的标识,nImageList是图像列表的类型,可以是如下值:
LVSIL_NORMAL 用大图标方式进行图像列表;
LVSIL_SMALL 用小图标方式进行图像列表;
LVSIL_STATE 以图像状态进行图像列表;
②取得图像控制CListCtrl::GetImageList的调用格式如下:
CImageList* GetImageList( int nImageList ) const;
其返回值为指向图像列表控制的指针,其中nImageList用来确定取得返回值的图像列表的值,其取值与设置图像列表函数相同。
③图像控制在列表控制中的应用示例
CImageList Cil1,Cil2; //定义大小图标像列表
CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//取得列表控制程序
Cil1.Create(32,32,TRUE,2,2); //建立32位图像控制
Cil1.Add(pApp->LoadIcon(IDI_GJ));//增加选中状态图像
Cil1.Add(pApp->LoadIcon(IDI_XS));//增加非选中状态图像
Cil2.Create(16,16,TRUE,2,2); //建立16位图像控制
Cil2.Add(pApp->LoadIcon(IDI_GJ));//增加选中状态图像
Cil2.Add(pApp->LoadIcon(IDI_XS));//增加非选中状态图像
m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);//设置大图标控制
m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//设置小图标控制
2、图像控制在树控制中的应用技巧
①设置图像控制CTreeCtrl::SetImageList的调用格式如下:
CImageList* SetImageList( CImageList * pImageList, int nImageListType );
其返回值为指向前前一个图像列表的指针,否则为NULL;参数pImageList为指向图像列表的标识,如果pImageList为NULL则所有的图像都将从树控制中被清除;nImageListType为图像列表设置的类型,可以是如下值之一:
TVSIL_NORMAL 设置正常图像列表,其中包括选中和非选中两种图标;
TVSIL_STATE 设置图像列表状态,指用户自定义状态;
②取得图像控制CTreeCtrl::GetImageList的调用格式如下:
CImageList* GetImageList( UINT nImage );
如果调用成功则返回图像列表控制指针,否则为NULL;nImage为取得返回值的图像列表类型,其取值和取得图像列表控制完全相同。
③图像控制在树控制中的应用示例
CImageList Cil1,Cil2;//定义大小图标像列表
CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();//获取应用程序指针
Cil1.Create(16,16,ILC_COLOR,2,2);//建立图像控制
Cil1.Add(pApp->LoadIcon(IDI_PM));//增加选中状态图像
Cil1.Add(pApp->LoadIcon(IDI_CJ));//增加非选中状态图像
m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);//设置图像控制列表
然后在树控制的结构定义中进行如下设置:
TCItem.item.iImage=0; //设置未选中图像索引号
TCItem.item.iSelectedImage=1;//设置选中时图像引号
3、图像控制在标签控制中的应用技巧
①设置图像控制CTabCtrl::SetImageList的调用格式
CImageList * SetImageList( CImageList * pImageList );
其返回值为指向前一个图像列表的指针,如果不存在前一个图像列表则为NULL;pImageList为标识TAB控制的图像列表指针。
②取得图像控制CTabCtrl::GetImageList的调用格式
HIMAGELIST GetImageList() const;
其返回值为指向TAB控制的图像列表指针,如果调用不成功则为NULL。
其应用技巧较前两种更加简单,这里不再赘述。