搜档网
当前位置:搜档网 › 通用控件使用祥解

通用控件使用祥解

通用控件使用祥解
通用控件使用祥解

PWIN98/95下演练VC5中的COMMON一族

辽宁省铁岭市委办公室(112000)宋立波

中文PWIN98/95之所以深受广大计算机用户的青睐,除其在32位多任务、多线程和系统稳固性等核心技术的重要改进之外,更主要的还是其优秀的用户交互界面。这就给程序设计人员提出了新的课题,如何在自己开发的应用程序中充分利用WIN98/95支持的各种高级通用控制和视,这也是学习VC编程所必须掌握的基本内容,本文将通过实例来具体演练VC5中的这些控件,其中常用的COMMON一族主要成员包括:

1.表头控制 Header Control

2.图像列表控制 Image List

3.列表控制和视 List Control&List View

4.树控制和视 Tree Control&Tree View

5.标签控制和视 Tab Control&Tab View

6.工具条控制 Toolbar Control

7.进度条控制 Progress Control

8.滑动条控制 Slider Control

9.旋转按钮控制 Spin Button Control

10.状态条控制 Status Bar Control

其中,绝大部分通用控制在MFC类库中都存在两种封装形式,即控制类和视类,控制类主要是供直接使用控制而提供的,而视类则是通过间接使用控制而提供的,视类可以更好地把控制类集成到MFC结构中,并且使用视类可以利用引用直接对嵌套在其中的控制进行各种操作。两者在使用方法上没有太大区别,就拿列表控制类和视类来说,当创建列表视后可通过CListCtrl& ctrlList = GetListCtrl()成员函数取得视类引用ctrlList之后,就可以利用列表视的视函数对视进行各项操作(ctrlList.Add等)。

一、PWIN98/95下演练CHeadCtrl

表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。表头控制类提供了普通表头控制的基本方法,只有在WINDOWS95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(CTabCtrl)和列表控制(CListCtrl)组合使用。

(一)表头控制的对象结构

1、表头控制对象的建立方法

CHeaderCtrl &cheaderCtrl 建立表头控制对象

Create 建立表头并绑定对象

CHeaderCtrl::Create的格式如下:BOOL Create( DWORD dwStyle, const RECT&

rect, CWnd* pParentWnd, UINT nID );

其返回值非零时初始化成功,否则失败。

参数dwStyle用来确定表头控制类型;rect用来确定表头控制的大小和位置;ParentWnd用来确定表头控制的父窗口;nID用来表示表头控制的标志。

表头控制风格包括:

HDS_BUTTONS 表示表头控制外观类似按钮;

HDS_HORZ 表示表头控制为水平排列;

HDS_VERT 表示表头控制为垂直排列;

HDS_HIDDEN 表示表头控制为隐藏模式。

它也可以使用普通类控制风格,包括:

CCS_BOTTOM 设置控制位置在父窗口的底部并与父窗口同样宽度;

CCS_NODIVIDER 在控制顶部形成两个像素的高亮区;

CCS_NOHILITE 在控制顶部形成一个像素的高亮区;

CCS_NOMOVEY 在响应WM_SIZE消息时重置大小并水平排列;

CCS_NOPARENTALIGN 使控制自动靠近父窗口的顶部或底部;

CCS_NORESIZE 设置初始大小或新值时使控制使用默认宽度和高度;

CCS_TOP 设置在父窗口客户区域的顶部并与父窗口同样宽度;

同样表头控制也可以使用窗口控制风格,包括:

WS_CHILD 建立一个子窗口,不能用于WS_POPUP窗口类型;

WS_VISIBLE 建立一个初始时不可见的窗口;

WS_DISABLED 建立一个初始时无效的窗口;

WS_GROUP 确定可用光标移动的控制群组;

WS_TABSTOP 确定可用TAB控制移动站点;

表头控制一般分为两个步骤,首先确定表头控制的数据结构,然后建立表头控制并绑定对象。

2、表头控制的属性

表头控制的属性包括取得表头控制中项目的数量GetItemCount、取得表头控制中某一项目的内容GetItem和设置表头控制中某一项目的内容SetItem。

3、表头控制的操作方法

表头控制的操作方法包括向表头控制中插入一个新项目InsertItem、从表头控制中删除一个项目DeleteItem和绘制表头中给定的项目DrawItem等。

(二)表头控制的数据结构

在使用表头控制时,首先必须建立一个数据结构HD_ITEM,其结构定义如下:

typedef struct _HD_ITEM

{ UINT mask; //结构成员有效控制位

int cxy; //表头项目的宽度

LPSTR pszText; //表头项目内容

HBITMAP hbm; //表头项目的位置句柄

int cchTextMax; //表头内容字符串长度

int fmt; //表头项目的格式

LPARAM lParam; //应用程序定义的32位数据

} HD_ITEM;

屏蔽控制位说明了数据结构成员中包含的有效数据,可以是下面标志的组合:

HDI_BITMAP hbm成员有效

HDI_FORMAT fmt 成员有效

HDI_LPARAM lParam成员有效

HDI_TEXT pszText 和cchTextMax 成员有效

HDI_WIDTH cxy 成员有效并确定项目宽度值

格式标志位fmt可以是以下标志的组合:

HDF_CENTER 表头项目居中

HDF_LEFT 表头项目左对齐

HDF_RIGHT 表头项目右对齐

HDF_BITMAP 表头显示一个位图

HDF_OWNERDRAW 由主窗口自绘表头项目

HDF_STRING 表头项目为一个字符串

(三)表头控制的应用技巧

由于表头控制无法单独使用,其主要是配合列表控制和标签控制,并多以文字表头应用多见,InsertItem、SetItem和GetItem是常用的方法,如在列表控制时利用InsertColumn属性就可以增加一个表列的文本标题,具体用法和技巧见列表控制和标签控制。下面以在列表控制中的增加表列的方法来具体说明:

lvcol.pszText="品 名";//设置第一列表头名

lvcol.iSubItem=i; //表列序号

lvcol.cx=70; //表列宽度

m_ListCtrl.InsertColumn(i++,&lvcol);//插入一个表列

lvcol.pszText="数 量";//设置第二列表头名

lvcol.iSubItem=i;

lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);//插入一个表列

......//其它代码

二、PWIN98/95下演练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。

其应用技巧较前两种更加简单,这里不再赘述。

三、PWIN98/95下演练CList

(一)列表控制的主要功能

列表控制和视(List Control&View)主要用来以各种方式显示一组数据记录供用户进行各种操作,Windows98/95中资源管理器中的“查看”标签下的“大图标|小图标|列表|详细资源”就是一个非常好的典型应用。列表中的记录可以包括多个数据项,也可以包括表示数据内容的大小图标,用来表示数据记录的各种属性。

列表控制提供了对Windows列表功能操作的基本方法,而使用列表视的视函数可以对列表视进行各种操作,通过调用视成员GetListCtrl获取嵌在列表

视内列表控制的引用(GetListCtrl& ctrlList = GetListCtrl()),就可以和列表控制一样进行各种操作。操作一个列表控制和视的基本方法为:创建列表控制;创建列表控制所需要的图像列表;向列表控制添加表列和表项;对列表进行各种控制,主要包括查找、排序、删除、显示方式、排列方式以及各种消息处理功能等;最后撤消列表控制。

对于一个列表控制,其最典型最常用的显示控制方式为:大图标方式(LVS_ICON)、小图标方式(LVS_SMALLICON)、列表显示方式(LVS_LIST)和详细资料(即报告LVS_REPORT)显示方式。这可以通过设置其显示方式属性来实现。要控制列表所在窗口的风格,可通过功能函数GetWindowLong和SetWindowLong来实现,要控制列表图标的对齐方式,可通过设置列表窗口的风格LVS_ALIGNTOP或LVS_ALIGNLEFT来实现,

(二)列表控制的对象结构

1、列表控制的建立方法

CListCtrl&listCtrl 定义列表对象的结构

Create 建立列表控制并绑定对象

列表控制CListCtrl::Create的调用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中参数dwStyle用来确定列表控制的风格;rect用来确定列表控制的大小和位置;pParentWnd用来确定列表控制的父窗口,通常是一个对话框;nID 用来确定列表控制的标识。其中列表控制的风格可以是下列值的组合: LVS_ALIGNLEFT 用来确定表项的大小图标以左对齐方式显示;

LVS_ALIGNTOP 用来确定表项的大小图标以顶对齐方式显示;

LVS_AUTOARRANGE 用来确定表项的大小图标以自动排列方式显示;

LVS_EDITLABELS 设置表项文本可以编辑,父窗口必须设有LVN_ENDLABELEDIT风格;

LVS_ICON 用来确定大图标的显示方式;

LVS_LIST 用来确定列表方式显示;

LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头;

LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项;

LVS_NOSCROLL 用来屏蔽滚动条;

LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能;

LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口;

LVS_REPORT 用来确定以详细资料即报告方式显示;

LVS_SHAREIMAGELISTS用来确定共享图像列表方式;

LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式;

LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中;

LVS_SMALLICON 用来确定小图标显示方式;

LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式;

LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式;

2、列表控制的属性类

列表控制的属性类包括取得列表控制的背景色GetBkColor、设置列表控制的背景色SetBkColor、取得列表控制的图像列表GetImageList、设置列表控制的图像列表SetImageList、取得列表项数目GetItemCount、取得列表控制的属性GetItem、取得与表项相关的数据GetItemData、设置表项的属性SetItem、设置与表项相关的数值SetItemData、取得相关联的下一个表项GetNextItem、设置列表控制的文本颜色SetTextColor、取得列表控制的文本背景颜色GetTextBkColor、设置表项的最大数目SetItemCount和取得被选中表项的数目GetSelectedCount等。

3、列表控制的操作方法

列表控制的操作方法包括插入一个新的表项InsertItem、删除一个表项DeleteItem、排序表项SortItems、测试列表的位置HitTest、重绘表项RedrawItems、插入一个表列InsertColumn、删除一个表列DeleteColumn、编辑一个表项文本EditLabel和重绘一个表项DrawItem等。

(三)列表控制的数据结构

列表控制中包含两个非常重要的数据结构LV_ITEM和LV_COLUMN。LV_ITEM 用于定义列表控制的一个表项,LV_COLUMN用于定义列表控制的一个表列,其定义格式分别为:

typedef struct _LV_ITEM {

UINT mask; //结构成员屏蔽位

int iItem; //表项索引号

int iSubItem; //子表项索引号

UINT state; //表项状态

UINT stateMask; //状态有效性屏蔽位

LPTSTR pszText; //表项名文本

int cchTextMax; //表项名最大长度

int iImage; // 表项图标的索引号

LPARAM lParam; // 与表项相关的32位数

} LV_ITEM;

typedef struct _LV_COLUMN {

UINT mask; //结构成员有效性屏蔽位

int fmt; //表列对齐方式

int cx; //表列的象素宽度

LPTSTR pszText; //表列的表头名

int cchTextMax; //表列名的文本长度

int iSubItem; //与表列关联的子表项索引号

} LV_COLUMN;

其中fmt可以取如下值:

LVCFMT_CENTER 表列居中对齐

LVCFMT_LEFT 表列左对齐

(四)列表控制的应用技巧示例

本文给出具体实例演示列表控制及前面的表头控制和图像列表的应用技巧。步骤如下:

1、通过“FILE->NEW->PROJECTS->MFC AppWizard(EXE)”建立名为VCLIST 的工程,在建立过程中选择基于对话框(Dialog based)的应用;将对话框中的默认控件删除,并将所有对话框属性中的Language域设置为Chinese(P.R.C.),以使应用程序支持中文;

2、建立两个图标IDI_GJ和IDI_XS,用来表示图标的选中和非选中状态,对于每个图标都应建立32X32和16X16两种大小,以保证程序的需要;

3、在对话框窗口中设计组合框(Group Box),组合框中设置四个无线按钮(Radio)“大图标|小图标|列表|资料”,同时设置排序、删除和关闭三个控制按钮(Button),并在对话框中设置大小合适的列表控制(List Ctrl),其对应标识分别如下:

控制名称 标题名称 标识符号

列表控制 IDC_LISTCTRL

组合框 方式 IDC_STATIC

无线按钮 大图标 IDC_STDICON

小图标 IDC_SMLICON

列 表 IDC_LIST

资 料 IDC_REPORT

按钮 排 序 IDC_SORT

删 除 IDC_DEL

关 闭 IDOK

4、在设置无线按钮时,需要注意的是只有大图标的Group属性为选中状态,而其它无线按钮的状态均为默认值。

5、选中列表控制控件,选择“VIEW->ClassWizard->Memory Variables”,并利用IDC_ LISTCTRL引入成员变量,其变量类型为:

变量名 种类 变量类型

m_ListCtrl Control ClistCtrl

同时利用“MESSAGES MAP”为各无线按钮和命令按钮增加控制功能。

6、然后在包含文件和代码文件中分别加入如下代码:

(1)在VCLISTDlg.h中增加数据结构和定义

typedef struct tagSPS { //定义结构

char szPm[10]; //品名

int Lx; //0-GJ 1-XS

char szSl[10]; //数量

char szDj[10]; //单价

char szJe[10]; //金额

} SPS;

int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);

(2)在VCLISTDlg.CPP中的起始处增加初始化数据和程序定义

//在文件开始处增加数据结构初始化

SPS Sps[]={//信息

{"红梅",0,"1000","30","30000"},

{"黄梅",0,"1000","29","29000"},

{"绿梅",0,"1000","28","28000"},

{"青梅",0,"1000","27","27000"},

{"白梅",0,"1000","31","31000"},

{"红梅",1,"1000","30","30000"},

{"黄梅",1,"1000","29","29000"},

{"绿梅",1,"1000","28","28000"},

{"青梅",1,"1000","27","27000"},

{"白梅",1,"1000","31","31000"}};

CImageList Cil1,Cil2;//大小图像列表

(3)在程序初始化处增加表头、图像和列表控制建立代码

BOOL CVCLISTDlg::OnInitDialog()

{CDialog::OnInitDialog();

//......//其它代码

// TODO: Add extra initialization here此处增加代码

LV_ITEM lvitem;

LV_COLUMN lvcol;

int i,iPos,iItemNum;

CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//创建图象列表

Cil1.Create(32,32,TRUE,2,2);

Cil1.Add(pApp->LoadIcon(IDI_GJ));

Cil1.Add(pApp->LoadIcon(IDI_XS));

Cil2.Create(16,16,TRUE,2,2);

Cil2.Add(pApp->LoadIcon(IDI_GJ));

Cil2.Add(pApp->LoadIcon(IDI_XS));//设置图象列表

m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);

m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//向列表控制中添加表列

lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;

lvcol.fmt=LVCFMT_CENTER;//居中

i=0;

lvcol.pszText="品 名";

lvcol.iSubItem=i;

lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);

lvcol.pszText="数 量";

lvcol.iSubItem=i;

lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);

lvcol.pszText="单 价";

lvcol.iSubItem=i;

lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);

lvcol.pszText="金 额";

lvcol.iSubItem=i;

lvcol.cx=70;

m_ListCtrl.InsertColumn(i++,&lvcol);

//向列表控制中添加表项

iItemNum=sizeof(Sps)/sizeof(SPS);

for(i=0;i

lvitem.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;

lvitem.iItem=i;

lvitem.iSubItem=0;

lvitem.pszText=Sps[i].szPm;

lvitem.iImage=Sps[i].Lx;

lvitem.lParam=i;

iPos=m_ListCtrl.InsertItem(&lvitem);//返回表项插入后的索引号 lvitem.mask=LVIF_TEXT;

lvitem.iItem=iPos;

lvitem.iSubItem=1;

lvitem.pszText=Sps[i].szSl;

m_ListCtrl.SetItem(&lvitem);

lvitem.iSubItem=2;

lvitem.pszText=Sps[i].szDj;

m_ListCtrl.SetItem(&lvitem);

lvitem.iSubItem=3;

lvitem.pszText=Sps[i].szJe;

m_ListCtrl.SetItem(&lvitem);

}

CheckRadioButton(IDC_STDICON,IDC_REPORT,IDC_STDICON);

return TRUE; // return TRUE unless you set the focus to a control }

(4)完善列表显示方式代码

在利用Classwizard类向导创建各功能按钮显示功能函数之后,必须依次完善这些功能函数的代码,这些功能函数如下:

void CVCLISTDlg::OnStdicon()//设置大图标显示方式

{ // TODO: Add your control notification handler code here

LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型

lStyle&=~LVS_TYPEMASK; //清除显示方式位

lStyle|=LVS_ICON; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型

}

void CVCLISTDlg::OnSmlicon() //设置小图标显示方式

{ // TODO: Add your control notification handler code here

LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型

lStyle&=~LVS_TYPEMASK; //清除显示方式位

lStyle|=LVS_SMALLICON; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型

}

void CVCLISTDlg::OnList() //设置列表显示方式

{ // TODO: Add your control notification handler code here

LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型

lStyle&=~LVS_TYPEMASK; //清除显示方式位

lStyle|=LVS_LIST; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型

}

void CVCLISTDlg::OnReport() //详细资料显示方式

{ // TODO: Add your control notification handler code here

LONG lStyle;

lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型

lStyle&=~LVS_TYPEMASK; //清除显示方式位

lStyle|=LVS_REPORT; //设置显示方式

SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型

}

(5)删除功能的实现

要实现删除功能,必须取得选中表项的数和表项总数,并且需要从后向前进行依次删除,其原因是每个表项被删除后,其后各表项的索引号均会发生递减变化,如果采取从前向后删除的方法,就会造成无法正常删除选中的表项,其功能代码如下:

void CVCLISTDlg::OnDel() //删除按钮功能

{ // TODO: Add your control notification handler code here

int i,iState;

int nItemSelected=m_ListCtrl.GetSelectedCount();//所选表项数

int nItemCount=m_ListCtrl.GetItemCount();//表项总数

if(nItemSelected<1) return;

for(i=nItemCount-1;i>=0;i--){

iState=m_ListCtrl.GetItemState(i,LVIS_SELECTED);

if(iState!=0) m_ListCtrl.DeleteItem(i);

}

}

(6)排序功能的实现

列表控制有一个特殊的功能,当以详细资料方式显示时,列表顶部的表头可以当作按钮来使用,这可以通过列表控制创建时的风格来控制。当鼠标点

击列表头名称时,列表控制就会向其父窗口发送一个LNV_COLUMNCLICK消息,利用类导向中列表控制IDC_LISTCTRL对应的LNV_COLUMNCLICK消息加入相应处理函数,就可将表列按照特定顺序进行排列。其函数使用方法见程序,其中iSort为排序的表列索引号,(PFNLVCOMPARE)CompareFunc为进行具体排序的回调函数,也就是说,通过鼠标点击表头实现的排序过程是由第三方开发的专用排序函数来实现的,排序函数只是实现表项的具体比较操作,而整个排序过程是由SortItemS属性通过不断调用这个函数来实现的。正常的排序过程是升序方式,通过调换排序函数中的参数值,就可实现降序排列,即将PARAM1与PARAM2调换位置。这个回调函数的前两个参数为表列中表项的索引号,第三个参数为排序的表列索引号。

void CVCLISTDlg::OnColumnclickListctrl(NMHDR* pNMHDR, LRESULT* pResult)

{ //鼠标左键单击表头处理函数

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

// TODO: Add your control notification handler code here

static int iSorted=-1;//排列序号

if (pNMListView->iSubItem==iSorted) return;

iSorted=pNMListView->iSubItem;

m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);

*pResult = 0;

}

//排序时比较表项的回调函数

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort)

{ char *text1,*text2;

switch (lParamSort){

case 0L:text1=Sps[lParam1].szPm;

text2=Sps[lParam2].szPm;break;

case 1L:text1=Sps[lParam1].szSl;

text2=Sps[lParam2].szSl;break;

case 2L:text1=Sps[lParam1].szDj;

text2=Sps[lParam2].szDj;break;

case 3L:text1=Sps[lParam1].szJe;

text2=Sps[lParam2].szJe;break;

}

return (strcmp(text1,text2));//结果为>0 =0 <0

}

同样,也可以通过专用按钮来实现排序功能,如本文的排序按钮对应的功能代码如下:

void CVCLISTDlg::OnSort()

{ // TODO: Add your control notification handler code here m_ListCtrl.SortItems((PFNLVCOMPARE)CompareFunc,0);}

7、列表视的演练技巧

在使用列表视时,其方法与列表控制基本相同,只不过列表视是在窗口中来实现的而列表控制是在对话框中实现,列表视的各种功能是通过菜单来实现的而列表控制是通过按钮等方式来实现的,列表控制需要在对话框中创建列表控制控件而列表视直接占据整个窗口,在设计过程中只要将按钮和列表控制设计过程变为菜单设计,并注意在功能增加是在类向导中是通过菜单命令来操作,同时在每个功能函数前面增加取得列表视引用的命令( CListCtrl& ListCtrl = GetListCtrl()),而其余数据结构和代码均不需要修改,实现起来比较容易。

笔者实现的列表控制和视程序的运行结果如下:

列表控制演练示例结果

列表视演练示例结果

四、PWIN98/95下演练CTree

(一)树控制的主要功能

树控制和视(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。树控制中的每个数据项包括数据项名称的文本字符串和用于表示该数据项的图像,每个数据项下面均可包含各种子项,整个结构就象目录树一样。对于包含各种子项的数据项,可通过鼠标双击来展开或合拢,这可以通过控制树的不同风格来实现树控制的不同显示形态。这些风格主要包括:

TVS_HASLINES表示用连线来连接父项和它下面的各个子项,这可以使树的显示层次结构更加清晰,但在无父项的各子项之间并没有连线;

TVS_LINESATROOT表示在无父项的各子项即根下面的各子项之间存在连线;

TVS_HASBUTTONS表示在带有子项的父项前面增加一个带“+”或“-”的按钮,这使得用户也可以通过单击这个小按钮来实现子项的展开和合拢,当存在子项时,按钮的初始状态为“+”,当子项被展开时,按小按钮由“+”变为“-”号,当子项合拢时,小按钮由“-”变为“+”号,这一风格同样对于根项无效,如果需要可通过组合TVS_LINESATROOT风格来实现;

TVS_EDITLABELS表示允许让用户单击具有输入焦点的数据项来修改其名称。

对于树控制,MFC中也以两种形式来封装,即树控制(CTREECTRL)和树视(CTREEVIEW),来满足用户的不同需求,对于一般要求的用户如在对话框中应用,使用树控制比较方便,而对于具有较高要求的用户,在使用树视时还具有视窗口的各种方便特性,可以更好地满足文档/视结构的要求。当在窗口中使用树视时,树视会占满两个窗口的客户区域并自动随窗口的框架结构的调整而调整,并能够很好地处理诸如菜单、加速键和工具条中的各种命令消息。

在使用树视时只要利用其成员函数CtreeView取得其一个引用,就可以象树控制一样方便地应用:CtreeCtrl &treeCtrl = GetTreeCtrl()。

(二)树控制的对象结构

1、树控制的建立方法

CtreeCtrl&treeCtrl 建立树控制对象结构

Create 建立树控制并绑定对象

树控制CTreeCtrl::Create的调用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中参数dwStyle用来确定树控制的类型;rect用来确定树控制的大小和位置;pParentWnd用来确定树控制的父窗口,通用是一个对话框并且不能为NULL;nID用来确定树控制的标识。树控制的风格可以是下列值的组合: TVS_HASLINES 表示树控制在各子项之间存在连线;

TVS_LINESATROOT 表示树控制在根项之间存在连线;

TVS_HASBUTTONS 表示树控制视在父项左侧存在展开合拢控制按钮;

TVS_EDITLABELS 表示可以控制鼠标单击修改树项的名称;

TVS_SHOWSELALWAYS 表示选中项即使在窗口失去输入焦点时仍然保持选中状态;

TVS_DISABLEDRAGDROP表示禁止树控制发送TVN_BEGINDRAG消息

2、树控制的属性类

树控制属性类包括取得树控制中项数GetCount、取得树控制中项相对于父项的偏移值GetIndent、取得树控制图像列表控制句柄GetImageList、设置树控制图像列表控制句柄SetImageList、取得匹配下一个树项GetNextItem、判断给定树项是否包含子项ItemHasChildren、取得树项子项GetChildItem、取得下一个同属树项GetNextSiblingItem、取得前一个同属树项GetPrevSiblingItem、取得父树项GetParentItem、取得第一个可视树项GetFirstVisibleItem、取得下一个可视树项GetNextVisible Item、取得前一个可视的树项GetPrevVisibleItem、取得被选中的树项GetSelectedItem、取得根树项GetRootItem、取得树项的属性GetItem、设置树项的属性SetItem、取得树项的状态GetItemState、设置树项的状态SetItemState、取得与树项关联图像GetItemImage、设置与树项关联图像SetItemImage、取得树项文本GetItemText、设置树项文本SetItemText和取得树项编辑控制句柄GetEditControl等。

3、树控制的操作方法

树控制的操作方法包括插入一个树项InsertItem、删除一个树项DeleteItem、删除所有树项DeleteAllItems、展开或合拢树项的子项Expand、选中特定树项SelectItem、选择一个树项作为第一个可视树项

SelectSetFirstVisible、编辑一个可视的树项EditLabel和排序给定父树项的子树项SortChildren等。

(三)树控制的数据结构

在使用树控制时需要了解两个个非常重要的数据结构TV_ITEM和TV_INSERTSTRUCT,前一个数据结构是用来表示树控制的树项信息,后一个数据结构是用来定义将树项增加到数据控制中所需要的数据内容。另外,还需要NM_TREEVIEW、TV_DISPINFO和TV_HITTESTINFO三个数据结构,这几个数据结构的定义方法如下:

①基本数据项结构

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位数据

} TV_ITEM, FAR *LPTV_ITEM;

②插入树项结构

typedef struct _TV_INSER TSTRUCT {

HTREEITEM hParent; //父项控制句柄

HTREEITEM hInsertAfter; //插入树项的位置

TV_ITEM item; //数据项的结构

} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;

其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。

③树控制通知消息结构

typedef struct _NM_TREEVIEW {

NMHDR hdr; //通知消息句柄

UINT action; //通知消息标志

TV_ITEM itemOld; //原来的数据结构

TV_ITEM itemNew; //新的数据结构

POINT ptDrag; //拖动指针

} NM_TREEVIEW;

④取得或设置数据结构

typedef struct _TV_DISPINFO { tvdi

NMHDR hdr; //通知消息控制句柄

TV_ITEM item; //数据项结构

} TV_DISPINFO;

⑤指针测试数据结构

typedef struct _TVHITTESTINFO { tvhtst

POINT pt; //客户区域屏幕坐标指针

UINT flags; //存放测试结果的变量

HTREEITEM hItem; //测试的数据项结构

} TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;

其中flags测试结果可以是如下值:

TVHT_ABOVE 在客户区域上面

TVHT_BELOW 在客户区域下面

TVHT_NOWHERE 在客户区域中并在最后一项下面

TVHT_ONITEM 在与树项关联的位图或标签内

TVHT_ONITEMBUTTON 在与树项关联的按钮上

TVHT_ONITEMICON 在与树项关联的位图上

TVHT_ONITEMINDENT 在与树项关联的联线上

TVHT_ONITEMLABEL 在与树项关联的标签上

TVHT_ONITEMRIGHT 在树项的右侧区域中

TVHT_ONITEMSTATEICON 在用户定义的状态图标上

TVHT_TOLEFT 在客户区域的左侧

TVHT_TORIGHT 在客户区域的右侧

(四)树控制的应用技巧示例

这里仍以基于对话框演示实例来具体介绍树控制及其和图像列表相结构的应用技巧:

通过“FILE->NEW->PROJECTS->MFC AppWizard(EXE)”建立名为VCTREE的工程,在建立过程中选择基于对话框(Dialog based)的应用;将对话框中的默认控件删除,并将所有对话框属性中的Language域设置为Chinese(P.R.C.),以使应用程序支持中文;建立两个图标IDI_PM和IDI_CJ,用来表示图标的选中和非选中状态,对于每个图标都应建立32X32和16X16两种大小,以保证程序的需要;在对话框窗口中添加树控制对象(TREE CONTROL),并设置五个按钮“增加|删除|查看|排序|关闭”,其对应标识分别如下:

控制名称 标题名称 标识符号

树控制 IDC_TREECTRL

按钮 增 加 IDC_ADD

删 除 IDC_DEL

查 看 IDC_VIEW

排 序 IDC_SORT

关 闭 IDOK

5、选中树控制控件,选择“VIEW->ClassWizard->Memory Variables。 骺刂艻DC_TREECTRL 引入成员变量,其变量类型为: 变量名 种类 变量类型

m_TreeCtrl Control CTreeCtrl

同时利用“MESSAGES MAP”为各命令按钮增加控制功能函数。

6、然后在代码文件VCTREEDlg.CPP中分别加入如下控制代码:

(1)在文件开始处增加图像列表定义

CImageList Cil1,Cil2;//大小图标像列表

(2)在初始化文件开始处增加代码

BOOL CVCTREEDlg::OnInitDialog()

{ CDialog::OnInitDialog();

......//原来其它代码

// TODO: Add extra initialization here

// 此处开始增加代码

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); //设置图象列表

DWORD dwStyles=GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE);//获取树控制原风格

dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINES ATROOT;

SetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE,dwStyles);//设置风格 char * CJ[4]={"玉溪卷烟厂","云南卷烟厂","沈阳卷烟厂","成都卷烟厂"};//根数据名称

char * PM[4][5]={

{"红梅一","红梅二","红梅三","红梅四","红梅五"},//产品数据项

{"白梅一","白梅二","白梅三","白梅四","白梅五"},

{"绿梅一","绿梅二","绿梅三","绿梅四","绿梅五"},

{"青梅一","青梅二","青梅三","青梅四","青梅五"}};

int i,j;

HTREEITEM hRoot,hCur;//树控制项目句柄

6.7 Windows通用对话框

任务六对话框应用程序设计 6.7 Windows通用对话框 Windows通用对话框是由操作系统提供的任何应用程序都可以获得的对话框。在VC++中,对这些对话框进行了封装,使用户在开发程序时可以方便的调用这些对话框。 6.7.1 使用“文件”对话框打开和保存文件 主程序名:FileDialog 1、添加两个按钮控件,一个编辑框控件,两个静态文本控件

2、为控件关联变量 3、编辑“打开”按钮,编辑程序 void CFileDialogDlg::OnOpen() { // TODO: Add your control notification handler code here CFileDialog

dlg(TRUE,NULL,NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd()); CString strPath,strText=""; if(dlg.DoModal() == IDOK) { strPath = dlg.GetPathName(); m_OpenPath.SetWindowText(strPath); CFile file(strPath,CFile::modeRead); char read[10000]; file.Read(read,10000); for(int i=0;i

第六章 对话框控件

学习目标: ?掌握CommonDialog。 ?掌握文件操作相关的对话框。 ?理解打印对话框。 6.1对话框: 对话框是一种用户界面接口,用于同用户进行交互,完成一些特定的任务,简单的对话框有对用户操作进行提示的对话框,对重要操作要求用户进行决定的交互对话框等。 这类任务能被独立出来,作为通用的交互处理过程。这些能被独立出来作为通用交互过程的任务常见如下一些: (1)文件选取。 (2)保存设置。 (3)路径选取。 (4)字体选取。 (5)颜色选取。 (6)打印设置。 (7)打印预览框。 在.NET中这些组件是在https://www.sodocs.net/doc/5079809.html,monDialog的基础上发展而来。

6.1.1Common pialog: CommonDialog是.NET中对话框组件的基础,它是System.Windows.Forms命名空间下的一个抽象类,在程序中不能直接使用。 CommonDialog公开了2个方法和一个属性,即:ShowDialog()/ShowDialog(IWin32Window)方法和Reset()方法以及Tag属性。 ShowDialog是用于显示对话框。ShowDialog()有一个重载形式:ShowDialog(IWin32Window),IWin32Window在这里指一个窗口句柄,在调用中,这个参数应该被赋值成要显示的对话框的父窗体。 注意:句柄是Window中的一个常用词语,可以把它理解为一个标识符号,只是这个标识符号是一个数字。相应的窗口句柄就是窗口的标标识符。 Reset方法: 使用过程中可能改变初始值,当需要让所有的初值回到原来的状态时,调用Reset能达到目的。 Tag属性: Tag没有具体含义,它可以让用户在对话框控件中存储、维护自己的数据。这个数据由用户自己的代码解释。 对话框的返回值(ShowDialog的返回值): 对话框通过调用ShowDialog()调用后,返回一个类型为DialogResult 值,其中DialogResult.OK指出用户成功完成了操作,成功选取了文

在CFileDialog对话框中添加控件

在CFileDialog对话框中添加控件 关键字:CFileDialog扩展类,OFNHookProc 需求描述:昨天遇到一个用户需求,在CFileDialog对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据. 实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。我最终用的就是方法二. 方法一: 首先查找MSDN关于CFileDialog扩展的实现描述,上网查到实现预览图片式的CFILEDIALOG的例子。按照其思路从CFileDialog派生了一个新的类CFileDialogEX. 在类中添加以下代码 #define WM_CHECKZOOMIN WM_USER+1856 public: BOOL bZoomIn; UINT nMul; //[1~100] //前置声明--------------- BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn); UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // CFileDialogEx IMPLEMENT_DYNAMIC(CFileDialogEx, CFileDialog) CFileDialogEx::CFileDialogEx(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { //这个四个常用标识位 m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY |OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOK

MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法: Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性: GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd"); 设置字体: CFont *pFont = new CFont; pFont->CreatePointFont(120,_T("华文行楷")); GetDlgItem(IDC_XX)->SetFont(pFont); Edit Control: 设置文本: SetDlgItemText(IDC_XX,L"iuewurebfdjf"); 获取所有输入: 建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。 UpdateData(true); GetDlgItem(IDC_XX)->SetWindowText(shuru1); 第一句更新所有建立了变量的对话框组件,获取输入的值。第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。 若类型选用control: 1.设置只读属性: shuru1.SetReadOnly(true); 2.判断edit中光标状态并得到选中内容(richedit同样适用) int nStart, nEnd; CString strTemp; shuru1.GetSel(nStart, nEnd); if(nStart == nEnd) { strTemp.Format(_T(" 光标在%d" ), nStart); AfxMessageBox(strTemp); } else { //得到edit选中的内容 shuru1.GetWindowText(strTemp); strTemp = strTemp.Mid(nStart,nEnd-nStart); AfxMessageBox(strTemp); } 其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。strTemp.Format 方法用于格式化字符串。AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。 strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。如果nStart == nEnd说明没有选择文本。 注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。

基于Delphi的通用查询模块的设计与实现

基于Delphi的通用查询模块的设计与实现 周飞1,胡众义2 (1.温州大学现代教育中心浙江温州3250002.温州大学计算机科学与工程学院浙江温州325000) 【摘要】:本文提供了基于Delphi下的通用查询模块,给出了其设计原理及实现的主要技术。该模块操作简单,用户可自定义查询,调用方便,并在多个MIS中得到有效的应用。 【关键词】:通用;查询;面向对象开发环境 0.前言 目前管理信息系统中一个很重要的功能是查询。查询模块的设计是整个系统设计的关键。在以往的开发中,大多采用将查询静态地封装在系统内部,当查询需求发生变动时,对系统进行修改维护,然而用户对查询的需求往往是不断变化的,频繁的需求变动势必造成频繁地修改系统,使得维护的工作量及成本大大增加,因此设计开发支持用户自定义查询功能的通用查询模块,不仅能缩短系统的开发周期,而且易于维护。本文使用Del-phi设计,针对用户的需求,设计一个操作方便、查询高效的通用查询模块。 1.通用查询模块设计 本模块的设计思想是根据用户自定义的各种查询条件,产生相应的SQL语句供其它模块调用。 1.1需求描述 ①用户可自定义查询,选择数据库表中的任一字段作为查询字段。②用户可任意的组合查询字段进行多条件查询。③可按任一选定的字段进行排序。④查询方案能保存,供下次查询使用,并且能进行修改、删除等操作。查询方案包括:查询方案名、查询字段,关系运算符、多条件之间的逻辑关系等。⑤查询操作方便易用,查询模块与其它模块间的调用简单。⑥根据被查询字段,能自动设置数据输入类型,并检查数据输入合法性。 1.2通用查询模块界面设计 根据需求描述,界面设计尽量使用户操作方便、查询灵活。在实际运用中,多条件查询的查询条件超过6种的比较少,所以我们在设计界面时保留6种查询条件的空间。如果超过6种,就要添加查询,查询条件的范围可以包括到整个数据库表中的所有字段。界面如图1。 图1查询模块界面 界面说明如下: ①【方案】:此次查询方案以XML(可以扩展的标记语言)存储。②【另存为】:保存此次查询方案,供下次查询使用。③【删除】:删除被选择的查询方案。④【添加查询】:当查询条件超过6种时,增加查询条件。⑤【关系】:多种查询条件之间的逻辑关系,包括"且"、"或"等逻辑运算符。⑥【字段】:查询字段,数据表中的所有字段都可以作为查询字段。⑦【比较】:查询字段与用户输入的数值之间的关系。⑧【数值】:用户根据查询字段而输入的查询内容。⑨【确定】:根据用户自定义的查询方案产生并返回SQL语句,供其它模块调用。⑩【排序字段】:选择查询中的某一字段进行排序。⑾【清除所有】:清空被选中的查询方案。 2.通用查询模块实现 把查询字段名转换为数据库中对应的字段名,比较运算符、逻辑运算符转换为SQL中的相应符号,设置数据输入类型,数据输入合法性的检查等是实现本模块的主要技术。 2.1主要控件及说明 本模块中使用的主要控件及说明见表1 表1主要控件及说明 2.2程序实现 通用查询模块的主程序为函数PublicQuery(ParentForm:TForm;DataSet:TDataSet;varFilterStr:string)。其中参数Parent-Form是调用通用查询模块的父窗口,参数DataSet是查询数据集,为通用查询模块提供数据源,FilterStr是根据用户查询方案而产生的SQL查询语句,作为返回值。 2.2.1主程序 SetCaseName(ParentForm.Name);//设置查询方案名。 InitForm;//窗体初始化。 CreateFieldDateSet(DataSet);//创建字段数据集。 GetFilterStr;//产生SQL语句。 2.2.2窗体初始化 AddRelationList();//添加逻辑运算符。 AddCompareList();//添加关系运算符。 RelationComboBox1.KeyValue:='and'; ReadQueryCase;////读取方案。 ……//将关系、字段、比较的下拉框存到数组中。2.2.3设置输入类型 当用户选择不同的查询字段,根据查询字段的数据类型自动设置数据输入类型。输入的数据类型有数字、字母、时间等等。比如当查询字段为数字型,则要禁止字母等其他数据类型的输入。通过过程SetInputType(FieldComboBox:TDBLookupCom-boBox;varKey:Char;Text:string)来实现。关键代码如下: FieldCDS.Locate('FieldName',FieldComboBox.KeyValue,[]);//取查询字段名 caseTFieldType(FieldCDS.FieldByName('FieldType').Value)of ftDate,ftTime,ftDateTime://时间 ifnot(Keyin['0'..'9','.','-',':','',#13,#10,#8])thenKey:=#0; ftSmallint,ftInteger,ftWord://整数 ifnot(Keyin['0'..'9',#13,#10,#8])thenKey:=#0; ftFloat,ftCurrency,ftBCD://实数 if(Pos('.',Text)<=0)thenifnot(Keyin['0'..'9','.',#13,#10,#8])thenKey:=#0 (下转第157页)

vb通用对话框

CommonDialog 控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。通过运行Windows 帮助引擎控件还能显示帮助。 CommonDialog 控件在Visual Basic 和Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。为了用该控件创建对话框,必须要求Commdlg.dll 在Microsoft Windows \System 目录下。 为了在应用程序中使用CommonDialog 控件,应将其添加到窗体上并设置属性。控件显示的对话由控件的方法决定。运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将CommonDialog 控件显示成一个图标。此图标的大小不能改变。 CommonDialog 控件可以显示如下常用对话框: “打开” “另存为” “颜色” “字体” “打印” 注意无法指定对话框显示在什么地方。 要使用CommonDialog 控件 若未添加CommonDialog 控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。 在窗体上绘制CommonDialog 控件时,控件将自动调整大小。象Timer 控件一样,CommonDialog 控件在运行时不可见。 运行时,请适当使用下表所列方法显示需要的对话。方法显示的对话 ShowOpen 打开 ShowSave 另存为 ShowColor 颜色 ShowFont 字体 ShowPrinter 打印 ShowHelp 调用Windo ws“帮助” 示例代码: 下例显示“打开”对话框然后在信息框中显示所选的文件名: Private Sub Command1_Click()

【精品报告】常用中后台交互设计控件使用场景与规范总结

常用中后台交互设计控件使用场景与规范总结 最近刚完成平台安畅云 2.0 的改版设计,平台模块很多,经常存在很多类似的页面和组件,若不制定统一的规范和控件,则会导致很多重复的工作,大大降低产品的设计效率; 同时,平台的一致性也得不到保障。 所以,我们视觉、交互、前端的小伙伴们针对我们踩过的坑,大家认真总结和提炼出一个 符合公司定位的设计规范,统一公司项目的前端 UI 设计,规避不必要的设计差异和实现 成本,实现设计和前端资源的效率最大化。 此设计规范主要分享了中后台常用设计组件的定义、组成、使用场景及注意事项。 字体 概述 字体是界面设计中最基本的构成元素之一,用户通过文字来理解内容和完成任务,合适的 字体将大大提升用户的阅读体验及工作效率。在安畅云项目的字体使用中,为了使页面的 视觉层次更加清晰,我们从以下三方面来使平台的字体符合易阅读和美观的要求。 合理的使用不同的字重、字号和颜色来强调界面中需要突出的信息; 尽量使用单种字体,使用多种字体会让界面看起来零散和杂乱无章; 遵循 WCAG 2.0 标准(标准详情见 https://https://www.sodocs.net/doc/5079809.html,/Translations/WCAG20- zh/#visual-audio-contrast),字体在使用时与背景颜色的对比值满足无障碍阅读的最 低标准。 字体使用建议 中文字体优先级:PingFang SC、Hiragino Sans GB 、Microsoft YaHei(平台使用字体)英文字体优先级:Helvetica Neue、Helvetica、Arial(平台使用字体)

字号使用建议 行高使用建议 行高也是影响用户阅读体验的重要因素之一,我们查阅资料得知西文的基本行高通常是字号的 1.2em 左右,而中文因为字符复杂,所以中文行高需要更大。现在公认1.5em 至1.8em 之间会有一个比较好的视觉阅读效果。 安畅云项目行高计算公式:行高值=字号 x 1.5,例如:12 号字体的行高为 18px,14 号字体的行高为 21px。

4 对话框及常用控件 (第四章 对话框和常用控件)

1.什么是对话框?它分为哪两类?这两类对话框有哪些不同? 答:对话框是一种特殊的窗口,主要功能是输出信息和接收用户的输入。对话框分为有模式对话框和无模式对话框。当一个有模式对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。而无模式对话框打开时,用户可以同时打开其他窗口对象,操作完毕后,又可用鼠标或其他方式激活该窗口。 2.什么是对话框模板、对话框资源和对话框类? 答:对话框模板是一个描述对话框的内存结构,用于添加控件及其布局。对话框资源指快捷键、对话框、菜单、字符串、工具栏按钮、图表、版本信息等。对话框类用于实现对话框功能。 3.对一个对话框编程一般经过几个步骤? 答:1. 在资源编辑器中画对话框,添加控件,设定控件位置、大小、ID和其它属性; 2. 定义对话框回调函数,添加控件的事件处理函数; 3. 注册对话框函数 4、什么是控件?根据控件的性质可以将控件分为几类? 答:在Windows中所用的按钮控件是用来实现一种开与关的输入。 常见按钮类型:按键按钮、单选按钮、复选框按钮。 5.向对话框添加一个常用控件的方法有哪些?这些方法是否使用于ActiveX控件? 答:1、先点击控件,然后在对话框上单击, 2、先点击控件,然后在对话框上点住不放,画出像要的大小。 否。 6.什么是DDV/DDX技术?如何使用这种技术? 答:DDX(对话框数据交换)机制用来初始化对话框中的数据,并向应用程序返回数据,它使得用户向对话框加载对象数据和当对话框关闭时恢复其中的数据这两个过程自动化。 DDV(对话框数据验证有效性)机制用于将数据返回成员变量之前将数据的长度和范围有效化。 7.什么是空间的通知消息?它在编程中起哪些作用? 答:控件消息由按钮(BN_)、编辑框(EN_)、组合框(CBN_)和列表框(LBN_)等产生。控件通过向父窗口发送控件通知消息来表明发生了某种事件。

vb文件菜单通用对话框

第7章第10章 一、内部文件控件 二、通用对话框 三、文件的读写操作 四、菜单编辑器

一、内部文件控件 文件系统控件用来查看和选择文件的功能,这类控件有两种: ①VB内部标准的文件控件: 驱动器列表框(DriveListBox) 目录列表框(DirListBox) 文件列表框(FileListBox) ②另一种是Windows的通用对话框控件(CommonDialog),该控件是ActiveX控件,需要加载后才能使用。

驱动器 列表框 文件列表框 目 录 列 表 框

1.驱动器列表框(DriveListBox) ①功能:用来显示当前机器上的所有盘符。 ②Drive属性:设置或显示运行时选择的驱动器。 如:Drive1.Drive = “C”或 Drive1.Drive = “C:”或 Drive1.Drive = "C:\“均正确。 ③Change事件:选择一个新的驱动器或通过程 序代码改变Drive属性的设置时,都将引发驱动器列表框的Change事件发生。

【例1】窗体中有2个标签和1个驱动器列表框。程序运行时,将用户在驱动器列表框中所选驱动器名称显示在窗体的标签中。 Private Sub Form_Load() Label2.Caption = "选中的驱动器是" & Drive1.Drive End Sub Private Sub Drive1_Change() Label2.Caption = "选中的驱动器是" & Drive1.Drive End Sub 例1

2.目录列表框(DirListBox) ①功能:以根目录开始, 显示目录的层次结构。 ②Path属性:设置当前路径,只能在程序代码中设置。格式为目录列表框名称.Path[=“路径”]如:Dir1.Path=“c:\Windows” ③Change事件:在目录框发生变化时,会触发该事件。 【例2】窗体中有1个驱动器列表框、1个目录列表框和4个标签。程序运行时,将用户在驱动器列表框中所选驱动器的所有目录显示在目录列表框中,并将用户双击时所选中的目录显示在窗体下部的标签中。

增值税发票查询平台基础驱动及安全控件安装手册

增值税发票查询平台基础驱动及安全控件 安装手册 国家税务总局电子税务管理中心 2016年2月 目录 1 根证书安装3 1.1根证书安装3 2基础驱动及安全控件安装 10 2.1 安全控件11 2.2使用航天信息金报税盘 11 3 系统登录13 3.1 常见问题14 3.1.1金税盘或税控盘未连接 14 3.1.2金税盘或税控盘证书口令输入错误 14

3.1.3 纳税人档案信息不存在15 14

1根证书安装 国家税务总局税务数字证书的根证书,是由国家税务总局核准的税务行业证书,为了确保纳税人发票信息的数据安全,建议在进行相关业务操作前先根据本教 程完成根证书的初始化安装。安装本证书及相关操作不会对用户的计算机构成危 害,如不安装本证书,则在访问本网站时,会出现如下图所示的警告信息(本系统 只支持微软IE内核浏览器,建议版本为8 (含)以上体验更佳),影响系统的正 常使用。 1.1根证书安装 以微软Windows 7操作系统及IE9.0浏览器下的操作为例: 1、未安装根证书首次访问本应用系统网站时,会出现下图所示警告,选择点击“继续浏览此网站”,即可正常打开系统的页面 此刘怙的安全UL事有冋竝百 比爭站出削B宾全证书不軽田淫佶仕巧址书毗执构脫 哉刚秦山全亠电呈A J貝狂対站卫1_:虹旳" 述沁ktl吐网血.再旦用曲除诩睥应泄瞌 曹甲泌矣Ml胡页. 即芳:季利克此网站(不応严)+ 就畀砧岀砒虫全证钉基宙量碗的远书哒机拘頤sn乩虫變证丸呃题 鰹童示期如序祕2井詡■毋■迸世咖■?■逹其印吐星in . Ma f-flHtfMWiiRK?

2、点击请下载驱动程序和安全控件的链接,将 driver_jsp_02.rar 压缩包 保存至本地: 曹塔值舷票査向平台 3. 使用winrar 等解压缩软件解压driver_jsp_01.rar ,解压后可得到 01.taxca.p7b 证书文件。 4、先断开金税盘与税控盘与电脑的连接,然后鼠标右键选择解压后得到的根 证书文件文件(01.taxca.p7b ),然后选择“安装证书”,如下图所示: taxca.pJb 5 、在弹出的证书导入向导中,点击“下一步”:

通用对话框与文件操作

第10讲通用对话框与文件操作 教学目标 1.掌握文本文件的读取与写入操作 2.掌握通用对话框的使用 重点、难点: 1.通用对话框的使用;(重) 2.数据的读写。(难) 提纲: 1.复习与作业点评 2.文件的读、写操作 3.消息框的使用MessageBox 4.通用对话框的使用OpenFileDialog、SaveFileDialog、FontDialog、ColorDialog 5.小结 6.作业 一、复习与作业点评 二、文件的读、写操作(幻灯片18~26) (一)流 流(Stream)是字节序列,对于流的操作是按照流中字节的先后顺序来进行的。提供一种向存储器写入数据和从存储器读取数据的方法。在读写文件时,不是直接操作文件,而是通过文件流的某些方法来实现文件的读写。流就好像是在计算机的输入/输出之间建立的一条通道,数据好像在这其中“流”动一样。 文件是静态的,流是动态的。要想访问文件,就要建立流对象(Stream)。 (二)读取文件 要从文本文件中读取数据,首先要使用System.IO.StreamReader类建立一个StreamReader对象:Dim 对象名称As New System.IO.StreamReader(路径和文件名,编码方式) 其次用StreamReader对象读取数据常用的方法来读取数据。 读取内容=对象名称.读取方法 StreamReader对象的常用的读取方法有: Read()方法:读取当前流中的下一个字符或下一组字符。 Readline()方法:从当前流中读取一行数据,并将数据作为字符串返回。

ReadtoEnd()方法:由文件当前位置开始读取数据,直到文件结束。 最后需调用close方法关闭StreamReader对象。 对象名称.Close 在文本框1中输入想要打开的文本文件路径及名称,单击“读出”命令按钮,在文本框2中显示文件内容。 (三)写入文件 要向文本文件中写入数据,首先建立写对象: Dim 对象名称As New System.IO.StreamWriter(路径和文件名,写入方式,编码方式) 对象名称.Write(要写入的数据)——写的方法 或:对象名称.WriteLine(要写入的数据) 对象名称.Close ——将写对象关闭 【例】读写文件(幻灯片25) 三、MessageBox消息框(幻灯片26~29) 消息框是预先设计好的预定义对话框,常用来在程序设计中输出简单的消息。可以通过Messagebox类的show方法来实现,语法格式如下: Messagebox.show(Prompt [,Title] [,Buttons] [,Icon]) 如:MessageBox.Show("请输入运算符号!", "消息框", MessageBoxButtons.OKCancel, https://www.sodocs.net/doc/5079809.html,rmation) 四、通用对话框(幻灯片32~41) 如果要想生成复杂的对话框,则可以通过: ?打开文件对话框控件(OpenFileDialog) ?保存文件对话框控件(SaveFileDialog) ?字体对话框控件(FontDialog) ?颜色对话框控件(ColorDialog) 1、OpenFileDialog (1)FileName属性 该属性值为一个包括完整路径和文件名的字符串。用户在对话框文件名列表中选定或输入的文件名会保存在该属性中。如果在打开对话框之前为该属性设置了文件名,则该文件名为打开对话框时的推荐文件名。 (2)Filter属性 该属性用于设置打开文件对话框中“文件类型”列表框中的文件类型。一次可设置多种文件类型。每设置一个文件类型称为一个过滤器。设置一个过滤器的语句格式如下: 文字说明|文件名模式 (3)FilterIndex 用于设置或获取打开文件对话框中当前选定过滤器的索引,第一个过滤器的索引值为1,第二个过滤器的索引值为2 (4)Title属性 用于设置对话框标题,默认标题为“打开”。 OpenFileDialog控件最常用的方法是ShowDialog方法,常用的事件为FileOk事件。

从零开始学VC系列教程 二.对话框及常用控件实验

从零开始学VC系列教程二. 对话框及常用控件实验 恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现. 本节内容:学会对话框调用及一些常用控件的使用方法. 学习目的:学习人机交互,为软件开发提供界面基础. 1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图 细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢?我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框 这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢?其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到

程序运行了. 单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了. 当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢?为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption 改为[关于].最终效果如下 下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图

面向对象技术-对话框和按钮控件

计算机学院 实验报告 实验名称对话框和按钮控件课程名称面向对象技术 姓名班级学号 日期地点 成绩教师

1.实验目的 运用对话框和按钮控件设计一个可供选择的调查问卷对话框。 2.实验内容 设计一个对话框,用于问卷调查,它针对“上网”话题提出了是个问题,每个问题都有四个选项。当回答问题后,按“确定”按钮,弹出一个消息对话框。显示用户选择的内容。 3.实验环境(软件、硬件及条件) VC++6.0 PC WIN7 4.实验方法 1)创建一个默认的基于对话框的应用Ex_Research。 2)Visual C++会自动打开对话框编辑器并显示对话框资源模版。单击对话框编辑器工具栏上的切换网络按钮,显示对话框网格,将对话框标题改为“上网问卷调查”。 3)在对话框中添加实验需要的组框控件、静态文本、静态图文控件、复选按钮和单选按钮等,并按照实验要求修改对应的名称。 4)单击工具栏的测试对话框按钮,测试一下所添加的对话框效果。5)将项目工作区切换到ClassView(类视图)页面,展开CEx_researchDig类的所有成员,双击OnInitDialog函数名就会在文档窗口中自动定位到该函数的实现代码处,在此函数添加初始化代码。 6)用MFC.ClassWizard在CEx_ResearchDlg类中添加IDOK按钮的BN_CLICKED消息映射,添加代码,使得用按“确定”按钮获取用户所作的选择内容。 7)编译并运行,出现“上网问卷调查”对话框,当回答问题后,按“确定”按钮,出现消息对话框,显示用户选择的内容。 5.实验分析 此次实验中,在4)步骤测试对话框,刚开始选择单选按钮是,两组单选按钮中只有一个单选按钮被选中,这是顺序添加的8个单选按钮全部变成一组。解决这个问题的办法是将第一组的第一个单选按钮的Group(组)属性选中。

使用Excel控件和函数制作数据库与查询平台

使用Excel控件和函数制作数据库与查询平台 2010年12月1日 目录 一、使用Excel控件和函数制作数据库与查询平台 (1) (一)建立一个数据库: (1) (二)使用控件与函数制作查询平台: (2) (三)函数与函数中数据的表达意义 (2) (四)本工具表在本人网站中的位置 (3) 二、使用Excel函数制作数据库与查询平台 (3) (一)DPRODUCT、VLOOKUP两个函数分别作查询平台比较 (3) (二)使用VLOOKUP函数作需显示英文和汉字的查询平台 (4) 一、使用Excel控件和函数制作数据库与查询平台 假如我们需要查询人民币与外币的比价 (一)建立一个数据库:

(二)使用控件与函数制作查询平台 外币 壹万元 (三)函数与函数中数据的表达意义 1、函数:INDIRECT(ADDRESS(INDIRECT("C5")+5,COLUMN(K6))) 2、图解函数中数据的表达意义

(四)本工具表在本人网站中的位置 https://www.sodocs.net/doc/5079809.html,/ship/_private/02_jjgl/02_jsff/hbbjhs.html 二、使用Excel函数制作数据库与查询平台 (一)DPRODUCT、VLOOKUP两个函数分别作查询平台比较1、建立下表为数据库: 第1组数: 从员工编号起的整个数据区域 第2组数: 查询的项目(多项查询需对应项目) 第3组数: 查询项目与查询框,查询项目必须相同.如查询员工编号,此框也一定是员工编号 查询平台(1)缺点:不能显示汉字与英文

结论:查询平台(1)适合做多个相同数据、无英文、无汉字显示的查询平台。 第1组数:查询平台输入数据单元格 第2组数:需查询的区域(含不含栏目名称均可) 第3组数:数字表示查询区域的列 本查询平台比查询平台(1)函数制作方便,且能显示汉字与英文 缺点:后面不能有同样的数,如有,则还是显示的最前面的数据 结论:查询平台(2)适合做唯一数据(如干支)查询平台。 4、两个函数的优势比较 DPRODUCT 宜做多个相同数据、不需显示英文和汉字的查询平台 VLOOKUP 宜做唯一数据、且需显示英文和汉字的查询平台 (二)使用VLOOKUP函数作需显示英文和汉字的查询平台1、制作时辰查询平台 日上起时查询平台

通用查询完整设计文档

通用查询设计文档 1,需求: 1、通过修改数据库相关配置,即可实现页面查询条件的增删改,减少软件代码的 设计工作。 2、有效利用屏幕资源,使软件界面简洁清晰。 3、满足客户对相应查询重点的关注。 4、便于以后程序员对系统的维护和代码的修改。 2,思路: 1、建立数据库表结构,用于存储各报表的查询条件及相关数据。 2、建立一个高级查询条件的配置页面,和一个高级查询用户控件。 配置页面,主要针对有一定编程经验的实施人员配置相关的查询条件,在树形权限菜单中选择需要配置高级查询的页面,配置各种高级查询条件。 高级查询用户控件,做一个高级查询的用户控件,要求传入指定参数,比如当前页面ID,接收高级查询页面配置后的语句。 当前页面获取配置好的语句后传入后台查询方法里面直接加载到拼接好的查询语句后面进行查询。 3,数据表结构: 表 Sys_Search查询条件 注:灰色字体为之前设计有,当前设计考虑去掉的字段。

表SYS_Code_OperatStr操作符 表SYS_Code_ShowType显示控件类型

4,页面设计 高级查询页面WhereSearch.aspx 通过用户控件传入当前页面的模块ID,模块Name,查询页面根据传入ID加载对应的查询调教等信息,如果没有则给予提示。 默认情况下不显示并且,“--”这两个关键字下拉框和显示SQL语句文本框,将其隐藏,但是在添加条件的时候还是取值,默认取并且(and),“--”两项值。页面增加显示高级按钮,点击显示高级按钮时将并且,“--”这两个关键字下拉框和显示SQL语句文本框给予显示,并且可以选择使用。 大于,小于之类的操作符根据配置时的选择加载不同操作符。 输入框,将根据配置添加加载指定输入框。并且会对输入内容进行js验证。暂时js验证过滤单引号字符,验证了int等数值类型,后台对各种类型都进行了验证。 查询配置列表页面SearchSetList.aspx 该页面显示所有配置查询条件的信息,页面支持分页和按照条件查询,可以进行增删改操作。可以按照页面模块ID进行查询。 查询配置页面SearchSetDetail.aspx 模块ID(ModuleID),模块名(ModuleKeyName):通过模块树选择需要增加高 级查询的模块,获取对应的模块ID和模块名。

对话框和按钮控件实验报告

实验(实习)报告 实验(实习)名称对话框和按钮控件日期 5.15 得分指导教师 院计算机与软件学院专业计算机科学与技术年级班次姓名学号 实验内容: 设计一个对话框,用于问卷调查,在教材【例Ex_reserch】基础上针对“上网”话题在提出一个问题:“你每天上网的平均时间”,该问题的备选答案是“<1小时”、“<2小时”、“<3小时”和“>3小时”,如图T9.1所示。当回答问题后,单击“确定”按钮,弹出一个消息对话框,显示用户选择的内容。 实验步骤: 1.创建工作文件夹 2.设计“上网问卷调查”对话框 (1)创建一个默认的基于对话框的应用Ex_Research。 (2)调整对话框的大小(宽度不变),将“确定”和“取消”按钮移至对话框的下方,参照图控件的布局,添加一个静态文本框,标题为“你每天上网的平均时间:”,保留默认的标识符。 (3)添加四个单选按钮控件,在其属性对话框中,分别将其标题设置为“<1小时”、“<2小时”、“<3小时”和“>3小时”,标识符分别设置为IDC_TIME_L1、IDC_TIMEL2、IDC_TIME_L3和IDT_TIME_M3。 (4)选中第1 个单选按钮IDC_TIME_L1的Group属性选项。 (5)添加一个静态图片控件,在其属性对话框中将其类型属性为“Frame(框架)”,颜色属性选为“Etched(蚀刻)”。 3.修改代码 (1)在CEx_ResearchDlg::OnInitDialog函数中添加下列代码: CheckRadioButton(IDC_TIME_L1、IDC_TIME_M3、IDC_TIME_L1); (2)在CEx_ReaserchDlg::OnOk函数中添加下列代码: //获得第四个问题的用户选择 Str=str+”\n你每天平均上网的时间:\n”; nID=GetCheckedRadioButton(IDC_TIME_L1、IDC_TIME_M3); GetDlgItemText(nID,strCtrl);//获得指定控件的标题文本 Str=str+strCtrl; 4.编译运行并测试 编译并运行后,显示“上网调查问卷”对话框,当回答问题后,单击“确定”按钮,出现相应的西欧系对话框,显示用户选择的内容。

控件

组态王KINGVIEW 6X 控件-常见问题解答 北京亚控科技发展有限公司 2011年02月

目录 1. 开放型数据库访问控件(KVADODBGRID) (1) 1.1 我使用KVADODBGRID控件进行关系数据库的数据查询,如何来控制KVADODBGRID控件的行高? (1) 1.2 我使用KVADODBGRID控件进行关系数据库的数据查询后进行打印,请问能否设置表格的标题? (1) 1.3 我如何操作才能使用KVADODBGRID按“时间”条件来查询ACCESS外接数据库? (1) 1.4 请问如何能在KVADODBGRID控件中快速生成查询条件? (2) 1.5 我需要使用KVADODBGRID控件对多个数据库进行查询,请问如何操作? (2) 1.6 在组态王中使用KVADODBGrid控件对数据库查询后,将查询的数据打印出来? (2) 1.7 在组态王中使用KVADODBGRID控件进行数据库查询时,能否对查询出来的数据进行修改,同时将数据更新到数据库中? (2) 1.8 在组态王中使用KVADODBGRID控件进行数据库查询时,能否将查询出来的数据保存为其他格式的文件? (2) 1.9 在组态王中使用KVADODBGRID控件进行数据库查询时,如何得到指定单元格中的内容? (3) 1.10 在组态王中使用KVADODBGRID控件进行数据库查询时,能否实现打印预览的功能? (3) 1.11 在组态王中使用KVADODBGRID控件进行数据库查询时,能否实现多个表联合查询的功能? (3) 1.12 在使用KVADODBGRID控件来查询数据库的时候,如何在运行时修改控件中显示数据的小数点位数? (3) 1.13 在组态王中使用KVADODBGRID控件进行数据库查询时,能否在运行时进行表格的选择? (4) 1.14 在组态王中使用KVADODBGRID控件进行数据库查询时,如何实现字符串查询? (4) 1.15 在组态王中使用KVADODBGRID控件进行数据库查询时,如何实现相似查询? (4)

相关主题