/**************/ /* autoldde.c */ /**************************************************************************** ** PROGRAM: autoldde (muokattu ohjelmasta laskurm2.c ) ** PURPOSE: Autolaskuri mallina DDE-palvelimesta ja asiakkaasta. ** Mahdollisuus kopioida leikekirjaan valmis viite. ** Toinen ikkuna, johon saadaan DDE-asiakas. ** Asiakas ikkunan linkit voidaan ottaa leikekirjasta ** tai Edit-ikkunaan kirjoitetun linkin mukaan. ** Yksinkertaistettu versio. ** USAGE: ** Esim EXCELissä kirjoitetaan kaava =AUTOLDDE|LKM!HA ** Quattro Prossa kaava @DDELINK([AUTOLDDE|LKM]"HA") ** Tässä tapauksessa nämä kaavat voidaan kopoida automaattisesti ** aktivoimalla joku laskurin nappula ja Edit/Copy ** Sitten esim. taulukkolaskennassa Edit/Paste Link ja DDE-linkki ** on valmis! ** Asiakas ikkunan 2 pientä linkkikenttää saadaan aktivoimalla ** jompikumpi niistä ja valitsemalla sen jälkeen Edit/Paste Link ** Mikäli kumpikaan ei ole valittu tulee linkki aina isoon ikkunaan. ** Ison ikkunan linkki saadaan myös edit-ikkunan tekstin mukaan ** valitsemalla Edit/Do Edit Link. ** ** HUOM! ** Toteutuksessa on molemmille ikkunoille laiskuuden vuoksi ** sama menu. Oikeassa ohjelmassa tämä ei ole suotavaa! ** Mallissa palvelin toimii toisesta ikkunasta ja asiakas ** toisesta. Tarvittaessa molemmat voivat toimia samassa ** ikkunassa! ** ** Tämä malli toimii vain Windows 3.1:ssä, koska siinä on ** käytetty read-only Edit-kenttiä. Poistamalla read-only, ** pitäisi toimia myös Win 3.0:ssa ** ** Editor: Vesa Lappalainen ( DDE-palvelin yleiskäytöiseksi+leikekirja) ** ( DDE-asiakas ) ** Kari Heikkilä ( DDE-palvelin ) ** ** DDE palvelimen (server) vaatimat lisäykset merkitty ds ** DDE asiakkaan (client) vaatimat lisäykset merkitty dc ** ** Projektiin tarvitaan ** autoldde.c - tämä tiedosto ** autoldde.def - moduulin määrittely ** autoldde.rc - resurssit ** ddeser.c - dde-palvelin ** ddecli.c - dde-asiakas ** clipboard.c - leikekirjan käsittely ** ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include "ddeser.h" /* ds */ #include "ddecli.h" /* dc */ #include "autoldde.h" #define BORDLG /* Jos dialogissa on tyyli BorDlg */ #define WTITLE "Laskuri" #define LASKUREITA 2 #define SERVICE "AutolDDE" /* ds */ #define TOPIC "Lkm" /* ds */ static int laskurit[LASKUREITA] = {0,0}; static HWND hcWnd; /* ds */ /***************************************************************************/ int UpdateData(HWND hWnd,int n,HDDEDATA hData,LONG size) /* dc */ /* Tällä aliohjelmalla päivitetään näyttöön DDE-serverin ilmoittamat ** muutokset. Aliohjelmaa ei tarvita, mikäli muutokset tulevat suoraan ** johonkin ikkunaan, jonka sisältö voidaan muuttaa SetWindowTextillä. ** Tässä tapauksessa aliohjelma on kirjoitettu mallin vuoksi. */ { #pragma argsused char ddedata[100]; HWND hswnd = GetDlgItem(hWnd,ID_LINK+n); DdeGetData(hData,ddedata,sizeof(ddedata),0); SetWindowText(hswnd,ddedata); return 0; } /***************************************************************************/ void ShowStatic(HWND hWnd, int nr, int value) /* Aliohjelmalla tulostetaan Static ikkunaan numero */ { char s[20]; HWND hswnd = GetDlgItem(hWnd,nr); wsprintf(s,"%d ",value); SetWindowText(hswnd,s); InformDDEChangeSN(nr); /* Tarvit. jos autom. *//* ds */ } /***************************************************************************/ void nollaa_laskurit(HWND hWnd,int laskurit[]) { int i; for (i=0; i