用C语言实现按钮新技术_c语言怎么实现点击按钮
刀豆文库小编猜你可能喜欢“c语言怎么实现点击按钮”。
用C语言实现按钮新技术(共5篇)由网友“或许@”投稿提供,以下是小编帮大家整理后的用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校验计算
<?xml:nmespce prefix = o ns =“urn:schems-microsoft-com:office:office” />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(“%s\\n”,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(“%s\\n”,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 //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;i 数据结构 课程设计报告主题:教学计划编制问题 学号:20091003768 班级:计科四班 姓名:熊金莲 指导老师:郭艳内容概要(1) 题目要求(2) 教学计划编制问题的要点(3) 函数模块及各函数可实现...... #include /* 初始置换表IP */ int IP_Table[64] = { 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7, 56,48,40,32,24,1...... 程序:#include #define N 64lfsr(int a,int b,int c,int d,int T[]); void main() { int A[19]={1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,0,1,0,1};int B[22]={0,0,1,0,0,0,1,1,1...... 用C语言证明哥德巴赫猜想哥德巴赫猜想:任何一个大于6的偶数都可以写成两个素数的和。 #include #include int main(void){int number,a,b;char c;int i,j,k,l;int sum,m;syst...... 个 人 简 历
个人信息
姓 电 Email 毕业院校 学 历 名 话 许松 *** 395458593@qq.com 中南财经政法大学 本 科 性 年 专 籍 别 龄 业 贯 男 22 计算机信息管理 四......
