/**************/ /* help.c */ /**************************************************************************** MODULE: help.c PURPOSE: Tehdään sisältöpohjainen avustus. AUTHOR: Vesa Lappalainen 27.8.1994 UPADTE: USAGE: Kirjaston käyttämiseksi tarvitaan tiedostot: help.c help.h Sitten ohjelmaan Help-tiedostosta riippuen 1) tai 2) tai molemmat tavat. 2) on jossain määrin helpompi ohjelman kannalta, mutta vaatii enemmän valmisteluja Help-tiedossa: 1) Haluttuun nappulan käsittelyyn laitetaan kutsu DoHelpOnFocus(hWnd,"oma.hlp",HelpTable) missä, HelpTable on taulukko, missä sanotaan mitä id-numeroa vastaa mikäkin hakusana. Esim: tHelpTable HelpTable[] = { { IDR_OTHER, "naapuri" }, { IDR_THIS, "oma" }, { ID_SCALE, "mittakaava" }, { 0 } }; Kun käyttäjä painaa valittua näppäintä (esim. ctrl-F1), katsotaan millä kontrollilla on focus ja sen id-numeron mukaan etsitään vastaava avainsana taulukosta ja pyydetään avustusta avainsanan mukaan. Jos avainsanaa ei löydy, näytetään hakulaatikko. 2) Jos Help-tiedostoa tehtäessä on .HPJ tiedostossa [MAP] osassa käytetty samoja ID-numeroita kuin ohjelman .H tiedostossa Esim: [MAP] #include ja Help-tiedostossa on kutakin IDR_OTHER jne. asiaa vastaten alaviite (#), niin voidaa käyttää kutsua: DoHelpOnFocusID(hWnd,"oma.hlp") ja mitään taulukkoa ei tarvitakaan. Tällöin etsitään aluksi mikä ikkuna (ohjain) on aktiivinen ja jos sillä on isä, niin annetaan avustusta ohjaimen ID:n mukaan. Jos aktiivisella ikkunalla ei ole isää, on kysesssä todennäköisesti pääikkuna ja avustukseksi käynnistetään Search-ikkuna. Joissakin lapsi-ikkunatapauksissa voi homma silti mennä pieleen ja tulee ilmoitus "Topic not found!". Samoin käy, jollei Help- tiedostossa ole avustusta jokaiselle ohjaimelle erikseen. ****************************************************************************/ #include #include #include "help.h" /***************************************************************************/ int DoHelpOnFocus(HWND hWnd,const char *HelpFile,tHelpTable *HelpTable) { int i,id = GetWindowID(GetFocus()); if ( id == 0 ) return 0; for (i=0; HelpTable[i].id; i++) if ( HelpTable[i].id == id ) return WinHelp(hWnd,HelpFile, HELP_PARTIALKEY,(DWORD)(LPSTR)HelpTable[i].keyword); return WinHelp(hWnd,HelpFile,HELP_PARTIALKEY,(DWORD)(LPSTR)""); } /***************************************************************************/ int DoHelpOnFocusID(HWND hWnd,const char *HelpFile) { HWND hCtl = GetFocus(), hWndP = GetParent(hCtl); int id = GetWindowID(GetFocus()); if ( id == 0 || hWndP == NULL ) return WinHelp(hWnd,HelpFile,HELP_PARTIALKEY,(DWORD)(LPSTR)""); return WinHelp(hWnd,HelpFile,HELP_CONTEXT,id); }