汉字图形窗口界面设计方法及函数编程技巧

时间:2023-06-01 09:13:03 其他范文 收藏本文 下载本文

汉字图形窗口界面设计方法及函数编程技巧(精选6篇)由网友“琉果”投稿提供,下面是小编整理过的汉字图形窗口界面设计方法及函数编程技巧,欢迎大家阅读分享借鉴,希望对大家有所帮助。

汉字图形窗口界面设计方法及函数编程技巧

篇1:汉字图形窗口界面设计方法及函数编程技巧

汉字图形窗口界面设计方法及函数编程技巧

摘要 该文讨论了汉字图形窗口界面设计的一般方法,给出了窗口生成,窗口管理,菜单生成与管理,鼠标与键盘管理等实现的子函数,并给出了部分C语言源程序。这些函数的组合可以设计出丰富的.汉字图形窗口界面。

一、图形窗口设计函数

主要包括窗口生成与管理函数,如窗口生成,窗口打开,窗口关闭,窗口删除等。

1.窗口结构定义方法

typedef struct gwin {

int x0,y0,x1.y1; /*窗口位置及大小*/

int Border; /*窗口边框类型*/

int Wcolor; /*窗口背景颜色*/

char Wstate; /*窗口状态标志*/

char far *Buffer; /*指向窗口缓冲区指针*/

}GWIN;

在GWIN中,Border为窗口的边框属性,可以根据不同要求设计出多种边框类型业,以美化窗口界面。

2.窗口子函数

窗口生成子函数:Gwin * GwinCreate(x0,y0,x1,y1,border,colo

r)

int x0,y0,x1,y1; /*窗口位置及大小*/

BorderMode border; /*窗口边框类型*/

int color; /*窗口背景颜色*/

窗口显示子函数:GwinDisplay(GWIN *w)

w为用GwinCreate生成的窗口指针,即此函数画出窗口。

窗口打开子函数:GwinOpen(GWIN * w)

此函数调用GwinDisplay来显示窗口,并存储屏幕。

窗口关闭子函数:GwinClose(GWIN * w)

此函数关闭已打开的窗口,恢复屏幕,但此窗口数据还保存,可再次打开。

窗口删除子函数:GwinKill(GWIN * w)此窗口彻底清除窗口,不可重新打开。

3.部分程序

下面给出实现上述功能的C语言程序

/*Windows Create*/

#include

#include

#include

#include

#include

#include

#define CR 0x0d

#define Esc 0x1b

#define Left 0x4b

#define Right 0x4d

#define Up 0x4d

#define Down 0x50

#define OPEN 1 /*窗口为打开状态*/

#define CLOSE 0 /*窗口为关闭状态*/

#define MOUSE 0 /*是否有鼠标移动*/

/*定义窗口边框类型*/

typedef enum {

NoBorder,/*普通窗口,系统默认值*/

TBorder,/*窗口有凸边框类型*/

WBorder,/*窗口有凹边框类型*/

TWBorder,/*窗口有凸凹边框类型*/

WTBorder,/*窗口有凹凸边框类型*/

CBorder,/*窗口有汉字边框类型*/

... /*其它窗口类型*/

}BorderMode;

GWIN * GwinCreate(x0,y0,x1,y1,border,color)

int x0,y0,x1,y1;

BorderMode border;

int color;

{

GWIN *w;

w=malloc(sizeof(GWIN));

w->x0=x0;

w->y0=y0;

w->x1=x1;

w->y1=y1;

if(border==NoBorder)w->Border=NoBorder;

[1] [2] [3] [4]

篇2:PowerBuilder数据窗口编程技巧

PowerBuilder数据窗口编程技巧

PowerBuilder取得巨大成就的原因就是有功能强大和灵活多变的Datawindow对象,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用。

1、如何创建一个具有逐渐递增求和功能的报表,如下形式:

Quantity Running Total

5,000 5,000

2,500 7,500

3,000 10,500

12,000 22,500

对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。

2、数据窗口的数据送缓冲区之前确认的四个步骤

如果我们不清楚数据窗口中的数据在送入缓冲区之前所发生的一切,在保存数据时就不明白错误发生的原因,找不出错误的根源。

PB首先判断数据类型是否正确。如不正确则触发ItemError事件。

接着判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。

然后判断是否有数据被改动。

最后判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。

3、如何在DataWindow中用数据类型为Datetime的列为条件进行查寻

(1) 当要查找的日期条件是一常数时使用如下表达式:

ls_Find = “datetime_col = DateTime ('1/1/')”

(2)当要查找的日期条件是一个变量时使用如下的表达式:

ls_Find = “datetime_col = DateTime ('” + ls_Date + “')”

(3) 当要查找的日期条件是一个DateTime

数据类型时使用如下表达式:

ls_Find = “datetime_col = DateTime '” + String (ldt_DateTime) + “')”

4、设置数据窗口Boolean型属性的三种方法

PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, 'Yes'/'No'。例如:

dw_1.Object.address.Visible = 0

dw_1.Object.address.Visible = False

dw_1.Object.address.Visible = 'No'

PowerBuilder在处理时以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。

5、如何在数据窗口(Datawindow)中快速删除多行

在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:

FOR ll_RowOn = 1 TO dw_1.RowCount

dw_1.DeleteRow(ll_RowOn)

NEXT

这里提供一个快速的删除方法把要删除的'行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:

dw_1.RowsMove(dw_1, 1, dw_1.RowCount,

Primary!, dw_1, 1, Delete!)

但需注意的是不要忘了过滤的行在不同的缓冲区中。

6、如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行

首先对你要显示唯一值的列进行排序:“money”,然后增加如下过滤字符串:“ money < >money [-1] or GetRow () = 1”

7、如何在分组形式的DataWindow中分别显示各组的行号

当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为GetRow() - First(GetRow() for Group 1) + 1的计算列。

8、如何改变列的字体颜色,以提醒用户此列已做修改

在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))

。在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。这个表达式主要用column_name < >column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。

9、在数据窗口中移走行,但不是去做过滤或删除操作

RowsDiscard()函数可做到这一点,它在数据窗口中执行移除工作,但被移走的行它不可被删除或做任何修改性的保存。

10、如何在多行显示的DataWindow 中的Footer Band中显示当前数据的首行和最后行的行号

我们先看两个计算列的表达式的例子:

IF (GetRow() = First(GetRow() FOR Page), 1, 0) // 1 为当前页的第一行

IF (GetRow() < >1 AND GetRow() = Last(GetRow() FOR Page), 1, 0)

// 1 为当前页的最后一行

由此例可知,在Footer Band中设置如下计算列表达式:'Rows ' + String(First(GetRow() FOR Page)) + ' to ' + String(Last(GetRow() FOR Page)) + ' are displayed'。即可达到这项功能。

联系地址:炮兵学院二系十队 230031

电话:5578721 BP 3401188?/FONT>5169

E_mail: zmz1974@263.net

篇3:WIN技巧:编程基础之WINDOWS钩子函数

把鼠标关标滑过一个窗口时,该窗口的有关消息将显示在主窗口中,当您按下“Unhook”时,应用程序将卸载钩子。主窗口使用一个对话框来作为它的主窗口。它自定义了一个消息WM_MOUSEHOOK,用来在主窗口和DLL之间传递消息。当主窗口接收到该消息时,wParam中包含了光标所在位置的窗口的句柄。当然这是我们做的安排。我这么做只是为了方便。您可以使用您自己的方法在主应用程序和DLL之间进行通讯。

.if HookFlag==FALSE

invoke InstallHook,hDlg

.if eax!=NULL

mov HookFlag,TRUE

invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText

.endif

该应用程序有一个全局变量,HookFlag,它用来监视钩子的状态。如果安装来钩子它就是TRUE,否则是FALSE.当用户按下Hook按钮时,应用程序检查钩子是否已经安装。如果还没有的话,它将调用DLL中引出的函数InstallHook来安装它。注意我们把主对话框的句柄传递给了DLL,这样这个钩子DLL就可以把WM_MOUSEHOOK消息传递给正确的窗口了。当应用程序加载时,钩子DLL也同时加载。时机上当主程序一旦加载到内存中后,DLL就立即加载。DLL的入口点函数载主程序的第一条语句执行前就前执行了。所以当主程序执行时,DLL已经初始化好了。我们载入口点处放入如下代码:

.if reason==DLL_PROCESS_ATTACH

push hInst

pop hInstance

.endif

该段代码把DLL自己的实例句柄放到一个全局变量中保存。由于入口点函数是在所有函数调用前被执行的,所以hInstance总是有效的。我们把该变量放到。data中,使得每一个进程都有自己一个该变量的值。因为当鼠标光标停在一个窗口上时,钩子DLL被映射进进程的地址空间。加入在DLL缺省加载的地址处已经加载其它的DLL,那钩子DLL将要被映射到其他的地址。hInstance将被更新成其它的值。当用户按下Unhook再按下Hook时,SetWindowsHookEx将被再次调用。这一次,它将把新的地址作为实例句柄。而在例子中这是错误的,DLL装载的地址并没有变。这个钩子将变成一个局部的,您只能钩挂发生在您窗口中的鼠标事件,这是很难让人满意的。

InstallHook proc hwnd:DWORD

push hwnd

pop hWnd

invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL

mov hHook,eax

ret

InstallHook endp

InstallHook 函数非常简单。它把传递过来的窗口句柄保存在hWnd中以备后用。接着调用SetWindowsHookEx函数来安装一个鼠标钩子。该函数的返回值放在全局变量hHook中,将来在UnhookWindowsHookEx中还要使用。在调用SetWindowsHookEx后,鼠标钩子就开始工作了。无论什么时候发生了鼠标事件,MouseProc函数都将被调用:

MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD

invoke CallNextHookEx,hHook,nCode,wParam,lParam

mov edx,lParam

assume edx:PTR MOUSEHOOKSTRUCT

invoke WindowFromPoint,[edx].pt.x,[edx].pt.y

invoke PostMessage,hWnd,WM_MOUSEHOOK,eax,0

assume edx:nothing

xor eax,eax

ret

MouseProc endp

钩子函数首先调用CallNextHookEx函数让其它的钩子处理该鼠标事件,

然后,调用WindowFromPoint函数来得到给定屏幕坐标位置处的窗口句柄。注意:我们用lParam指向的MOUSEHOOKSTRUCT型结构体变量中的POINT成员变量作为当前的鼠标位置。在我们调用PostMessage函数把WM_MOUSEHOOK消息发送到主程序。您必须记住的一件事是:在钩子函数中不要使用SendMessage函数,它会引起死锁。MOUSEHOOKSTRUCT的定义如下:

MOUSEHOOKSTRUCT STRUCT DWORD

pt POINT

hwnd DWORD ?

wHitTestCode DWORD ?

dwExtraInfo DWORD ?

MOUSEHOOKSTRUCT ENDS

pt 是当前鼠标所在的屏幕位置。

hwnd 是将接收鼠标消息的窗口的句柄。通常它是鼠标所在处的窗口,但是如果窗口调用了SetCapture,鼠标的输入将到向到这个窗口。因我们不用该成员变量而是用WindowFromPoint函数。

wHitTestCode 指定hit-test值,该值给出了更多的鼠标位置值。它指定了鼠标在窗口的那个部位。该值的完全列表,请参考WIN32 API 指南中的WM_NCHITTEST消息。

dwExtraInfo 该值包含了相关的信息。一般该值由mouse_event函数设定,可以调用GetMessageExtraInfo来获得。

当主窗口接收到WM_MOUSEHOOK 消息时,它用wParam参数中的窗口句柄来查询窗口的消息。

.elseif uMsg==WM_MOUSEHOOK

invoke GetDlgItemText,hDlg,IDC_HANDLE,addr buffer1,128

invoke wsprintf,addr buffer,addr template,wParam

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_HANDLE,addr buffer

.endif

invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer1,128

invoke GetClassName,wParam,addr buffer,128

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer

.endif

invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr buffer1,128

invoke GetClassLong,wParam,GCL_WNDPROC

invoke wsprintf,addr buffer,addr template,eax

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer

.endif

为了避免重绘文本时的抖动,我们把已经在编辑空间中线时的文本和我们将要显示的对比。如果相同,就可以忽略掉。得到类名调用GetClassName,得到窗口过程调用GetClassLong并传入GCL_WNDPROC标志,然后把它们格式化成文本串并放到相关的编辑空间中去。

invoke UninstallHook

invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText

mov HookFlag,FALSE

invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL

invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL

invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL

当用户按下Unhook后,主程序调用DL

篇4:Python多线程编程(三):threading.Thread类的重要函数和方法

这篇文章主要介绍了Python多线程编程(三):threading.Thread类的重要函数和方法,本文讲解了线程名称、join方法、setDaemon方法等内容,需要的朋友可以参考下

这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下:

代码如下:

‘‘‘

Created on -9-7

@author: walfred

@module: thread.ThreadTest3

@description:

‘‘‘

import threading

class MyThread(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

def run(self):

print “I am %s” % (self.name)

if __name__ == “__main__”:

for i in range(0, 5):

my_thread = MyThread

my_thread.start()

name相关

你可以为每一个thread指定name,默认的是Thread-No形式的,如上述实例代码打印出的一样:

代码如下:

I am Thread-1

I am Thread-2

I am Thread-3

I am Thread-4

I am Thread-5

当然你可以指定每一个thread的name,这个通过setName方法,代码:

代码如下:

def __init__(self):

threading.Thread.__init__(self)

self.setName(“new” + self.name)

join方法

join方法原型如下,这个方法是用来阻塞当前上下文,直至该线程运行结束:

代码如下:

def join(self, timeout=None):

timeout可以设置超时

timeout可以设置超时蚕食

setDaemon方法

当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就分兵两路,当主线程完成想退出时,会检验子线程是否完成,

Python多线程编程(三):threading.Thread类的重要函数和方法

如果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法,并设置其参数为True。

当然这上面列举的只是我们在编程是经常使用到的方法,更多方法,可以参见:Higher-level threading interface

篇5:无纸化考试系统开发中的编程方法和技巧

无纸化考试系统开发中的编程方法和技巧

无纸化考试系统具有:用户注册、随机出卷、在线考试、时间控制、自动判卷、题库建立和管理、用户管理、成绩统计、报表打印等重要功能.本文结合<无纸化考试系统的研究与实现>课题的开发,介绍了有关Delphi编程技术、SQL Senrer数据库技术和计算机网络技术的一些编程方法和技巧.

作 者:刘忠民 陈利国  作者单位:郑州铁路职业技术学院,河南,郑州,450052 刊 名:郑州铁路职业技术学院学报 英文刊名:JOURNAL OF ZHENGZHOU RAILWAY VOCATIONAL AND TECHNICAL COLLEGE 年,卷(期): 21(2) 分类号:U2 关键词:无纸化考试   Delphi编程   数据库技术   SQL   senrer  

篇6:Turbo C在图形状态下快速显示彩色汉字的方法

Turbo C在图形状态下快速显示彩色汉字的方法

在用Turbo C提供的图形函数进行作图时,为了使屏幕显示更加直观明了,常常需要在图形显示的同时,显示必要的汉字说明。这时Turbo C提供的一些函数就不能用了。

在汉字操作系统中,有一个16×16点阵的汉字库,主要用于屏幕显示。字库中的汉字按16×16点阵模式存储,即每个汉字相当于16×16=256个点组成。占用16×2=32个连续的字节单元。字节的每一位(bit)表示一个点的属性:1表示亮点,0表示暗点。连续的两个字节表示该汉字字模的一行。32个字节的排列顺序如图:

@@T5S08100.GIF;图1@@

计算机对西文字符采用一个字节表示,我国规定汉字用内码(2个字节)表示。为了保证中西文兼容,也就是说,汉字系统的内码必须同时允许ASCII码和汉字的同时使用,而两者之间不能发生冲突。目前规定每个字节只用七位,若两个字节的最高位均为1,则该字符为汉字。

国标对汉字库的结构作了统一的规定:即将汉字库分为若干个区,每个区有94个汉字。

每一个汉字在字库中有一个固定的区和位,即每一个汉字有一个区位码。知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以,只要通过内码就可以得到区位码,从而也就得到了汉字的字模。

设一个汉字的内码为ddff,则此汉字的区码为dd-161;位码为ff-161;该汉字字模的第一个字节在字库中的位置是(94×区码 位码)×32。这时只要连续的读出32个字节,就可以得到该汉字的.字模。

有些文章和书籍采用写点的方式来处理这32个字节。即某位为1,则写点,某位为0,则不写点。如果这样处理,则每个汉字需循环256次,写256个点,字数越多,则会显得很慢。

Turbo C提供了这样两个函数:

setlinestyle(int linestyle,unsignedupattern,int thickness);

line(int x0,int y0,int x1,int y1);

setlinestyle函数为设置线型函数,当linestyle取USERBIT-LINE且thickness取NORM-WIDTH时,其后的line函数就会按upattern的16位二进制数画一点宽的线。upattern的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。

我们在读字模的时候可以一次读2个字节,形成一个16位的二进制数,把此二进制数设为upattern,然后画线。这样只需循环16次就可写完一个汉字。速度得到很大的提高。尤其在字数较多时,更体现出此方法的优势。

以下为用画线的方法在西文状态下显示汉字的函数,在Turbo C 1.0、DOS6.0、兼容386机上运行通过。

#include

#include

#include

FILE *stream; //设 stream为全程变量//

void open-file()

{//打开汉字库函数,使用的汉字库为UCDOS的16点阵字库:HZK16//

if((stream=fopen(“hzk16”,“rb”))==NULL)

{ printf(“Can't Open File HZK16”); exit(1);}

}

void close-file()

{//关闭汉字库函数//

fclose(stream); return;

}

void write16(unsigned char *word,int x,int y,int wd,int col)

{//word为所要显示的汉字串,x,y为要显示汉字的起始坐标,wd为两个汉字//

//之间的间隔,col为要显示汉字的颜色.//

register int k,i;

unsigned char cw[33];

char c[2];

unsigned long int qu-ma,wei-ma;

setcolor(col);settextstyle(0,HORIZ-DIR,1);

for(k=0;word[k]!='/0';k =2)

[1] [2]

计算机基础教案

计算机应用基础课件

全国计算机等考:计算机原理综合试卷四

计算机基础课件

大学计算机基础教学心得体会

计算机应用基础教案

《差距管理的应用与技巧》

全国计算机一级考试试题wps及答案

计算机应用基础试题及答案

WIN技巧:ExchangeOutlookWebAccess疑难解答

汉字图形窗口界面设计方法及函数编程技巧
《汉字图形窗口界面设计方法及函数编程技巧.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【汉字图形窗口界面设计方法及函数编程技巧(精选6篇)】相关文章:

计算机试题2022-10-16

计算机一级考试经验2022-05-07

计算机的教学计划2022-12-23

五年级计算机教学计划2022-08-08

《形块的分割与构成》的说课稿2023-09-21

计算机老师教学计划2022-09-04

计算机应用基础试卷及答案2022-07-22

计算机应用基础报告2023-04-07

计算机专升本教学计划2024-05-17

信息技术考试试题2022-04-29

点击下载本文文档