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
C/C++ Source or Header  |  1995-09-01  |  11KB  |  280 lines

  1. /*                      LEKCJA02.C
  2. //---------------------------------------------------------------------------
  3. Temat:
  4.         Komunikacja z u╛ytkownikiem poprzez okna dialogowe
  5. //---------------------------------------------------------------------------
  6. Funkcje:
  7.         EXT(207) short Message(        
  8.         EXT(208) void MouseHelp(       
  9.         EXT(211) void SetFuncText(     
  10.         EXT(224) short StringInput(   
  11.         EXT(203) short DlgInput(       
  12.         HLP_INV(f,b,s)
  13. //---------------------------------------------------------------------------
  14.  
  15. EXT(207) short Message(        // 
  16.              char  *str1,      // 1. linia tekstu (max. 40 znaków)
  17.              char  *str2,      // 2. linia tekstu
  18.              char  *but1,      // 1. klawisz (mo╛e mieå wartoÿå NULL)
  19.              char  *but2,      // 2. klawisz (mo╛e mieå wartoÿå NULL)
  20.              char  *but3,      // 3. klawisz (max. 9 znaków)
  21.              short defbut);    // standard-klawisz (1-3)
  22.  
  23. Opis:
  24.     Funkcja przedstawia na ekranie dwie linie tekstu (str1, str2) 
  25.     dêugoÿci od 0 do 40 znaków oraz trzy klawisze o nazwach tekstowych 
  26.     (but1, but2, but3) zawierajÑcych od 0 do 9 znaków.
  27.     Jeÿli klawisz (but1 i/lub but2) ma wartoÿå NULL to jest on niewidoczny.
  28.     Klawisz but3 nie mo╛e mieå wartoÿci NULL !
  29.     Parametr defbut zawiera numer klawisza uznanego za standardowy, który
  30.     b⌐dzie wskazywany kursorem po wywoêaniu funkcji.
  31.  
  32. Return:
  33.     0  => jeÿli wybrany punkt le╛y poza oknem dialogowym
  34.     n  => numer wybranego klawisza (but1= 1, but2= 2, but3= 3)
  35.  
  36. Przykêad:
  37.     Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  38.             "U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
  39.             "klawisz-1","klawisz-2","klawisz-3",3);
  40. //---------------------------------------------------------------------------
  41.  
  42. EXT(208) void MouseHelp(       // 
  43.              char   *str1,     // opis znaczenia lewego klawisza (max. 13)
  44.              char   *str2,     // opis znaczenia prawego klawisza
  45.              ushort inv);      // kolor tekstu i têa (HLP_INV)
  46.  
  47. Opis:
  48.     Tekst informacyjny wpisywany w dolnej cz⌐ÿci ekranu przedstawiajÑcy 
  49.     znaczenie klawiszy myszy o dêugoÿci do 13 znaków. 
  50.     Parametr inv definiuje kolor tekstu i têa zmiennej tekstowej definiujÑcej
  51.     pole przeznaczone do opisu dziaêania lewego klawisza. Aby uêatwiå
  52.     jego przeliczenie przygotowano makro HLP_INV.
  53.  
  54. HLP_INV(f,b,s)
  55.     f = kolor tekstu, b = kolor têa, s = dzwi⌐k ?
  56.     Jeÿli obydwie wartoÿci (f, b) sÑ równe 0 przyjmowany jest kolor 
  57.     standardowy.
  58.     Jeÿli parametr s=1 zostanie wydany sygnaê dzwi⌐kowy.
  59.  
  60. Przykêad:
  61.     MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));  
  62. //---------------------------------------------------------------------------
  63.  
  64. EXT(211) void SetFuncText(     // 
  65.              char *text);      // wyÿwietlany tekst (max. 27 znaków)
  66.  
  67. Opis:
  68.     Tekst informacyjny podajÑcy nazw⌐ aktualnie wykonywanej funkcji
  69.     o dêugoÿci do 27 znaków.
  70.  
  71. Patrz te╛:
  72.     MouseHelp
  73.  
  74. Przykêad:
  75.     SetFuncText("pokaz wartoÿci numerycznych");           
  76. //---------------------------------------------------------------------------
  77.  
  78. EXT(224) short StringInput(   // 
  79.             char   *title,    // tekst informacyjny (max. 49 znaków)
  80.             char   *buf,      // bufor do edycji tekstu (max. 255 znaków) 
  81.             ushort buflen);   // wielkoÿå bufora
  82.  
  83. Opis:
  84.     Pozwala u╛ytkownikowi wpisaå lini⌐ tekstu do bufora o dêugoÿci buflen.
  85.     Title jest tekstem informacyjnym maksymalnej dêugoÿci 49 znaków
  86.     ukazujÑcym si⌐ w oknie dialogowym i "podpowiadajÑcym" u╛ytkownikowi 
  87.     co ma robiå.
  88.  
  89. Patrz te╛:
  90.     DlgInput
  91.  
  92. Return:
  93.     TRUE  => przy potwierdzeniu "ok"
  94.     FALSE => po wybraniu klawisza "powrót"
  95.  
  96. Przykêad:
  97.     StringInput("Wpisz rzÑdany tekst !",tekst,255); 
  98. //---------------------------------------------------------------------------
  99.  
  100. EXT(203) short DlgInput(       // 
  101.              ushort   num,     // iloÿå pól (1 - 10)
  102.              char     *title,  // tytuê pola dialogowego (max. 21 znaków)
  103.              t_dlgdta *dta);   // tablica z opisem pól
  104.  
  105. Opis:
  106.     Zdefiniowanie zmiennych numerycznych. 
  107.     Pozwala u╛ytkownikowi podaå wartoÿci zmiennym i/lub wybraå opcj⌐
  108.     dziaêania funkcji.
  109.  
  110.     Sposób zdefiniowania tablicy pól:
  111.  
  112.         typedef struct _dlgdta
  113.         {
  114.            char     text[11];    // nazwa klawisza (max. 9 znaków)
  115.            uchar    type;        // typ pola
  116.            void     _far *val;   // adres zmiennej lub NULL dla klawisza
  117.         } t_dlgdta;              
  118.  
  119.     Typy zmiennych, jakie mogÑ wyst⌐powaå w tablicy:
  120.  
  121.     DLG_SHT : short integer 
  122.     DLG_LNG : long integer 
  123.     DLG_PHI : double - wartoÿå kÑta podana przez u╛ytkownika w stopniach
  124.               zostaje zamieniona dla interpretera na radiany.
  125.     DLG_LEN : double - dêugoÿå lub koordynaty podane przez u╛ytkownika
  126.               w aktualnie u╛ywanej jednostce zostaj⌐ zamienione dla 
  127.               interpretera na milimetry.
  128.     DLG_FAC : double - faktor numeryczny
  129.     DLG_BUT : klawisz z napisem tekstowym do wyboru opcji.
  130.  
  131. Return:
  132.     0   => po wybraniu klawisza "powrót"
  133.     1   => przy potwierdzeniu "ok"
  134.     n   => numer klawisza z opcjÑ (o ile istnieje)
  135.  
  136. Przykêad:
  137.     DlgInput(4," ustalenie zmiennych",&dlg[0])
  138.  
  139. */
  140. //---------------------------------------------------------------------------
  141. //      Andrzej Setman                                  WiedeΣ 5-6.08.1995                             
  142. //---------------------------------------------------------------------------
  143. #include "std.h"
  144. #include "megatyp.h"
  145. #include "megacad.h"
  146. //---------------------------------------------------------------------------
  147. short main(char *filename, char *args)
  148. {
  149.    t_dlgdta    dlg[5];
  150.  
  151.    char        tekst[255], kette[42];
  152.    short       butret,  klawisz= 1;
  153.    short       sht= 100;
  154.    long        lng= 123456789;
  155.    double      phi= (DEF_PI/4);
  156.    double      len= 100;
  157.    double      fac= 100;
  158.  
  159.    while  (klawisz != 0)
  160.    {
  161.       dlg[0].type= dlg[1].type= dlg[2].type= dlg[3].type= DLG_BUT;
  162.       dlg[0].val = dlg[1].val = dlg[2].val = dlg[3].val = NULL;
  163.       strcpy(dlg[0].text,"Message");
  164.       strcpy(dlg[1].text,"DlgInput");
  165.       strcpy(dlg[2].text,"MouseHelp");
  166.       strcpy(dlg[3].text,"StringInpu");
  167.  
  168.       SetFuncText("Wybierz wêaÿciwy klawisz ! ");           
  169.  
  170.       klawisz= DlgInput(4," funkcje dialogowe",&dlg[0]);      
  171.  
  172.       switch(klawisz)
  173.       {
  174.       case 1:                           // demonstracja funkcji Message
  175.  
  176.          SetFuncText("u╛ycie funkcji Message");           
  177.          butret = Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  178.                           "U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
  179.                           "klawisz-1","klawisz-2","klawisz-3",3);
  180.          switch(butret)    
  181.          {
  182.          case 1:
  183.                     Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  184.                     "wybrano: 'klawisz-1'",
  185.                     NULL,NULL,"ok",3);
  186.                     break;
  187.          case 2:
  188.                     Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  189.                     "wybrano: 'klawisz-2'",
  190.                     NULL,NULL,"ok",3);
  191.                     break;
  192.          case 3:
  193.                     Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  194.                     "wybrano: 'klawisz-3'",
  195.                     NULL,NULL,"ok",3);
  196.                     break;
  197.          default:
  198.                     Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
  199.                     "Wskazano punkt poza oknem dialogowym !",
  200.                     NULL,NULL,"ok",3);
  201.                     break;
  202.          }
  203.          break;
  204.          //------------------------------------------------------------------
  205.  
  206.       case 2:                           // demonstracja funkcji DlgInput
  207.  
  208.          dlg[0].type= DLG_SHT;
  209.          dlg[1].type= DLG_LNG;
  210.          dlg[2].type= DLG_FAC;
  211.          dlg[3].type= DLG_PHI;
  212.          dlg[4].type= DLG_FAC;
  213.          dlg[0].val= &sht;
  214.          dlg[1].val= &lng;
  215.          dlg[2].val= &fac;
  216.          dlg[3].val= φ
  217.          dlg[4].val= &len;
  218.          strcpy(dlg[0].text,"int short ");
  219.          strcpy(dlg[1].text,"int long  ");
  220.          strcpy(dlg[2].text,"double    ");
  221.          strcpy(dlg[3].text,"kÑt       ");
  222.          strcpy(dlg[4].text,"odst⌐p    ");
  223.          
  224.          SetFuncText("pokaz wartoÿci numerycznych");           
  225.          butret= DlgInput(5,"--wpisanie wartosci--",&dlg[0]); 
  226.  
  227.          if (butret==0) break;
  228.  
  229.          sprintf(kette,"sht= %d   lng= %d ", sht, lng);
  230.          Message("zmienne typu 'short int' i 'long int'",
  231.                   kette,NULL,NULL,"ok",3);
  232.  
  233.          sprintf(kette,"stopnie= %f  radiany= %f ", phi/DEF_PI*180l, phi);
  234.          Message("wartoÿå kÑta w stopniach i w radianach",
  235.                   kette,NULL,NULL,"ok",3);
  236.          sprintf(kette,"dêugoÿå= %f  faktor= %f ", len, fac);
  237.          Message("dêugoÿå w 'mm' i faktor niemianowany",
  238.                   kette,NULL,NULL,"ok",3);
  239.          break;
  240.          //------------------------------------------------------------------
  241.  
  242.       case 3:                           // demonstracja funkcji MouseHelp
  243.  
  244.          SetFuncText("u╛ycie funkcji MouseHelp");           // nazwa funkcji
  245.          MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));  
  246.          Message("","",NULL,NULL,"",3);
  247.          MouseHelp("","",0);
  248.          break;
  249.          //------------------------------------------------------------------
  250.  
  251.       case 4:                           // demonstracja funkcji StringInput
  252.  
  253.          SetFuncText("u╛ycie funkcji StringInput");           
  254.          StringInput("Przypisanie zmiennej tekstowej dowolnego tekstu !",
  255.                       tekst,255);  
  256.          if(strlen(tekst) <= 40)
  257.          {
  258.             Message(" Aktualna zawartoÿå zmiennej tekstowej: ",
  259.                      tekst,NULL,NULL,"ok",3);
  260.          }
  261.          else
  262.          {
  263.             Message("Tekst jest zbyt dêugi, by przedstawiå go",
  264.                     "przy u╛yciu funkcji 'Message' !",NULL,NULL,"ok",3);
  265.          }
  266.          break;
  267.          //------------------------------------------------------------------
  268.  
  269.       default:                          //  'klawisz' = 0
  270.  
  271.          Message(" Koniec demonstracji - wybrano 'powrót'",
  272.                  " lub wskazano poza oknem dialogowym !",
  273.                    NULL,NULL,"ok",3);
  274.          break;
  275.       }
  276.    }
  277. return(0);
  278. }
  279. //---------------------------------------------------------------------------
  280.