contextmenu是什么属性(contextmenustrip控件)

第一节 入门

1.启动软件

contextmenu是什么属性(contextmenustrip控件)

打开软件默认是“新建”选项,点击初级程序。进入主界面。

contextmenu是什么属性(contextmenustrip控件)


我们知道,编写一个程序是需要很多代码的,这些代码往往要完成很多重复性工作, 所以我们就要把代码分成若干个小程序段,称之为“小程序”。
每一段“小程序”我们都可以在不同地方调用执行它,具体是怎么实现呢?比如我们要计算a+b=c,请看下面简单的示例:

小程序 加法();
整数 a,b,c;
c=a+b;
结束;

首先写“小程序”这三个字,就表示我们要写一段代码,然后空格,再写上这段程序的名字“加法”,后面的小括号里面是传递参数用的。
括号之后是分号,代表这一句代码完了,开始下一句。相当于平常书写文章的逗号、句号、分号、问号等,书写代码就规定只用分号这一种代表语句结束。
如果不传递参数,小括号可以不写,但后面要写个分号或者空格或者换行,作用是把你后面的语句分开。
其它符号当然有别的用途,而且要注意编程用的符号都是英文字符,中文的标号符号很多输入法打不出来,所以统一使用英文。
当这段代码写完,一定要写上“结束”,计算机才会知道这个代码片段至此结束。

然后我们接着看看参数是如何传递的:

小程序 加法(整数 a,整数 b);
整数 c;
c=a+b;
结束;

括号里面传递两个参数a和b,它们是变量的名字,整数代表这个变量是数字,a和b可以是-21亿到21之间的任意数字。
有了这段小程序,我们就可以在其它地方调用它,写法是:加法(100,5);
那么它就会计算出c=105。可是我们需要把c这结果取出来,那么小程序也可以把结果返回给调用者。

小程序 加法(整数 a,整数 b);
整数 c;
c=a+b;
返回(c);
结束;

这样书写之后,我们调用时,就可以写:
整数 d;
d=加法(100,5);
那么我们把计算结果给到d这个变量,此时d的值就是105。由此我们可以看出,申请变量就是要存放一个数据,我们可以去读写这个变量的数据。
比如:文本 s;
s="你好";
就是申请一个文本型变量s,然后给s赋值为“你好”,注意文本也就是字符,它要加双引号。

上面的代码都是申请变量c,计算出c的结果,再返回c,当然我们可以这样写:

小程序 加法(整数 a, 整数 b);
返回(a+b);
结束;
总线来说,编程只是一种思路,代码只是一种逻辑,虽然代码有诸多规范,其目的还是为了满足需要。
下面我们先来写一个“你好”程序吧,几乎所有编程都是先学“hello world”开始的。
例题一:弹出提示
我们在窗体的代码里(窗体.bac),找到窗体启动这里,分号后面加一行代码:信息框(0,"我是中文编程","朋友你好",0);

contextmenu是什么属性(contextmenustrip控件)


点击运行(菜单栏下方有个绿色的三角符号)

contextmenu是什么属性(contextmenustrip控件)


提示文件没有保存,需要给程序起一个名字。我们点“是”

contextmenu是什么属性(contextmenustrip控件)


随便起一个名字,就叫“测试”好了。

contextmenu是什么属性(contextmenustrip控件)


程序已经编译完成,我们点击“执行”按钮

contextmenu是什么属性(contextmenustrip控件)


运行的程序会弹出提示,这样一个程序就写好了,默认是在code目录下。
2.窗体设计

contextmenu是什么属性(contextmenustrip控件)


刚才我们学习的是代码的编写,那么设计带窗体的程序,最重要的是先学会如何设计窗体。
我们可以关闭代码编辑窗口,以后可以双击右侧列表里的窗体.bac,来重新打开代码编辑。
先选择一个控件,在窗体上点击鼠标左键不松-移动鼠标-松开鼠标。相当于“画”一个控件。
然后点击此控件,修改它的属性和风格样式等。
3.编写一个程序

contextmenu是什么属性(contextmenustrip控件)


例题二:显示网页
然后点击编译按钮。如果没有保存工程,会提示你保存工程文件。输入要保存的文件名。
程序会自动编译你设计的软件,并自动运行,运行后效果如下。

contextmenu是什么属性(contextmenustrip控件)


例题三:使用按钮
我们在窗体上画一个按钮,刚才的网页框很大,先拖动它向下挪,上面留点地方好画按钮。

contextmenu是什么属性(contextmenustrip控件)


然后点击网页框,注意看右边的外观样式,不勾选“是否可见”

contextmenu是什么属性(contextmenustrip控件)


然后再到窗体代码的窗体消息这里,插入
为 单击左键{ShowWindow(网页,SW_SHOW);}

contextmenu是什么属性(contextmenustrip控件)


看到英文代码先不要觉得头大,这代码哪里来的?我刚刚上网查的呀。
为什么编程一定要用英文呢?不是一定要用,而是学习的需要。网上的代码几乎都是英文的,只管复制过来用就行。
ShowWindow可直接翻译为显示窗口,SW_SHOW这个参数就是显示,网页这个参数,其实是对应刚才画的网页框,名字就叫“网页”
那好,我们先编译一下看看效果吧!过程不演示了,运行之后,网页不显示,点击按钮,网页就会显示。
然后我们再画一个按钮,刚才的按钮名字叫按钮1,新加的叫按钮2,第二行是标题内容,分别写“显示”、“隐藏”

contextmenu是什么属性(contextmenustrip控件)


把刚才“单击左键”里的代码,改成:左键点击(数据);
然后再增加一段小程序,代码如下:
小程序 左键点击(整数 数据);
判断(数据)
按钮1{ShowWindow(网页,SW_SHOW);}
按钮2{ShowWindow(网页,SW_HIDE);}
结束;
这样写的作用就是在点击按钮时,判断是哪个按钮点击了。数据就是按钮吗?现在算是,也可能是你画的其它控件。
判断是按钮1,就执行让网页显示,是按钮2,就执行让网页隐藏。SW_HIDE是隐藏的意思,网上有相关说明。
再次编译一下,运行效果如图:

contextmenu是什么属性(contextmenustrip控件)


我们分别点击两个按钮,网页是会显示和隐藏。只是这网页太小,能自动全屏吗?
也不难,上网一查,可以把下面两句代码,插入到“窗体启动”的下面。
SendMessage(窗体, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
MoveWindow(网页,0, 0, dskRt.right, dskRt.bottom);

contextmenu是什么属性(contextmenustrip控件)


窗体启动完之后,第一行代码就是让窗体全屏,为什么我写的是单击窗口?
是因为编程器里对部分常数做了翻译,单击窗口=WM_SYSCOMMAND,后面会有说明,这里先解释下第二行。
百科里解释是:MoveWindow(窗口句柄, 左边, 顶部, 宽度, 高度);作用:移动一个窗口到指定位置和大小。
窗口句柄就是网页了,我们要移动它。全屏时,距左边是0。顶部为什么是50?
注意看网页框的属性,顶确实是50.而左边是10怎么不写?画的时候没贴边,代码让它贴边就对了。
那么宽度和高度这两个英文是哪里来的?我们到窗体设计器界面,点击菜单下方的“切换设计”按钮。

contextmenu是什么属性(contextmenustrip控件)


出来一堆代码呢?没错,你在设计界面上设计的结果,就是生成了这些代码而已。
至于你怎么理解这个意思不重要。你在这里看到的dskRt.right就是桌面的宽度,dskRt.bottom是桌面高度。
反正这个能拿来用就行了。切换到这个界面,还是有其它用途的,后面我还会再讲到。
3.菜单设计

contextmenu是什么属性(contextmenustrip控件)


例题四:使用菜单
菜单怎么用呢?像刚才的测试代码,用按钮控制网页显示,弄了全屏,两个按钮占据那么宽一行。
感觉太不美观,那我们用菜单代替按钮,看看效果如何。在窗体设计界面点击鼠标右键,选择“菜单设计”
依次添加:主菜单、显示、隐藏这三个项目。然后再选中显示,点击一下“右移”按钮,“隐藏”也同上操作。

contextmenu是什么属性(contextmenustrip控件)


为什么要加三个?你应该见过,菜单都是先点一级菜单,再点二级菜单。
“主菜单”就是一级菜单,显示和隐藏是它的二级菜单。(多一个点就低了一级)
然后我们再点一次切换设计,看看又多了什么?别问看这干吗,反正有用。
看到代码里多了几行,也看不懂啊。也别急,刚才有两个按钮,是可以删除掉了。
你现在找到按钮1=…和按钮2=…这两行代码,直接删除掉。先别切换,点保存,然后把这个窗口关了。

contextmenu是什么属性(contextmenustrip控件)


然后再从右边的工程文件列表,双击“窗体.frm”,看到两个按钮都没了吧。
切换设计看“原始”代码,可以直接改代码。具体稍候再讲,先来看菜单功能如何写代码。
那么是不是把刚才的按钮1和按钮2改成显示和隐藏就行了?并不行。
因为添加菜单只有标题名,并没有定义每个菜单的名称,那怎么办?
所以我们继续学习另一种判断按钮或者其它控件的办法:
除了判断定义的名称外,我们还可以判断控件的编号,有时候我们可以使用循环,按序号来操作控件。
好,我们再点一下切换设计,看到显示和隐藏这两个标题前面,分别是1001和1002,先记住。
然后到窗体代码这里,“单击左键”这里的(数据)改成(参数)。然后再把按钮1和按钮2改成1001和1002

contextmenu是什么属性(contextmenustrip控件)


你是不是发现我没有把“数据”改成“参数”,我改的是上面“窗体消息”那里
那下边为什么不改?确实可以不改。那边是“参数”,这边怎么就变“数据”了?原因是传递参数,并不是参数这两个字。
而是它的数据,那这个名称代表什么,它只是定义了一个局部变量。局部变量只在本段小程序里有效。名字只要不重复,叫什么都行
上面的话,如果你实在理解不了,那就不要管了,或者你把下面的“数据”,都改成“参数”,也是对的。看上去顺眼而且更好理解
还注意看一下,窗体启动那里,移动窗口后面的数字50给去掉了。也就是说它不用再留出50来显示按钮了,就是全屏。

上面几个例题,说难也不算难。只是深刻理解起来,有点困难。感觉SEC编程一点都不智能,学起来费劲。
那么我告诉你为什么我要这么教你。我教的其实是一种“底层”编程的方法,当你理解学会了这些方法,等于你就可以创造一切了。
而你学习其它“高级语言”,真正实现的功能都是“别人”提前写好的。并不是说这不好,而是高级语言需要学的太多,学了几十年
却发现只能在这一种语言体系下用,你也无法和其它体系的程序员探讨或使用你的代码。而底层编程是通用的,高级语言也都是通过底层实现的。
高级语言可能编程更效率,但是要不断的学习。先学会底层编程,也仍然可以使用高级编程,这样你就能更容易的理解所有编程语言了。

看完上面的话,是不是对底层编程更有兴趣了。底层编程学的是技能,高级编程学的是技术。技能学会之后,永远不会过时,技术就不一定了。
那就继续把刚才没讲完的再补充一下。看一下窗体设计切换到代码,去如何理解:
网页=CreateWindowEx($200,"AtlAxWin","www.z5x.cn",$40000000,10,10,420,310,窗体,1,5,0);
这句代码有点长,等号前面的“网页”,就是定义的控件名称。增加二级菜单的代码前面并没有等号,也就是没定义名称。
关键看“窗体”这两个字,前面有四个数字,分别对应左、顶、宽、高。
它后面的数字就是控件的编号,或者叫序号吧。刚才菜单可以用序号来判断是哪个控件在点击,按钮或其它控件也是可以的。
4.查看示例
点击新建工程,并点击选项卡的范例,选择右侧列表里的示例文件,点击打开

contextmenu是什么属性(contextmenustrip控件)


打开时默认只显示第一个窗口。查看代码窗口,要双击右侧列表里的bac文件。

contextmenu是什么属性(contextmenustrip控件)


后缀为bac的是代码文件,后缀为frm的为窗体设计。当然两者是可以相互切换的。
为了设计和书写方便,我们可以最大化当前窗口,需要切换可以双击右侧列表。
5.工程引用

contextmenu是什么属性(contextmenustrip控件)


6.版本设置

contextmenu是什么属性(contextmenustrip控件)


7.服务设置

contextmenu是什么属性(contextmenustrip控件)


8.添加资源

contextmenu是什么属性(contextmenustrip控件)


第二节 数据类型

之前我们在代码里,看到有“整数 窗口,整数 消息,整数 参数,整数 数据”,这些都是变量,数据类型指的是变量的类型。
使用最多的就是整数,当你不知道使用什么类型的变量时,就用整数好了。在小程序片段之内的变量是局部变量,之外的是全局变量
变量的作用主要是用来存取数据,传递参数,算法运算等等。比如:整数 a=3,b=5; 先申请两个变量分别是3和5。
再写:a+b;也就是让a 加上 b,然后a的结果就等于8了。

英文名称

中文名称

数值范围

Bool

逻辑

真(True),假(False)

char,sbyte

字符

-128~127

short

整形

-32768到32767

int,dword

整数

-2147483648到2147483647

uint

正整数

0 到 4,294,967,295

single

小数

负数-3.402823E38到-1.401298E-45;正数1.401298E-45到3.402823E38

string

文本

未指定时长度为文本的实际长度;文本 消息[16]="系统提示";英文1字节,汉字2字节

byte,uchar

字节

0到256

ushort,word

正整形

0到65535

Double

浮点

负数时-1.79769313486232E308到-4.94065645841247E-324;正数4.94065645841247E-324到1.79769313486232E308

long,ulong

大数

64位整数,32位编程下多用于存储或时间计算。

支持unsigned 和 signed写法。十六进制数字是用$表示,$0到$FFFFFFFF
日期和其它类型均可以用整数来表示,如
整数a=2018-8-15 12:00;不要带引号。
引号是文本,如
整数a; a="提示消息";文本s="中文内容";文本dat[16]="$374727774367008C7A";前面加$时把十六进制字符转换成二进制数据块
第三节 转义符号
C语言默认把\进行转义。在需要使用\字符时要再加\
如D:\rxjh,就会把\r转成换行符。需要写成d:\\rxjh
感觉这样不太方便,于是仅保留\r\n同时出现时,则转换成换行符加回车符。
其它符号需要加单引号''如:'\r'为换行符,例:s="您好'\r'人类";
'\n'为回车符;'\t'为水平制表符;'\f'为分页符;'\v'为垂直制表符;
''为双引号;'\0'为0字符;'\1'为缩进符号;'\2'为两个换行和回车符组合
另外,在需要表示ASII码时,如strchr函数搜索字符,可以用\转换文字,如strchr(str,\s);ASII码只能用单个字符;
第四节 运算符号

符号

类型

中文释义

+

算术

算术

*

算术

/

算术

|

逻辑 位运算

^

逻辑 位运算

异或

&

逻辑 位运算

%

算术

求余

++

算术

自加

算术

自减

!

逻辑 位运算

~

位运算

取反

=

赋值

等于

!= <>

关系比较

不等于

<

关系比较

小于

>

关系比较

大于

>=

关系比较

大于等于

<=

关系比较

小于等于

=>

关系比较

等大于

=<

关系比较

等小于

>>

位运算

右移

>>

位运算

左移

||

多条件判断

或者

&&

多条件判断

而且

@

取内存地址

@变量名或小程序名

~

取内存处的数据

~a+100 取a地址的值再加100

( )

参数传递 数组成员

加(整数 a, 文本 b); 整数 ab(10);

[ ]

定长文本

文本 st[15];加末尾0占16字节

{ }

代码片段

用于条件判断或循环

SEC编程使用的符号,除“或者”和“而且”外,全部采用英文半角符号,不可以使用中文全角符号。
原因是中文的加减乘除等符号,在很多输入法里打不出来。如果使用汉字的加、减、乘、除等,前后就要带空格。
为了输入简便,所以运算符号统一采用英文半角符号,输入法在中文状态时,切换为半角符号,方便书写编程代码。

@和~的使用:默认情况下,提交参数是按值传递的。比如a变量的值是100,提交的是100这个数值。
有时候传递的变量是把想要的结果,反馈输出到这个变量,就需要在变量前加@符号,就变成传递变量的地址。
有时候变量的值就是一个内存地址,我们要读取该段内存的某个位置处的数值,就要使用~这个符号。
假设变量a的值是4001234h,b=~a;就是取4001234h内存处的整数值到变量b
关于赋值运算的写法:
常见的自身增加或相乘等,可以用+=、-=、*=、/=、|=、&=、%=、^=这样的写法。
也可以用更简单的a+2;(a=a+2) a-3;(a=a-3) a*b+3;(a=a*b+3) a/10;(a=a/10)
也就是运算符号后面的等于可以不写,但需要注意一点。自加++自减–和加数字减数字。
是有不同的汇编写法,所以加减后面不写等号,就只能是数字。变量和表达式要用+=、-=
例如a+=b; b-=c*5; 而其它运算则不论是数字、变量和表达式,等号写不写都一样计算。
第五节 编程语法

英文语法

中文语法

简单用法

sub

小程序

小程序(整数 a,文本b,字节 c);

end

结束

程序片断代码的末尾,加上此语句表示此段程序结束。

scls

子类

子类{整数 变量1,变量2;小程序 登陆(账号)…结束;}

datab

数据表

数据表{整数 a,文本 b[16],字节 c;}自定义表头结构

query

读取表

读取表(数据库名,数据表头);按指定结构把数据表读取到内存中。

indexof

索引

索引(数组名,查询值);快速从数组中检索数值,返回序号,未找到返回-1

addin

加索引

加索引(数组名,表名,字段名);把表的字段值加入数组,用来索引

new

新建

角色=新建 玩家类(等级=1,性别=0);用于新建子类,可选括号内设定初始值。

import

导入

导入 StrStrI 支持库 "SHELL32.DLL",2; 导入dll的函数,有2个参数

include

引入

引入 "Windows.inc"; 用于引用库文件

const

常量

常量 内容=”SEC”; const IDYES = 6;

type

类型

类型 Form{整数 hwnd;整数 WndProc;}

export

导出

写法与小程序类似,用于写dll时,此函数功能可被其它程序调用

return

返回

返回结果给调用者,例如返回(N1* N2);可不加括号直接返回

if

如果

如果(消息=窗口关闭){停止(0);}

iif

如果是

a =如果是(消息=0,10,500);相当于三态语句

else

否则

必须放在如果语句后面,否则{返回(1);}

switch

判断

判断(消息)为 窗口关闭{停止(0);}

while

循环到

判断条件成立则循环,直到条件不成立. 循环到(a<1000){a++;}

for

循环于

For(i=0;i<100;i++){i从0到99,每次加1,循环一百次}

foreach

循环数组

循环数组(ab){}可循环读或者写数组或特定数据段的值

do

循环

循环(10){…}10次停止;循环{…i–;}i=0停止;循环{…i+2;}(i=100)

Goto,jump

跳到

ABC: ….. goto ABC; 开头: …. 跳到 开头;

lib

支持库

import abort lib "MSVCRT.DLL",0;

local

局部

局部 整数 图片; local word pic;

preserve

保留

整数 数组();重置 数组[20]; 保留 数组[200];会保留原来的20个

reserve

重置

整数 数组(); 重置 数组[200];把数组重新分配200个,且数据清空

destroy

销毁

销毁 数组; 把数组销毁,释放内存。

direct

置入

置入[字节 $68]; 置入[整数 $20];相当于写机器语言

order

指令

指令[6820088800];连续的十六进制机器码

movads

传址

传址[$4001200,a];可以把变量值或数值写入指定内存位置

bytes

字节组

字节组 tmp[15,$20,60,128];

with

列举

列举 form{.s=1;.l=5;}等效于form.s=1;form.l=5;

ubound

上标

上标(数组);取一个数组的上标

lbound

下标

下标(数组);取一个数组的下标

len

长(str);文本变量取文字长度,否则是结构长度

clng

转整数

clng(str);把字符转换成整数

csng

转小数

sg=转小数(str);把字符转换成小数

alias

别名

导入 信息框 别名 MessageBoxA lib "USER32.DLL",4;

ascii

英文码

import AppendMenu ascii lib "USER32.DLL",4;等效于 AppendMenuA

unicode

统一码

等效于调用的函数名后面加“W”,同一名称函数只能选ascii和unicode一种

picon

程序图标

程序图标“sec.ico”;

读取数据表是最近才更新的功能,可以自定义数据结构,然后把数据读取到相应结构内存中。通常我们使用ADO对象来读写数据,
由于记录集对象结构过于复杂,每行每列的类型、名称、序号、长度、缓冲区指针和长度,以及各种属性、方法等。
可是实际应用中,仍然需要把记录集中的数据,再全部读取到自己定义的结构内存中,所以我增加了直接读取数据到指定结构的功能。
只要需要的字段数据读取出来,还可以直接改变数据类型。例如数据库中字段类型为整数,程序需要把整数类型数据全部转换成小数类型。
同样的数值15,整数和单精度小数都占四字节,但是它们的数据却大不相同。程序定义数据表结构时为小数,数据库里是整数,就可以全部提取为小数数据
读取后的数据表读写方法为:表名(行号).字段名。如:lv=玩家表(0).等级;玩家表(3).职业=5; 表名.rows为行数 表名.cols为列数
读取数据是按查询的sql语句里的表名和字段顺序,并不是按照程序里的表名和字段名,所以程序代码里的表名和字段名是完全自定义的。
数据表结构类型,跟自定义类型(type)的性质类似,类型是不支持数组的,所以可以用数据表代替类型,当自定义数组类型使用。
长(表名)获取的是类型结构或者说每一行的数据长度,表名.len是申请的数组长度,使用前需要 重置 表名(数量)。
申请的长度数量要大于或等于查询表的记录数,读取完数据之后,得到 表名.rows 数据表的实际读取记录数。
数据表的序号是从0开始的,100行记录就是按序号0-99获取。读取的数据存放是一段连续的内存,行列是连续整齐排列的。
第六节 文本、数组和内存指针
文本是一段文字数据,数组是按数据类型连续排列的数据,内存指针是内存中某个位置的数据。
它们都是用一个整数地址来表示所在位置,操作是比较近似的。
可以使用API函数进行读写,程序还提供一些便捷的指针操作。 如 文本 s="sdkfskd";
s(0)=\b;就把文本的第一个字符替换成字符b;
非定义的数组,通常是读写是按一字节
如 整数 m是一个内存地址
m(13)=128;就是把128这个数字写入第14个字节处
a=m(10);是从第11字节处读取1字节。
在括号后面加%就可以读写两字节,加&读写四字节。
如m(13)%=32128;a=m(2)%;
m(13)&=$AF32C128;如果(m(2)&=889654){};
也可以把变量对内存地址进行读写
变量只能是字节 整形 整数 小数等4字节以内的数字类型
如 文本 a="$32A4B8C6428B";字节 b;正整形 i;
bb>a+2;就把a的第三位置0xB8,换成了50
i读写数据的长度是按定义的变量类型长度,只有1、2、4字节这三种。
第七节 全局变量和局部变量
在小程序段内申请的变量包括提交的参数都是局部变量。
在子类或者数据表头内申请的变量属性子类变量。
在其它地方(小程序和子类外)申请的变量是全局变量。
全局变量包括字符、字节、整形、正整形、整数、正整数、小数、浮点、大数和自定义类型。
局部变量目前只有整数、小数和文本这三种。任何变量在作为参数传递的时候,均为4字节数字。
所以大于4字节的类型比如文本、浮点和自定义类型,提交的是变量的地址,而不是值。否则是按值传递。
因此小程序的参数通常只有整数和小数这两种,文本提交过来也是一个整数地址。
小数是提交参数要直接进行小数运算时,才需要特别指定。除此之外、任何提交的参数都可以写成整数类型。
子类本身并没有特别定义,它可以是全局的整数变量,也可以是局部整数,也可以是整数数组。
全局变量是编译程序时,提前在数据区段申请的。局部变量仅在小程序段内有效,属于临时存储空间。
子类和数据表的变量,是在程序运行之后,去动态申请的内存区块。子类使用前需要使用 新建 子类名称
数据表相当于自定义二维数组,使用前需要先“重置”数组的长度,该长度不能小于所读取数据的行数。
数据表可以使用数组的重置、保留和销毁方法,而子类只可以使用新建和销毁这两个方法。
子类和数据表的区别:
子类申请的内存区域并不是清零的,所以在新建的时候,可以用:玩家=新建 角色类(等级=1,职业=2,性别=1);
去设置子类变量的数值,未清零的内存数据是随机的,也就是说子类变量在新建子类时数值是不确定的。)
而数据表在重置长度后,内存区域是清零的,所有变量此时值都是0,数据表也可以用作自定义数组。
成员变量使用方法是:玩家表(0).性别,括号内是行号也就是数组的标号,是从0开始计数的。
子类变量的使用方法是:玩家.性别。如果申请的子类变量是数组形式,如:角色类 玩家()
也可以像数组一样,先 重置 玩家(1000),玩家(0)=新建 角色类; 玩家(0).性别=1;
但是销毁只能是先销毁一个成员,销毁 玩家(0)。或者 N=玩家(0);销毁 N;
子类变量在子类内部可以不加前缀直接访问,如:等级=100;职业=3;xb=性别等等。
全局变量、子类变量的名称是绝对不能重复的,重名就会优先判定为全局变量。
局部变量的申请和使用:
局部变量除文本外都是4字节,文本可以大于4字节,必须是4的整数倍。
局部变量最多可以申请空间1-2M,不使用局部变量则不申请,少量使用时(限120字节)
局部整数和小数变量30个以内,文本按申请的长度算。需要更多变量时,变量前加局部或local
并且放在小程序开头第一行,编译时候才好预计此小程序段需要申请多大的堆栈空间。如:局部 文本 ss[32];
局部变量与全局变量区别是很大的,编程语法上尽量做到能兼容使用,方便程序灵活处理。
局部文本和全局文本都可以像操作数组一样,读写其中每一字节。如:文本 s[16]="abc";s(2)=\d;
也可以像其它变量一样,写入数字。如:s=0;文本就被清空,s=$31323334;文本开头就等于4321
因为十六进制是反转的,最后的34写入字符的第一字节,对应文字是4,用s(1)读取出来就是52
第八节 常数的申请和使用
编程所用到的常数非常多,我们往往能很容易查到这个常数,却很难查到其对应的数值。
SEC简易编程收录了大约几万个通用常数,由于常数都是英文的,我只将最常用的一些进行汉化。
用中文起名的时候,还要考虑尽量不跟编程使用的关键字和变量名冲突,那么可以采用实用组合方案。
例如网络通讯必用的常数选项,FD_READ=数据可读 FD_WRITE=数据可写 FD_CONNECT=连接成功
FD_CLOSE=断开连接 FD_ACCEPT=接受连接 这些选项在实际运用中往往是组合在一起使用。
所以我们可以一到两个字来代表一个常数,读=FD_READ 写=FD_WRITE 连=FD_CONNECT 断=FD_CLOSE 监=FD_ACCEPT
用这些字组合之后起名,就不容易重名了,例如:常量 读写断开=[FD_READ | FD_WRITE | FD_CLOSE];
常量 读写连断=[FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE],监听断开=[FD_ACCEPT | FD_CLOSE];
|是或运算,通俗地说,就是数值里不包含该值就加上,如果包含就不加。而加号则无论是否包含都会相加。
多个常数组合时前后要加中括号,编译时就会计算成一个数值进行使用,而直接在代码里写FD_READ | FD_WRITE
是不会提前计算的,而是编译成相关运算的机器语言。因为编写代码时实际情况极其复杂,是很难判断出是常数组合
还是要与其它变量或者小程序的运算结果,或者是与外部函数返回的结果进行实际运算。所以尽量用汉字给组合命名
也只有中文才能做到如此方便简单。常数组合可以使用的符号有:+加、-减、|或、&与、^异或、!非。
其中!非运算是对当前常数进行非运算,如:!1=-2,它前面需要加其它符号和之前的常数进行运算。
部分常量中英文对照表:

中文名字

常量数值

英文名称

释义

初次调用

1

DLL_PROCESS_ATTACH

当这个DLL被映射到了进程的地址空间时

创建线程

2

DLL_THREAD_ATTACH

一个线程正在被创建

结束线程

3

DLL_THREAD_DETACH

线程终结

结束调用

0

DLL_PROCESS_DETACH

这个DLL从进程的地址空间中解除映射

窗口创建

1

WM_CREATE

新建一个窗口

程序关闭

2

WM_DESTROY

销毁一个窗口

窗口移动

3

WM_MOVE

移动一个窗口

窗口缩放

5

WM_SIZE

改变一个窗口的大小

窗口激活

6

WM_ACTIVATE

一个窗口被激活或失去激活状态

获得焦点

7

WM_SETFOCUS

将焦点转向一个窗口

失去焦点

8

WM_KILLFOCUS

使一个窗口失去焦点

可用状态

10

WM_ENABLE

使一个窗口处于可用状态

是否重绘

11

WM_SETREDRAW

设置窗口是否能重绘

设置文本

12

WM_SETTEXT

设置一个窗口的文本

获取文本

13

WM_GETTEXT

复制窗口的文本到缓冲区

文本长度

14

WM_GETTEXTLENGTH

得到窗口的文本长度(不含结束符)

窗口重绘

15

WM_PAINT

当需要绘制一部分应用窗口的时候,发送本消息给所有者程序

窗口关闭

$0010

WM_CLOSE

用户关闭窗口时会发送本消息,紧接着会发送WM_DESTROY消息

系统关机

$0011

WM_QUERYENDSESSION

关机或注销时系统会按优先级给各进程发送WM_QUERYENDSESSION,告诉应用程序要关机或注销了

消息结束

$0012

WM_QUIT

关闭消息循环结束程序的运行

窗口恢复

$0013

WM_QUERYOPEN

最小化的窗口即将被恢复以前的大小位置

擦除背景

$0014

WM_ERASEBKGND

当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)

系统变色

$0015

WM_SYSCOLORCHANGE

当系统颜色改变时,发送本消息给所有顶级窗口

开始关机

$0016

WM_ENDSESSION

关机或注销时系统会发出WM_QUERYENDSESSION消息,然后将本消息发送给应用程序,通知程序会话结束

时间错误

$0017

WM_SYSTEMERROR

系统时间错误

显示窗口

$0018

WM_SHOWWINDOW

发送本消息给一个窗口,以便隐藏或显示该窗口

绘制控件

$0019

WM_CTLCOLOR

在每个控件开始绘制之前,都会向其父窗口发送此消息,可用来设置控件显示文本的前景色、背景色以及字体。

配置更新

$001A

WM_WININICHANGE

读写\"win.ini\"时会发送本消息给所有顶层窗口,通知其它进程该文件已被更改

设备模式

$001B

WM_DEVMODECHANGE

改变设备模式设置(\"win.ini\")时,处理本消息的应用程序可重新初始化它们的设备模式设置

界面激活

$001C

WM_ACTIVATEAPP

窗口进程激活状态改动,正被激活的窗口属于不同的应用程序

字库更新

$001D

WM_FONTCHANGE

当系统的字体资源库变化时发送本消息给所有顶级窗口

时间改变

$001E

WM_TIMECHANGE

当系统的时间变化时发送本消息给所有顶级窗口

模态窗口

$001F

WM_CANCELMODE

发送本消息来取消某种正在进行的模态(操作)(如鼠示捕获),例如:启动一个模态窗口时,父窗会收到本消息;该消息无参数

捕获光标

$0020

WM_SETCURSOR

若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口

拖曳后窗

$0021

WM_MOUSEACTIVATE

当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口

通知子窗

$0022

WM_CHILDACTIVATE

点击窗口标题栏或当窗口被激活、移动、大小改变时,会发送本消息给MDI子窗口

窗口改变

$0024

WM_GETMINMAXINFO

当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息

图标重绘

$0026

WM_PAINTICON

当一个最小化的窗口图标将被重绘时发送本消息

图标背景

$0027

WM_ICONERASEBKGND

本消息发送给某个最小化的窗口,仅当它在画图标前它的背景必须被重画

切换焦点

$0028

WM_NEXTDLGCTL

发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置

打印变化

$002A

WM_SPOOLERSTATUS

每当打印管理列队增加或减少一条作业时就会发出本消息

外观改变

$002B

WM_DRAWITEM

按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者

控件创建

$002C

WM_MEASUREITEM

按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者

删除列表

$002D

WM_DELETEITEM

列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者

列表按键

$002E

WM_VKEYTOITEM

LBS_WANTKEYBOARDINPUT风格的列表框会发出本消息给其所有者,以便响应WM_KEYDOWN消息

列表字符

$002F

WM_CHARTOITEM

LBS_WANTKEYBOARDINPUT风格的列表框会发送本消息给其所有者,以便响应WM_CHAR消息

指定字体

$0030

WM_SETFONT

指定控件所用字体

获取字体

$0031

WM_GETFONT

得到当前控件绘制其文本所用的字体

设置热键

$0032

WM_SETHOTKEY

为某窗口关联一个热键

拖放小窗

$0037

WM_QUERYDRAGICON

本消息发送给最小化的窗口,当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。

新项位置

$0039

WM_COMPAREITEM

可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置

显存不足

$0041

WM_COMPACTING

显示内存已经很少了

串口事件

$0044

WM_COMMNOTIFY

Win3.1中,当串口事件产生时,通讯设备驱动程序发送消息本消息给系统,指示输入输出队列的状态

改变窗口

$0046

WM_WINDOWPOSCHANGING

本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数

窗口变化

$0047

WM_WINDOWPOSCHANGED

本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数

系统暂停

$0048

WM_POWER

当系统将要进入暂停状态时发送本消息(适用于16位的windows)

传递数据

$004A

WM_COPYDATA

当一个应用程序传递数据给另一个应用程序时发送本消息

取消日志

$004B

WM_CANCELJOURNAL

当用户取消程序日志激活状态时,发送本消息给那个应用程序。该消息使用空窗口句柄发送

控件事件

$004E

WM_NOTIFY

当某控件的某事件已发生或该控件需得到一些信息时,发送本消息给其父窗

帮助按键

$0053

WM_HELP

按下后,若某菜单是激活的,就发给此窗口关联的菜单;否则就发送给有焦点的窗口;若当前都没有焦点,发给当前激活的窗口

用户出入

$0054

WM_USERCHANGED

当用户已登入或退出后发送本消息给所有窗口;当用户登入或退出时以及系统更新用户设置时,立即发送本消息

消息判断

$0055

WM_NOTIFYFORMAT

公用控件、自定义控件和其父窗通过本消息判断控件在WM_NOTIFY通知消息中是使用ANSI还是UNICODE

点击右键

$007B

WM_CONTEXTMENU

当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单

改变风格

$007C

WM_STYLECHANGING

当调用SetWindowLong函数将要改变一个或多个窗口的风格时,发送本消息给那个窗口

风格变化

$007D

WM_STYLECHANGED

当调用SetWindowLong函数改变一个或多个窗口的风格后,发送本消息给那个窗口

调分辨率

$007E

WM_DISPLAYCHANGE

当显示器的分辨率改变后,发送本消息给所有窗口

窗口图标

$007F

WM_GETICON

本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄

设置图标

$0080

WM_SETICON

应用程序发送本消息让一个新的大图标或小图标与某窗口相关联

首创窗口

$0081

WM_NCCREATE

当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送

区外删除

$0082

WM_NCDESTROY

本消息通知某窗口,非客户区正在销毁

区外调整

$0083

WM_NCCALCSIZE

当某窗口的客户区的大小和位置须被计算时发送本消息

光标离开

$0084

WM_NCHITTEST

当用户在在非客户区移动鼠标、按住或释放鼠标时发送本消息(击中测试);若鼠标没有被捕获,则在得到光标之后发出

区外重绘

$0085

WM_NCPAINT

当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口

区外激活

$0086

WM_NCACTIVATE

本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口

切换控件

$0087

WM_GETDLGCODE

发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件

经过区外

$00A0

WM_NCMOUSEMOVE

当光标在某窗口的非客户区内移动时,发送本消息给该窗口

区外按下左键

$00A1

WM_NCLBUTTONDOWN

当光标在某窗口的非客户区内的同时按下鼠标左键,会发送本消息

区外释放左键

$00A2

WM_NCLBUTTONUP

当用户释放鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息

区外双击左键

$00A3

WM_NCLBUTTONDBLCLK

当用户双击鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息

区外按下右键

$00A4

WM_NCRBUTTONDOWN

当用户按下鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息

区外释放右键

$00A5

WM_NCRBUTTONUP

当用户释放鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息

区外双击右键

$00A6

WM_NCRBUTTONDBLCLK

当用户双击鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息

区外按下中键

$00A7

WM_NCMBUTTONDOWN

当用户按下鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息

区外释放中键

$00A8

WM_NCMBUTTONUP

当用户释放鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息

区外双击中键

$00A9

WM_NCMBUTTONDBLCLK

当用户双击鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息

键盘起始

$0100

WM_KEYFIRST

用于WinCE系统,本消息在使用GetMessage和PeekMessage函数时,用于过滤键盘消息

键盘按下

$0100

WM_KEYDOWN

当一个非系统按键被按下时(键没有被按下),会发送本消息给拥有键盘焦点的窗口

键盘松开

$0101

WM_KEYUP

当一个非系统按键被释放弹起时(键没有被按下),会发送本消息给拥有键盘焦点的窗口

键入字符

$0102

WM_CHAR

按下某按键,并已发出WM_KEYDOWN、WM_KEYUP消息,本消息包含被按下的按键的字符码

点击按键

$0103

WM_DEADCHAR

\"死字符\"消息,当使用TranslateMessage函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口

ALT键盘按下

$0104

WM_SYSKEYDOWN

当用户按住键的同时又按下其它键时,发送本消息给拥有焦点的窗口

ALT键盘松开

$0105

WM_SYSKEYUP

当用户释放一个按键的同时键还按着时,发送本消息给拥有焦点的窗口

ALT键入字符

$0106

WM_SYSCHAR

当WM_SYSKEYDOWN消息被TranslateMessage函数翻译后,发送本消息给拥有焦点的窗口,注:键被按下

ALT点击按键

$0107

WM_SYSDEADCHAR

\"死字符\"消息,当使用TranslateMessage函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口

键盘结束

$0108

WM_KEYLAST

用于WinCE系统,本消息在使用GetMessage和PeekMessage函数时,用于过滤键盘消息

窗口初始

$0110

WM_INITDIALOG

在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务

单击左键

$0111

WM_COMMAND

用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送

单击窗口

$0112

WM_SYSCOMMAND

当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时,窗口会收到本消息

定时事件

$0113

WM_TIMER

发生了定时器事件

水平滚动

$0114

WM_HSCROLL

当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口

垂直滚动

$0115

WM_VSCROLL

当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口

按下菜单

$0116

WM_INITMENU

当一个菜单将被激活时发送本消息,它发生在用户点击了某菜单项或按下某菜单键。它允许程序在显示前更改菜单

弹出菜单

$0117

WM_INITMENUPOPUP

当一个下拉菜单或子菜单将被激活时发送本消息,它允许程序在它显示前更改菜单,却不更改全部菜单

选择菜单

$011F

WM_MENUSELECT

当用户选择一条菜单项时,发送本消息给菜单的所有者(一般是窗口)

菜单激活

$0120

WM_MENUCHAR

当菜单已被激活且用户按下了某菜单字符键(括号括着、带下划线,不同于快捷键),发送本消息给菜单的所有者

模框空载

$0121

WM_ENTERIDLE

当一个模态对话框或菜单进入空闲状态时,发送本消息给它的所有者,就是在处理完先前的消息后,消息队列为空时

菜单右键

$0122

WM_MENURBUTTONUP

本消息允许程序为菜单项提供一个感知上下文的菜单(即快捷菜单)

菜单点击

$0123

WM_MENUDRAG

当用户拖动菜单项时,发送本消息给拖放菜单的拥有者,可让菜单支持拖拽,可使用OLE拖放传输协议启动拖放操作

单击菜单

$0126

WM_MENUCOMMAND

当用户在一个菜单上作出选择时,会发送本消息,菜单要具有MNS_NOTIFYBYPOS风格(在MENUINFO结构体中设置)

绘制弹窗

$0132

WM_CTLCOLORMSGBOX

系统绘制消息框前发送本消息给消息框的所有者窗口,可用来设置消息框的文本和背景色

绘制编辑

$0133

WM_CTLCOLOREDIT

当一个编辑框控件将要被绘制时,发送本消息给其父窗;可用来设置编辑框的文本和背景色

绘制列表

$0134

WM_CTLCOLORLISTBOX

当一个列表框控件将要被绘制前,发送本消息给其父窗;可用来设置列表框的文本和背景色

绘制按钮

$0135

WM_CTLCOLORBTN

息设置按钮的背景色

绘制对话

$0136

WM_CTLCOLORDLG

设置对话框的背景色,通常是在WinnApp中使用SetDialogBkColor函数实现

绘制滚条

$0137

WM_CTLCOLORSCROLLBAR

设置滚动条的背景色

绘制静态

$0138

WM_CTLCOLORSTATIC

设置一个静态控件的背景色

鼠标起始

$0200

WM_MOUSEFIRST

鼠标移动时发生(与WM_MOUSEMOVE等值),常用于判断鼠标消息的范围

鼠标移动

$0200

WM_MOUSEMOVE

当鼠标在窗口客户区移动时

按下左键

$0201

WM_LBUTTONDOWN

当鼠标左键在窗口客户区按下

释放左键

$0202

WM_LBUTTONUP

当鼠标左键在窗口客户区放开

双击左键

$0203

WM_LBUTTONDBLCLK

当鼠标左键在窗口客户区双击

按下右键

$0204

WM_RBUTTONDOWN

当鼠标右键在窗口客户区按下

释放右键

$0205

WM_RBUTTONUP

当鼠标右键在窗口客户区放开

双击右键

$0206

WM_RBUTTONDBLCLK

当鼠标右键在窗口客户区双击

按下中键

$0207

WM_MBUTTONDOWN

当鼠标中键在窗口客户区按下

释放中键

$0208

WM_MBUTTONUP

当鼠标中键在窗口客户区放开

双击中键

$0209

WM_MBUTTONDBLCLK

当鼠标中键在窗口客户区双击

滚轮转动

$020A

WM_MOUSEWHEEL

当滚动鼠标滚轮时

鼠标结束

$020A

WM_MOUSELAST

WM_MBUTTONDBLCLK的别名,通常用于判断鼠标消息的范围,对应的还有WM_MOUSEFIRST(鼠标起始)

剪切

$0300

WM_CUT

应用程序发送本消息给一个编辑框或组合框来删除当前选择的文本

复制

$0301

WM_COPY

应用程序发送本消息给一个编辑框或组合框,以便用CF_TEXT格式复制当前选择的文本到剪贴板

粘贴

$0302

WM_PASTE

应用程序发送本消息给编辑框或组合框,以便从剪贴板中得到数据

清除

$0303

WM_CLEAR

应用程序发送本消息给编辑框或组合框,以清除当前选择的内容

撤销

$0304

WM_UNDO

应用程序发送本消息给编辑框或组合框,以撤消最后一次操作

下载安装

    
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.daxuejiayuan.com/18770.html