前言:本站為你精心整理了按鈕新技術(shù)管理范文,希望能為你的創(chuàng)作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。
一、按鈕顯示原理
按鈕一般有按下和彈起兩種狀態(tài),在3Dstudio中按鈕也有這兩種狀態(tài),Windows中雖然看到按鈕雖是彈起的,但細(xì)心的用戶不難發(fā)現(xiàn),當(dāng)選中按鈕時,它有短暫的按下狀態(tài)。實際上,它的原理很簡單,其實是利用改變按鈕邊框的顏色引起人視覺上的錯覺而達(dá)到立體效果,讓人們感到屏幕上真有凸起和凹下的按鈕一樣,如下圖:
@@T5S11500.GIF;圖1@@
圖1和圖2給出了按鈕兩種狀態(tài)和圖示,圖1為按鈕彈起時的狀態(tài)圖,其右邊及下邊的邊框色為黑色(0X00),而左邊及上邊的邊框顏色置為亮白(0x0f),而圖2則恰恰相反,右邊及下邊的邊框色為亮白,左邊及上邊為黑色,它反映了按鈕被按下的狀態(tài)。
在程序應(yīng)用中,設(shè)置某一按鈕時,顯示圖1的狀態(tài),再選中這個按鈕時,則顯示出圖2的狀態(tài),經(jīng)過短暫的延時后,恢復(fù)到圖1的狀態(tài),給用戶的感覺是按鈕被按下后又彈起。在Windows中的按鈕就是這樣的,3Dstudio中的部分按鈕當(dāng)被選中時,只顯示圖2,這時用戶可以很清晰地看到凹下的按鈕。
二、程序?qū)崿F(xiàn)
主要包括按鈕結(jié)構(gòu)的意義和與它有關(guān)的幾個函數(shù)。
1.結(jié)構(gòu)定義typedefstruetButtonDef{
shortX1;
shortY1;
shortX2;
shortY1;
}button
(X1,Y1)和(X2,Y2)分別為按鈕左上角和右下角的位置坐標(biāo),用于確定按鈕的位置和大小。
為了程序需要,須定義幾個常用的量。
#defineSTART-Xbt→X1
#defineSTART-Ybt→Y1
#defineEND-Xbt→X2
#defineEND-Ybt→Y2
#defineGrap1(Grap為按鈕邊框的寬度)
#defineButtonWhite0x0f
#defineButtonBlack0x00
2.函數(shù)定義
(1)voidButtonDefine(button*bt,ShortX1,ShortY,shortX2,shortY2)該函數(shù)用于定義一個名為bt的按鈕的大小和位置,其左上角及右下角坐標(biāo)為(X1,Y1),(X2,Y2)。
START-X=X1;
START-Y=Y1;
END-X=X2;
END-Y=Y2;
(2)VoidReleaseButton(button*bt)
該函數(shù)顯示按鈕彈起時的狀態(tài)。
(3)PutDownButton(button*bt)該函數(shù)顯示按鈕按下時的狀態(tài)。
下面列出了以上函數(shù)用于定義按鈕,顯示按鈕彈起,按下狀態(tài)的程序,這個程序在屏幕上顯示7個按鈕,按下1~7個數(shù)字后就彈起某個按鈕,非常方便,需要彈起某個數(shù)字就按哪個數(shù)字,特別需要指出的是,當(dāng)Gsap大一些時,每個按鈕,就如同鍵盤上的鍵一樣,立體感很強,有興趣的讀者可以實踐操作一下,并把這種簡明易懂的技術(shù)用之于工作,以提高工作效率。
button.c
#include<graphics.h>
#include<conio.h>
#include<alloc.h>
#include<stdio.h>
#include<process.h>
#include"button.h"
#defineSTART-Xbt->x1
#defineSTART-Ybt->y1
#defineEND-Xbt->x2
#defineEND-Ybt->y2
#defineGrap1
#defileScreenBkColor2
#definerelease-color7
#defineput-color3
#defineButtonWhite0x0f
#defineButtonBlack0x00
#definedelay50000
#definedis10
voidButtonDefine(button*bt.shout.short.short.short);
voidReleaseButton(button*bt);
voidPutDownButton(button*bt);
voiddelay-time(longint);
main()
{
intgdriver=DETECT.gmode=VGAHI:
button*but,*but1.*but2.*bt,*but3,*but4,*but5,*but6,*but7;
intch;
initgraph(&gdriver,&gmode,"d:\tc");
setcolor(ScreenBkColor);
setbkcolor(2);
clrscr();
ButtonDefine(but,50,50,600,400);
putDownButton(but);
ButtonDefine(but1,150,200,200,250);
ButtonDefine(but2,200+dis,200,250+dis,250);
ButtonDefine(but3,250+2*dis,200,300+2*dis,250);
ButtonDefine(but4,300+3*dis,200,350+3*dis,250);
ButtonDefine(but5,350+4*dis,200,400+4*dis,250);
ButtonDefine(but6,400+5*dis,200,450+5*dis,250);
ButtonDefine(but7,450+6*dis,200,500+6*dis,250);
while(ch!=27)
{
switch(ch)}
case''''1'''':
ReleaseButton(but1);break;
case''''2'''':
ReleaseButton(but2);break;
case''''3'''':
ReleaseButton(but3);break;
case''''4'''':
ReleaseButton(but4);break;
case''''5'''':
ReleaseButton(but5);break;
case''''6'''':
ReleaseButton(but6);break;
case''''7'''':
ReleaseButton(but7);break;
}
ch=getch();
if(ch==27)
break;
switch(ch)
{
case''''1'''':
PutDownButton(but1);break;
case''''2'''':
PutDownButton(but2);break;
case''''3'''':
PutDownButton(but3);break;
case''''4'''':
PutDownButton(but4);break;
case''''5'''':
PutDownButton(but5);break;
case''''6'''':
PutDownButton(but6);break;
case''''7'''':
PutDownButton(but7);break;
}
delay-time(delay);
}
closegraph():
return0;
}
voidButtonDefine(button*bt.shortx1,shorty1,shortx2,shorty2)
{
START-X=x1;
START-Y=y1;
END-X=x2;
END-Y=y2;
}
voidReleaseButton(button*bt)
{
inti,j;
setcolor(7);
setfillstyle(1,7);
bar(START-X,START-Y,END-X,END-Y);
setcolor(ButtonWhite);
setfillstyle(1,7);
bar(START-X+Grap,START-Y+Grap,END-X-Grap,END-Y-Grap);
setcolor(15);
for(j=0;j<=Grap;j++)
{
line(START-X,j+START-Y,END-X-j,j+STAT-Y);
}
for(i=0,i<=Grap;j++)
{
line(START-X+i,START-Y+Grap,START-X+i,END-Y-i);
}
setcolor(ButtonBlack);
for(j=0;j<Grap;j++)
}
line(END-X,j+END-Y-Grap,START-X+Grap-j,j+END-Y-Grap);
}
for(i=0,i<Grap;i++)
{
line(i+END-X+Grap,END-Y-Grap,i+END+X-Grap,START-Y+Grap-i);
}
return;
}
voidPutDownButton(button*bt)
}
inti,j;
setcolor(put-color);
setfillstyle(1,put-color);
bar(START-X+Grap,START-Y+Grap,END-X-Grap,END-Y-Grap);
setcolor(ButtonBlack);
for(j=0;j<=Grap;j++)
{
line(START-X,j+START-Y,END-X-j,j+START-Y);
;}
for(i=0;i<Garp;i++)
{
line(START-X+i,START-Y+Grap,START-X+i,END-Y-i);
setcolor(15);
for(j=0,j<=Grap;j++)
{
line(END-X,j+END-Y-Grap,START-X+Grap-j,j+END-Y-Grap);
}
for(i=0;i<=Grap;i++)
{
line(i+END-X-Grap,END-Y-Grap,i+END-X-Grap,START-Y+Grap-i);
}
}
voiddelay-time(longinti)
{
i=0;
while(i<=delay)
i++;
}
button.h
typedefstructButtonDef
{shortx1;
shorty1;
shortx2;
shorty2;
}button;