用C语言实现按钮新技术

时间:2022-08-02 07:55:45 其他范文 收藏本文 下载本文

用C语言实现按钮新技术(共5篇)由网友“或许@”投稿提供,以下是小编帮大家整理后的用C语言实现按钮新技术,欢迎大家分享。

用C语言实现按钮新技术

篇1:用C语言实现按钮新技术

用C语言实现按钮新技术

一、按钮显示原理

按钮一般有按下和弹起两种状态,在3D studio中按钮也有这两种状态,Windows中虽然看到按钮虽是弹起的,但细心的用户不难发现,当选中按钮时,它有短暂的按下状态。实际上,它的原理很简单,其实是利用改变按钮边框的颜色引起人视觉上的错觉而达到立体效果,让人们感到屏幕上真有凸起和凹下的按钮一样,如下图:

@@T5S11500.GIF;图1@@

图1和图2给出了按钮两种状态和图示,图1为按钮弹起时的状态图,其右边及下边的边框色为黑色(0X00),而左边及上边的边框颜色置为亮白(0x0f),而图2则恰恰相反,右边及下边的边框色为亮白,左边及上边为黑色,它反映了按钮被按下的状态。

在程序应用中,设置某一按钮时,显示图1的状态,再选中这个按钮时,则显示出图2的状态,经过短暂的延时后,恢复到图1的状态,给用户的感觉是按钮被按下后又弹起。在Windows中的按钮就是这样的`,3D studio中的部分按钮当被选中时,只显示图2,这时用户可以很清晰地看到凹下的按钮。

二、程序实现

主要包括按钮结构的意义和与它有关的几个函数。

1.结构定义typedef struet Button Def{

short X1;

short Y1;

short X2;

short Y1;

} button

(X1,Y1)和(X2,Y2)分别为按钮左上角和右下角的位置坐标,用于确定按钮的位置和大小。

为了程序需要,须定义几个常用的量。

#define START-X bt→X1

#define START-Y bt→Y1

#define END-X bt→X2

#define END-Y bt→Y2

#define Grap 1(Grap为按钮边框的宽度)

#define Button White 0x0f

#define Button Black 0x00

2.函数定义

(1)void Button Define(button *bt,Short X1,Short Y,short X2,short Y2)该函数用于定义一个名为bt的按钮的大小和位置,其左上角及右下角坐标为(X1,Y1),(X2,Y2)。

START-X=X1;

START-Y=Y1;

END-X=X2;

END-Y=Y2;

(2)Void Release Button(button *bt)

该函数显示按钮弹起时的状态。

(3)Put Down Button(button *bt)该函数显示按钮按下时的状态。

下面列出了以上函数用于定义按钮,显示按钮弹起,按下状态的程序,这个程序在屏幕上显示7个按钮,按下1~7个数字后就弹起某个按钮,非常方便,需要弹起某个数字就按哪个数字,特别需要指出的是,当Gsap大一些时,每个按钮,就如同键盘上的键一样,立体感很强,有兴趣的读者可以实践操作一下,并把这种简明易懂的技术用之于工作,以提高工作效率。

button.c

#include

#include

#include

#include

#include

#include“button.h”

#define START-X bt->x1

#define START-Y bt->y1

#define END-X bt->x2

#define END-Y bt->y2

#define Grap 1

#defile ScreenBkColor 2

#define release-color 7

#define put-color 3

#define ButtonWhite 0x0f

#define ButtonBlack 0x00

#define delay 50000

#define dis 10

void ButtonDefine (button *bt.shout.short.short.short);

void ReleaseButton(button *bt);

void PutDownButton(button *bt);

void delay-time(long int);

main

{

int gdriver=DETECT.gmod

[1] [2] [3]

篇2:用C语言实现CRC校验计算

Clcul

tes CRC quickly using the tble-lookup method

作 者:董云  YUN DONG

工作单位:黄埔海关技术处工程师

通讯地址:广州市经济技术开发区志诚大道海关大楼

电话号码:020-82130556

邮政编码:510730

电子邮件: dy168@163.net

摘  要:

简述CRC算法原理,给出一种新颖快速的查表计算方法,并给出用C语言编写的算法源程序。关键词:CRC

、多项式、查表法 在编写数据传输程序时,数据容错是一个非常重要的问题。循环冗余位校验(Cyclicl Redundncy Check英文简称CRC)是目前运用非常广泛的一种数据容错方法,在数据传输,数据压缩等领域运用极其广泛。CRC的实现分为硬件和软件两种方法,其中软件实现的关键在于计算速度。如果单纯模拟硬件实现方法,则计算速度较慢。笔者在编制一个数据通讯软件中,运用了一种新颖的查表法计算CRC,速度很快,效果极佳。

首先介绍其原理,如果每次参与CRC计算的信息为一个字节,该信息字节加到16位的`累加器中去时,只有累加器的高8位或低8位与信息字节相互作用(异或),相互作用(异或)的结果记为组合值,那么累加器中的新值等于组合

值加上(按模2异或)累加器中未改变的那一半即为新的CRC值。

组合值只有256种可能,因此可利用硬件模拟算法先算好它们的CRC值预先填入一张表中,该表的每一单元对应相对值的CRC。这样就可以通过查表法来计算CRC值,以便大大提高CRC运算的速度。下面给出用C语言编制的计算程序。

首先将CRC

生成多项式及CRC值表定义为一个头文件CRC.H:

#define CRC_CCITT 0x1021  //CCITT多项式

#define REV_CCITT 0x8408  //反转CCITT多项式

#define CRC16 0x8005      //CRC16

多项式

#define REV_CRC16 0x

001  //反转CRC16多项式

unsigned short crc_tble[256]; //CRC值表

注:16位CCITT多项式(

X16 +X12 +X5 +1)和16位CRC16多项式(X16 +X15 +X2+1)为两种最常用的CRC多项式。反转多项式是指在数据通讯时,信息字节先传送或接收低位字节,如重新排位影响CRC计算速度,故设反转多项式。

造表和查表法CRC计算函数。

#include “crc.h”

void mk_crctble(unsigned short genpoly)

unsigned short crc_tble[256];

unsigned short

ccnum=0;

unsigned short i,j,k;

for(i=0,k=0;i<256;i++,k++)

i<<=8;

for(j=8;j>0;j--)

if((i^ccnum)&0x8000)

&

nbsp;

ccnum=(

ccnum<<=1)^genpoly;

else

ccnum<<=1;

i<<=1;

crc_tble[k]=

ccnum;

void crc_upd

te(unsigned short d

t

,unsigned short

ccnum)

ccnum=(

ccnum<<=8)^crc_tble[(

ccnum>>8)^d

t

];

篇3:面试题 用C语言实现乘法口诀表

程序代码:

#include < stdio. h>void main{ int i,j; for(i =1;i <=9;i ++) { for(j =1;j <=9;j ++) printf( “%d*%d=%2d ”,i,j,i* j); printf( “n”); } return 0;}

这个题主要是想用两个for循环嵌套使用,要注意之间的关系,printf( “%d*%d=%2d ”,i,j,i* j);这个语句可以使得运行结果右对齐,排版好看,

面试题 用C语言实现乘法口诀表

篇4:用C或者C++语言实现SOCKET通信

用C或者C++语言实现SOCKET通信

#include

#include

void main()

{

WORDwVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1,1);

err = WSAStartup(wVersionRequested,&wsaData);

if( err != 0)

{

return;

}

if(LOBYTE( wsaData.wVersion ) != 1||

HIBYTE( wsaData.wVersion) != 1)

{

WSACleanup();

return;

}

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

listen(sockSrv,5);

SOCKADDR_IN addrClient;

int len=sizeof(SOCKADDR);

while(1)

{

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

char sendBuf[100];

sprint(sendBuf,”Welcome %s to www.sunxin.org“,

inet_ntoa(addrClient.sin_addr));

send(sockConn,sendBuf,strlen(sendBuf)+1,0);

char recvBuf[100];

recv(sockConn,recvBuf);

printf(“%sn”,recvBuf);

closesocket(sockConn);

WSACleanup();

}

}

注:这是Server端;File->New->Win32 Console Application,工程名:TcpSrv;然后,File->New->C++ Source File,文件名:TcpSrv;在该工程的`Setting的Link的Object/library modules项要加入ws2_32.lib

#include

#include

void main()

{

WORDwVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(1,1);

err = WSAStartup(wVersionRequested,&wsaData);

if( err != 0)

{

return;

}

if(LOBYTE( wsaData.wVersion ) != 1||

HIBYTE( wsaData.wVersion) != 1)

{

WSACleanup();

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1″);

addrSrv.sin_family=AF_INET;

addrSrv.sin_porthtons(6000);

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];

recv(sockClient,recvBuf,100,0);

printf(“%sn”,recvBuf);

send(sockClient,”This is zhangsan”,strlen(“This is zhangsan”)+1,0);

closesocket(sockClient);

WSACleanup();

}

注:这是Client端;File->New->Win32 Console Application,工程名:TcpClient;然后,File->New->C++ Source File,文件名:TcpClient;同理,在该工程的Setting的Link的Object/library modules项要加入ws2_32.lib

篇5:栈的实现(C语言实现)

//头文件 #include/*====================栈 数据结构利用数组实现====================*/#define MAX 100#define ok 1#define error 0typedef struct Stack{ int data[MAX]; int top;//栈顶 int bottom; //栈底}Stack,*STACK;//初始化栈int InitStack(STACK stack);//销毁int DestroyStack(STACK stack);//清空int ClearStack(STACK stack);//栈空int StackEmpty(STACK stack);//获取栈顶元素int GetTop(STACK stack,int* elem);//压栈int Push(STACK stack,int* elem);//出栈int Pop(STACK stack,int* elem);//返回栈中元素长度int StackLength(STACK stack,int* len);//打印栈中元素int PrintStack(STACK stack);//栈满int StackFull(STACK stack);

//main函数中实现#include “stack.h”int main(){ int num=10, num1, i=0,j=0; Stack stack; int initFlag=InitStack(&stack); if(!initFlag) return 0; for(num1=0;num1<10;num1++) Push(&stack,&num1);/* int pushFlag=Push(&stack,&num); if(!pushFlag) return 0;*/// ClearStack(&stack); for(;i<10;i++) { int flag=Pop(&stack,&num1); if(flag) printf(“%d ”,num1); else printf(“Pop error”); } int lenFlag=StackLength(&stack,&num1); if(lenFlag) printf(“len=%d ”,num1); else printf(“StackLength error”);/* int getFlag=GetTop(&stack,&num1); if(getFlag) printf(“%d ”,num1);*/ PrintStack(&stack); return 0;}//初始化栈int InitStack(STACK stack){ if(stack==NULL) return error; stack->bottom=stack->top=0; return ok;}//压栈int Push(STACK stack,int* elem){ int flag=StackFull(stack); if(!flag) return error; stack->data[stack->top] =*elem; ++stack->top; return ok;}//打印栈中所有元素int PrintStack(STACK stack){ int i=0; int flag=StackEmpty(stack); if(!flag) return error; for(i=0;itop;i++) { printf(“%d ”,stack->data[i]); } printf(“n”); return ok;}//栈空int StackEmpty(STACK stack){ if(stack==NULL || stack->top==stack->bottom) return error; else return ok;}//出栈int Pop(STACK stack,int* elem){ int flag=StackEmpty(stack); if(!flag) return error; *elem=stack->data[stack->top-1]; --stack->top; return ok;}//栈满int StackFull(STACK stack){ if(stack==NULL || stack->top>MAX) return error; else return ok;}//销毁int DestroyStack(STACK stack){ if(stack==NULL) return ok; else { stack->top=stack->bottom; stack=NULL; return ok; }}//清空int ClearStack(STACK stack){ int flag=StackEmpty(stack); if(!flag) return error; else { stack->top=stack->bottom; return ok; }}//获取栈顶元素int GetTop(STACK stack,int* elem){ int flag=StackEmpty(stack); if(!flag) return error; *elem=stack->data[stack->top-1]; return ok;}//返回栈中元素长度int StackLength(STACK stack,int* len){ if(stack==NULL) return error; if(stack->top==stack->bottom) { *len=0; return ok; } else { *len=stack->top; return ok; }}

会计电算化试题

会计电算化考试试题及答案

计算机一级MSOffice考前提分冲刺题

会计电算化试题及参考答案

信息技术考试试题

信息技术试题

广州会计电算化基础知识考试试卷

会计电算化考试题型

计算机一级《WPS》考前冲刺题含答案

计算机等级考试试题及答案

用C语言实现按钮新技术
《用C语言实现按钮新技术.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【用C语言实现按钮新技术(共5篇)】相关文章:

理论知识考点2022-10-20

计算机一级六大MS题型介绍2023-03-31

计算机试题及答案2022-05-02

会计电算化模拟试题2023-03-26

计算机应用基础试题及答案2022-04-30

会计电算化的考试试题2022-04-30

会计电算化考试题库2022-04-29

会计从业资格考试会计电算化试题2022-08-01

全国计算机等级考试三级笔试样题(PC技术)2023-09-17

全国计算机一级MS Office考试试题及答案2023-03-15

点击下载本文文档