分享
 
 
 

《循序渐进学用Visual C++ 6.0》【中级篇】读书笔记(二)

王朝vc·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

l ActiveX空件

ActiveX空件是一个软件组件,建立在COM技术上,在说明ActiveX原理之前不得不提提vtable.

MFC的消息与函数也是有类似的vtable.如:

WM_PAINT ---àOnPaint();

WM_QUIT-----àOnOK();

……….to be more……….

这个vtable里每一个消息就对应一个处理函数.ActiveX的vtable叫IDispatch vtable.这个vtable存了对应的接口id和处理函数。ActiveX伟大之处就在于这个接口连接工作是自动化的。

使用ActiveX空件最终就是为了实现“嵌入”。如:Excel 嵌入到 Word里面。媒介是COM技术。

l ActiveX容器与ActiveX服务器

这两个概念很容易搞乱,上例中Excel就是服务器,Word就是容器。ActiveX使用方法很简单,深入研究其原理,似乎没有必要。ActiveX空件最麻烦的一件事就是使用前要注册该ActiveX空件。

l ActiveX空件的注册

首先给WINDOWS注册:运行-àregsvr32 c:\windows\system32\msflxgrd.ocx

接着给VC++6.0注册:选择工程,再选增加到工程(工程已经存在的情况下),再选components and control,再选Registered ActiveX Controls目录,再选msflexgrid。点ok。

l ActiveX的自设成员变量

出于保护ActiveX空件,只能有一个对象型的,或者讲空件型的自设成员变量。

l MSFlexGrid控件使用摘要

SetRows及SetCols: 设置控件的行列数,如果你不往各行列中插入数据,表格将为指定行列数的空表.

大多数情况下,在往表格中插入数据时必须先确保表格的行列数能容纳你要插入的行列数,

不过当你用的是AddItem方法时,你可以不必手工增加行数(列数还是要先设置好的),因为

它会增加控件的行列数.

GetRows及GetCols:获取控件的行列数。

SetRow及SetCol:设置控件的当前格(由行号及列号指定)

SetText:设置控件的当前格的内容.

SetTextMatrix:设置指定格(由行号及列号指定)中的内容

SetTextArray:功能与SetTextMatrix相同,但指定格的位置的方式与SetTextMatrix不同, SetTextMatrix是

通过二维表中的行列索引来表示,而SetTextArray用一维索引来表示,其原理与C语言中访问

二维数组的方式相同,如:对于Table[N][M], Table[3][2]以一维方式表示为Table[3*M+2]. (我未实验:不完全可信)

AddItem:在控件中增加一行,行中各字段以tab字符相隔,不能用本方法来增加控件的第一行(固定行或表头),

它将导致控件的行数自动加一.

Clear:清除控件中的所有内容(不改变控件的原有行列数)

GetRowSel及GetColSel:获取控件的当前行、列,没有当前行(即表格为空)时,返回值为-1。

l 看了上边的东西包你不会用,哈哈,我们来看些实际点的东西.

Id

学生名字

性别

年龄

200501

老鼠

22

200502

美女

22

200503

小强

22

我们将会以这个表作为假设MSFlexGrid控件的使用方法,因为这个空件的使用太重要了,必须要掌握.这个表行数有0’,0,1,2 ; 列数有 0’,0,1,2 . 0’ 行是字段行,第一点我们要学会计算格子,这里有9个格子(字段行除外),每个格子都有它们自己的”ID”,比喻说”200502”是5号格子, 老鼠是2号格子.

我们自然会想到,这些格子与”行”标和”列”标有何关系呢.?看公式:

cell()=(行标x 4 +列标).

由于上面一大堆函数它们直接操作对象是格子(cell),比如说其中最重要的一个成员函数SetTextArray(格子,字符串或值)向表格填入数据.另外有些以Get字头的空参数函数,这使用起来的确很方便,不过还得知道它们是什么意思.

这里还介绍多两三个函数如:GetFixedRow()这个是获得字段行标,如这里的第0’ 行.

SetMergeCol(行标,值)这个函数则是用来合拼单元格的,同一列中邻近的格子具有相同的值的合拼.如上表,3个人的年龄都系22岁.那么我们可以这么做:

SetMergeCol(0,true);

SetMergeCol(1,true);

SetMergeCol(2,true);

l 随即函数

看这行代码:”Srand( (unsigned) time(NULL) )”这个语句会产生一些数值以参数形式传递给rand()函数.看msdn的一个例子:

/////////////////////////////////////////////////////////////////

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

void main( void )

{

int i;

srand( (unsigned)time( NULL ) );

for( i = 0; i < 10;i++ )

printf( " %6d\n", rand() );

}//这里会输出10个随即数

///////////////////////////////////////////////////////////////////

l 今天的题设:

画一个对话框MyDlg,添加一个ActiveX控件msflexgrid,并为它设置如下属性:

ID标式符: IDC_MYGRID

Rows行数: 20

Cols列数:4

MergeCells:2-Restric Rows

Format:<Region|<Product|<Emploee|>Sales //这里是添加字段名,就好比为第0’ 行赋值。这4个英文单词的意思是地区、产品、销售员、卖出,假如你喜欢写成中文吧。

最后就是为控件添加成员变量m_ctlMygrid

l 我们首先为单元格计算公式,创建一个函数Mycell()

cell()=(行标x 4 +列标),不过我们改一改,改成cell()=(行标x 总列数 +列标),这样就更一般了。这条公式是我们先前讨论过的,View面版选MyDlg类,右击选插入函数,函数返回值填int , 函数声明Mycell(int m_iRow,int m_iCol)成了,,现在写代码:

///////////////////////////////////////

Int MyDlg:: Mycell(int m_iRow,int m_iCol)

{

int i;

i=m_ctlMygrid.GetCols(); //获得当前总列数。

return m_iRow*i+m_iCol ;

}

////////////////////////////////////////////////////////////////////////

l 接下来书上创建了一个函数,把随即数填入表格。

这里主要是一个SetTextArray(单元格,值)函数的运用。

如:

m_ctlMygrid.SetTextArray(7,”baby”),这样就向7号单元格填入了baby字样。

这里相信好理解。

l 获得当前单元格

打开精灵class winzard,选IDC_MYGRID,消息选Click.然后填加函数

代码如下:

////////////////////////////////////////////////////////////////////////

int i,j;

i=m_ctlMygrid.GetMouseRow ;

j=m_ctlMygrid_GetMouseCol;

Mycell(i,j );

///////////////////////////////////////////////////////////////////////

l 接着还有个排序的。这个还是控件属性那里直接设置好了。累了,假如人不用睡觉就好了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有