动和表格驱动是提供给开发人员的统一接口,开发人员通过实现该接口的方式开发功能模块。
事件驱动方式:
1、启动应用程序,装载和显示窗体,产生Form_Load和Form_Show事件
2、窗体或窗体上的控件接收事件,事件可由用户引发(例如键盘或鼠标操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如当代码装载其他窗体时产生的Load事件)
3、如果在相应的事件过程中存在代码,就执行代码 4、应用程序等待下一次事件
例:.获取和修改计算机名字的方法
1.)插入一个新模块,在其中添加如下代码:
′声明 GetComputerName
Declare Function GetComputerName Lib〃kernel 32〃Alias〃 GetComputerNameA〃(Byval lpBuffer As String,nSize As Long)As Long ′声明 SetComputerName
Declare Function SetComputerName Lib〃kernel 32〃Alias 〃
SetComputerNameA〃(Byval lp ComputerName As String)As Long ′定义一个获取计算机名字的函数
Public Function GetCName (CName) As Boolean Dim sComputerName As String ’计算机的名字 Dim lComputerName As Long ’计算机名字的长度 Dim lResult As Long
’GetComputerName的返回值 Dim RV As Boolean
′GetCName返回值,若为TRUE则表示操作成功 lComputerNameLen=256
sComputerName=Space (lComputerNameLen)
lResult=GetComputerName (sComputerName,lCompputerNameLen)
If lResult 〈〉0 Then Cname=Left$ (sComputerName,lComputerNameLen) RV=True
Else RV=False End If
GetCName=RV End Function
′定义一个修改计算机名字的函数
Public Function SetCName (CName ) As Boolean Dim lResult As Long Dim RV As Boolean
lResult=SetComputerName (CName)
If lResult 〈〉0 Then RV=True′修改成功 Else RV=False End If
SetCName=RV End Function
2).在窗体中添加一命令按钮Command1,双击该按钮并在其中添加如下代码: Sub Command1-Click () DIM CN AS String x=GetCName (CN)
Print 〃This Computer Name is :〃,CN CN=〃MYCOMPUTER〃 x=SetCName (CN )
Print 〃Now the Computer name is :〃,CN End Sub
1)对于完成同一个实际的任务来说,一般而言菜单驱动方式较数据表格驱动方式和事件驱动方式容易
2)相对于用户的工作量来说,菜单驱动方式较数据表格驱动方式和事件驱动方式的工作量大。
第四章
1、将中点画线算法推广以便能画出任意斜率的直线
算法设计:
(1) 输入直线的起点坐标P0(x0,y0)和终点坐标P1(x1,y1).
(2) 定义直线当前点坐标x和y,定义中点偏差判别式d、直线斜率k、
像素点颜色rgb
(3) x= x0,y= y0计算d=0.5-k,k=( y1-y0)/(x1-x0), rgb=RGB=(0,0,255). (4) 绘制点(x,y),判断d的符号,若d<0,则(x, y)更新为(x+1,y+1),
d更新为d+1-k,否则(x, y)更新为(x+1,y),d更新为d-k.
(5) 如果当前点x小于(x1,重复步骤(4),否则结束。
程序主要代码:
MidPointLine(x0,y0,x1,y1,color) {
int a,b,delta1,delta2,d,x,y;
a = y0 – y1; b = x1 – x0; d = 2*a – b; delta1 = 2 * a; delta2 = 2 * (a+b); x = x0; y = y0; if (a
drawpixel(x, y, color); else
drawpixel(y,x,color); while (x > x1) {
If (d<0) {
x++; y++;
d+ = delta2; } Else {
X++;
D+=delta1; }
Putpixel(x,y,color); } Else
While (x { If (d<0) { x--; y++; d-=delta3; } Else { x--; d-=delta1; } Putpixel(x,y,color); } } 2、采用整数Bresenham算法,为一台计算机编制直线扫描转换程序。从键盘敲入两端点坐标,就能在显示器屏幕上画出对应的直线。 Void DrawLine(int color) { int x0,y0,x1,y1,color, I; scanf( “%d, %d, %d, %d”, &x0, &y0, &x1, &y1); dx=x1 – x0; dy=y1 – y0; e = -dx; x = x0; y = y0; for ( i=0; i<=dx; i++) { putpixel(x, y, color); x=x+1; e=e+2*dy; if (e>=0) { y = y + 1; e = e – 2 * dy; } } } 4、试编写按逆时针方向生成第二个8分圆的中点算法

