home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2001 December
/
pcwk12201b.iso
/
Reklamy
/
CAD-Projekt
/
MegaCAD-4_5
/
CC
/
LEKCJA02.C_
/
LEKCJA02.C
Wrap
C/C++ Source or Header
|
1995-09-01
|
11KB
|
280 lines
/* LEKCJA02.C
//---------------------------------------------------------------------------
Temat:
Komunikacja z u╛ytkownikiem poprzez okna dialogowe
//---------------------------------------------------------------------------
Funkcje:
EXT(207) short Message(
EXT(208) void MouseHelp(
EXT(211) void SetFuncText(
EXT(224) short StringInput(
EXT(203) short DlgInput(
HLP_INV(f,b,s)
//---------------------------------------------------------------------------
EXT(207) short Message( //
char *str1, // 1. linia tekstu (max. 40 znaków)
char *str2, // 2. linia tekstu
char *but1, // 1. klawisz (mo╛e mieå wartoÿå NULL)
char *but2, // 2. klawisz (mo╛e mieå wartoÿå NULL)
char *but3, // 3. klawisz (max. 9 znaków)
short defbut); // standard-klawisz (1-3)
Opis:
Funkcja przedstawia na ekranie dwie linie tekstu (str1, str2)
dêugoÿci od 0 do 40 znaków oraz trzy klawisze o nazwach tekstowych
(but1, but2, but3) zawierajÑcych od 0 do 9 znaków.
Jeÿli klawisz (but1 i/lub but2) ma wartoÿå NULL to jest on niewidoczny.
Klawisz but3 nie mo╛e mieå wartoÿci NULL !
Parametr defbut zawiera numer klawisza uznanego za standardowy, który
b⌐dzie wskazywany kursorem po wywoêaniu funkcji.
Return:
0 => jeÿli wybrany punkt le╛y poza oknem dialogowym
n => numer wybranego klawisza (but1= 1, but2= 2, but3= 3)
Przykêad:
Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
"klawisz-1","klawisz-2","klawisz-3",3);
//---------------------------------------------------------------------------
EXT(208) void MouseHelp( //
char *str1, // opis znaczenia lewego klawisza (max. 13)
char *str2, // opis znaczenia prawego klawisza
ushort inv); // kolor tekstu i têa (HLP_INV)
Opis:
Tekst informacyjny wpisywany w dolnej cz⌐ÿci ekranu przedstawiajÑcy
znaczenie klawiszy myszy o dêugoÿci do 13 znaków.
Parametr inv definiuje kolor tekstu i têa zmiennej tekstowej definiujÑcej
pole przeznaczone do opisu dziaêania lewego klawisza. Aby uêatwiå
jego przeliczenie przygotowano makro HLP_INV.
HLP_INV(f,b,s)
f = kolor tekstu, b = kolor têa, s = dzwi⌐k ?
Jeÿli obydwie wartoÿci (f, b) sÑ równe 0 przyjmowany jest kolor
standardowy.
Jeÿli parametr s=1 zostanie wydany sygnaê dzwi⌐kowy.
Przykêad:
MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));
//---------------------------------------------------------------------------
EXT(211) void SetFuncText( //
char *text); // wyÿwietlany tekst (max. 27 znaków)
Opis:
Tekst informacyjny podajÑcy nazw⌐ aktualnie wykonywanej funkcji
o dêugoÿci do 27 znaków.
Patrz te╛:
MouseHelp
Przykêad:
SetFuncText("pokaz wartoÿci numerycznych");
//---------------------------------------------------------------------------
EXT(224) short StringInput( //
char *title, // tekst informacyjny (max. 49 znaków)
char *buf, // bufor do edycji tekstu (max. 255 znaków)
ushort buflen); // wielkoÿå bufora
Opis:
Pozwala u╛ytkownikowi wpisaå lini⌐ tekstu do bufora o dêugoÿci buflen.
Title jest tekstem informacyjnym maksymalnej dêugoÿci 49 znaków
ukazujÑcym si⌐ w oknie dialogowym i "podpowiadajÑcym" u╛ytkownikowi
co ma robiå.
Patrz te╛:
DlgInput
Return:
TRUE => przy potwierdzeniu "ok"
FALSE => po wybraniu klawisza "powrót"
Przykêad:
StringInput("Wpisz rzÑdany tekst !",tekst,255);
//---------------------------------------------------------------------------
EXT(203) short DlgInput( //
ushort num, // iloÿå pól (1 - 10)
char *title, // tytuê pola dialogowego (max. 21 znaków)
t_dlgdta *dta); // tablica z opisem pól
Opis:
Zdefiniowanie zmiennych numerycznych.
Pozwala u╛ytkownikowi podaå wartoÿci zmiennym i/lub wybraå opcj⌐
dziaêania funkcji.
Sposób zdefiniowania tablicy pól:
typedef struct _dlgdta
{
char text[11]; // nazwa klawisza (max. 9 znaków)
uchar type; // typ pola
void _far *val; // adres zmiennej lub NULL dla klawisza
} t_dlgdta;
Typy zmiennych, jakie mogÑ wyst⌐powaå w tablicy:
DLG_SHT : short integer
DLG_LNG : long integer
DLG_PHI : double - wartoÿå kÑta podana przez u╛ytkownika w stopniach
zostaje zamieniona dla interpretera na radiany.
DLG_LEN : double - dêugoÿå lub koordynaty podane przez u╛ytkownika
w aktualnie u╛ywanej jednostce zostaj⌐ zamienione dla
interpretera na milimetry.
DLG_FAC : double - faktor numeryczny
DLG_BUT : klawisz z napisem tekstowym do wyboru opcji.
Return:
0 => po wybraniu klawisza "powrót"
1 => przy potwierdzeniu "ok"
n => numer klawisza z opcjÑ (o ile istnieje)
Przykêad:
DlgInput(4," ustalenie zmiennych",&dlg[0])
*/
//---------------------------------------------------------------------------
// Andrzej Setman WiedeΣ 5-6.08.1995
//---------------------------------------------------------------------------
#include "std.h"
#include "megatyp.h"
#include "megacad.h"
//---------------------------------------------------------------------------
short main(char *filename, char *args)
{
t_dlgdta dlg[5];
char tekst[255], kette[42];
short butret, klawisz= 1;
short sht= 100;
long lng= 123456789;
double phi= (DEF_PI/4);
double len= 100;
double fac= 100;
while (klawisz != 0)
{
dlg[0].type= dlg[1].type= dlg[2].type= dlg[3].type= DLG_BUT;
dlg[0].val = dlg[1].val = dlg[2].val = dlg[3].val = NULL;
strcpy(dlg[0].text,"Message");
strcpy(dlg[1].text,"DlgInput");
strcpy(dlg[2].text,"MouseHelp");
strcpy(dlg[3].text,"StringInpu");
SetFuncText("Wybierz wêaÿciwy klawisz ! ");
klawisz= DlgInput(4," funkcje dialogowe",&dlg[0]);
switch(klawisz)
{
case 1: // demonstracja funkcji Message
SetFuncText("u╛ycie funkcji Message");
butret = Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
"klawisz-1","klawisz-2","klawisz-3",3);
switch(butret)
{
case 1:
Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"wybrano: 'klawisz-1'",
NULL,NULL,"ok",3);
break;
case 2:
Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"wybrano: 'klawisz-2'",
NULL,NULL,"ok",3);
break;
case 3:
Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"wybrano: 'klawisz-3'",
NULL,NULL,"ok",3);
break;
default:
Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
"Wskazano punkt poza oknem dialogowym !",
NULL,NULL,"ok",3);
break;
}
break;
//------------------------------------------------------------------
case 2: // demonstracja funkcji DlgInput
dlg[0].type= DLG_SHT;
dlg[1].type= DLG_LNG;
dlg[2].type= DLG_FAC;
dlg[3].type= DLG_PHI;
dlg[4].type= DLG_FAC;
dlg[0].val= &sht;
dlg[1].val= &lng;
dlg[2].val= &fac;
dlg[3].val= φ
dlg[4].val= &len;
strcpy(dlg[0].text,"int short ");
strcpy(dlg[1].text,"int long ");
strcpy(dlg[2].text,"double ");
strcpy(dlg[3].text,"kÑt ");
strcpy(dlg[4].text,"odst⌐p ");
SetFuncText("pokaz wartoÿci numerycznych");
butret= DlgInput(5,"--wpisanie wartosci--",&dlg[0]);
if (butret==0) break;
sprintf(kette,"sht= %d lng= %d ", sht, lng);
Message("zmienne typu 'short int' i 'long int'",
kette,NULL,NULL,"ok",3);
sprintf(kette,"stopnie= %f radiany= %f ", phi/DEF_PI*180l, phi);
Message("wartoÿå kÑta w stopniach i w radianach",
kette,NULL,NULL,"ok",3);
sprintf(kette,"dêugoÿå= %f faktor= %f ", len, fac);
Message("dêugoÿå w 'mm' i faktor niemianowany",
kette,NULL,NULL,"ok",3);
break;
//------------------------------------------------------------------
case 3: // demonstracja funkcji MouseHelp
SetFuncText("u╛ycie funkcji MouseHelp"); // nazwa funkcji
MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));
Message("","",NULL,NULL,"",3);
MouseHelp("","",0);
break;
//------------------------------------------------------------------
case 4: // demonstracja funkcji StringInput
SetFuncText("u╛ycie funkcji StringInput");
StringInput("Przypisanie zmiennej tekstowej dowolnego tekstu !",
tekst,255);
if(strlen(tekst) <= 40)
{
Message(" Aktualna zawartoÿå zmiennej tekstowej: ",
tekst,NULL,NULL,"ok",3);
}
else
{
Message("Tekst jest zbyt dêugi, by przedstawiå go",
"przy u╛yciu funkcji 'Message' !",NULL,NULL,"ok",3);
}
break;
//------------------------------------------------------------------
default: // 'klawisz' = 0
Message(" Koniec demonstracji - wybrano 'powrót'",
" lub wskazano poza oknem dialogowym !",
NULL,NULL,"ok",3);
break;
}
}
return(0);
}
//---------------------------------------------------------------------------