Elemi alkalmazások fejlesztése

Hasonló dokumentumok
Szabóné Nacsa Rozália

Szabóné Nacsa Rozália. Feladat. Készítsünk el egy üres FormView alapú alkalmazást és építsünk köré egy súgó környezetet.

Elemi alkalmazások fejlesztése

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2

Eseményvezérelt alkalmazások

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

1. feladat. Szabóné Nacsa Rozália

Adatbázis-kezelés ODBC driverrel

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

3. Osztályok II. Programozás II

Programozási technológia

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Swing GUI készítése NetBeans IDE segítségével

Számítógépes grafika

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Access adatbázis elérése OLE DB-n keresztül

Szoftvertechnolo gia gyakorlat

C#, OOP. Osztályok tervezése C#-ban

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Széchenyi István Egyetem

munkafüzet open eseményéhez

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Programozás C++ -ban

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

1. Feladat: Lista mysql BANK UGYFEL

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

A Java nyelv. Dialógus ablakok. Elek Tibor

BME MOGI Gépészeti informatika 7.

Dr. Pétery Kristóf: CorelDRAW 9 testre szabás

Adatbázis-kezelés ActiveX vezérl kkel 2.rész

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Dokumentum létrehozása/módosítása a portálon:

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

OOP #14 (referencia-elv)

ReszlAd fájl, kitöltési útmutató:

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Adatintegritás ellenőrzés Felhasználói dokumentáció verzió 2.0 Budapest, 2008.

Osztály és objektum fogalma

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Rajz 06 gyakorló feladat

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Informatika terméktervezőknek

E-Freight beállítási segédlet

Google Maps használata OSM, mint alternatív térkép

C programozási nyelv

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Jelentkezési lap képző szervek részére

Adatbázis-kezelés API hívásokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés SQL parancsokkal. Adatbázis-kezelés ODBC-vel.

1.1.1 Dátum és idő függvények

Eseményvezérelt és objektumorientált programozás

Első lépések. File/New. A mentés helyét érdemes módosítani! Pl. Dokumentumok. Fájlnév: pl. Proba

Pénzügyi algoritmusok

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Osztályok. 4. gyakorlat

Stateless Session Bean

New Default Standard.ipt

C++ programozási nyelv Konstruktorok-destruktorok

ArcGIS 8.3 segédlet 5. Dr. Iványi Péter

Oktatás. WiFi hálózati kapcsolat beállítása Windows XP és Windows 7-es számítógépeken. SZTE Egyetemi Számítóközpont

Programozás C és C++ -ban

Ozeki Weboffice. 1. ábra

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

Egyszerűbb a Google keresőbe beírni a Sharepoint Designer 2007 letöltés kulcsszavakat és az első találat erre a címre mutat.

Tájékoztató a kollégiumi internet beállításához

C# osztályok. Krizsán Zoltán

4. Gyakorlat: Csoportházirend beállítások

OOP: Java 8.Gy: Abstract osztályok, interfészek

TvNetTel Internet Kapcsolat Beállítása

Szoftvertechnolo gia 7. gyakorlat

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Adatbázis-kezelés ODBC-vel

VISUAL BASIC ALAPISMERETEK

Felhasználó által definiált adattípus

Közegek és felületek megadása

Nyolcbites számláló mintaprojekt

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

és az instanceof operátor

Kezelési útmutató Nyomtatás

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Táblázatok. Táblázatok beszúrása. Cellák kijelölése

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

A CAPICOM ActiveX komponens telepítésének és használatának leírása Windows7 operációs rendszer és Internet Explorer 8-es verziójú böngésző esetén

Thermo1 Graph. Felhasználói segédlet

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A

WINDOWS TELEPÍTÉSI ÉS AKTIVÁLÁSI ÚTMUTATÓ A FOTOBETYAR.HU - PHOTOSHOP PLUGINJEIHEZ

RAJZ1. vezetett gyakorlat

Átírás:

SÚGÓ KÉSZÍTÉSE II. 2. FELADAT: HELYZETÉRZÉKENY SÚGÓ KÉSZÍTÉSE...2 A SÚGÁS ALAPJAI...4 SÚGÓ AZONOSÍTÓK DEFINIÁLÁSA (HELP ID)...4 SÚGÓ SZÖVEGEK MEGADÁSA...5 A PÁRBESZÉDABLAK SÚGÓFÁJLJÁNAK ELKÉSZÍTÉSE...6 SÚGÓ ÜZENETEK FELVÉTELE A SÚGÓ PROJEKTBE...6 SÚGÓ AZONOSÍTÓK ÉS HTML OLDALAK ÖSSZEKAPCSOLÁSA...6 ÚJ ABLAK FELVÉTELE A SÚGÓ PROJEKTBE...7 A HHDEMO.HHP SÚGÓ PROJEKT TELJES LISTÁJA...8 A HTMLHELP API HASZNÁLATA...9 A HH_POPUP STRUKTÚRA...9 A CSHBUTTON OSZTÁLY... 10 A CSHBUTTON OSZTÁLY LÉTREHOZÁSA... 10 A CSHBUTTON OSZTÁLY ADATTAGJAI... 10 A CSHBUTTON OSZTÁLY METÓDUSAI... 10 class CSHButton : public CButton... 10 void CSHButton::SetHelpID(DWORD d)... 10 CSHButton::CSHButton()... 10 CSHButton.cpp... 11 void CSHButton::ShowPopupText(CString textfile, COLORREF frg, COLORREF bkg )... 11 A CSHBUTTON OSZTÁLY ESEMÉNYKEZEL METÓDUSAI... 11 Az egérmozgatás callback függvény... 12 void CSHButton::OnMouseMove(UINT nflags, CPoint point)... 12 Az id zít callbackfüggvénye... 12 void CSHButton::OnTimer(UINT nidevent)... 12 A jobb egérkattintás callback függvénye... 13 void CSHButton::OnContextMenu(CWnd* pwnd, CPoint point)... 13 Az F1 billenty callback függvénye... 13 BOOL CSHButton::OnHelpInfo(HELPINFO* phelpinfo)... 13 A CSHEDIT OSZTÁLY... 13 AZ ADVANCEDHELPDEMO OSZTÁLY... 14 AZ ADVANCEDHELPDEMO OSZTÁLY FELKÉSZÍTÉSE SÚGÁSRA... 15 A PÁRBESZÉDABLAK INICIALIZÁLÁSA: ONINITDIALOG... 16 BOOL AdvancedHelpDemo::OnInitDialog()... 16 A DEMO/ADVACED DEMO MENÜPONT MEGADÁSA... 16 void CMainFrame::OnDemoAdvanced()... 16 HELYI MENÜ A PÁRBESZÉDABLAKON... 17 HELYI MENÜ MEGTERVEZÉSE... 17 Helyi menü behívása: jobb egérkattintásra... 17 void AdvancedHelpDemo::OnRButtonDown(UINT nflags, CPoint point)... 17 Helyi menüpontválasztás callback függvénye... 18 void AdvancedHelpDemo::OnPopupPiros()... 18 HTML oldal megjelenítése kulcsszó alapján... 18 void AdvancedHelpDemo::ShowKeyword(CString keyword)... 18 HIBAÜZENET CALLBACK FÜGGVÉNYE POPUP TEXT... 19 void AdvancedHelpDemo::OnChangeEditSzilva()... 19 A HELP GOMB CALLBACK FÜGGVÉNYE... 19 1. oldal

2. Feladat: Helyzetérzékeny súgó készítése A Súgókörnyezet kiépítése I. munkafüzet alapján elkészített alkalmazásunkat egészítsük ki egy új párbeszédablakkal és rendeljünk ehhez a párbeszédablakhoz helyzetérzékeny súgó szolgáltatásokat. Párbeszédablakunkon az alábbi súgó szolgáltatásokat szeretnénk megvalósítani: OnOver funkció OnContextHelp() Ha egy vezérl (gomb, adatbeviteli mez ) fölött álldogál az egérkurzor, akkor egy adott id eltelte után jelenjen meg egy kis popup szöveg. A megjelenítend szöveget fájlban tároljuk. Ha egy vezérl (gomb, adatbeviteli mez ) fölött az egér jobb fülére kattintunk, akkor jelenjen meg angol nyelv popup szöveg. A megjelenítend szöveget fájlban tároljuk. Shift F1 vagy F1 használata Hibaüzenet Ha kiválasztunk egy vezérl t (gombot vagy adatbeviteli mez t), akkor a Shift F1 vagy F1 billenty leütésekor jelenjen meg az adott gombhoz illeszked HTML oldat. Ha egynél hosszabb számot próbálunk begépelni az alma adatbeviteli mez be, akkor jelenjen meg figyelmeztetés. 2. oldal

Helyi menü témakörök megjelenítése Ha a jobb egérfüllel a párbeszédablak szabad felületére kattintunk, akkor jelenjen meg egy színeket tartalmazó helyi menü. A szín kiválasztása után ajánljuk fel kiválasztásra a színhez tartozó témaköröket. Popup hibaüzenet HTML oldal megjelenítése önálló ablakban Ha a szilva adatbeviteli mez t módosítjuk, jelenjen meg egy a programban konstans stringben megadott megadott popup hibaüzenet. Ha a Help gombra kattintunk egy önálló ablakban jelenjen meg a párbeszédablakra vonatkozó HTML oldal. 3. oldal

A súgás alapjai Alkalmazásunkban a vezérl kre az úgynevezett vezérl azonosítókkal hivatkozhatunk (control ID). Ahhoz, hogy az alkalmazásunk használni tudja a súgókörnyezet egyes elemeit (pl. popup text, HTML oldal), a súgóelemeket is azonosítókkal kell ellátni (help ID), majd meg kell oldani az egyes vezérl k és a súgóelemek összerendelését. Az alábbi táblázatban felsoroltuk, hogy párbeszédablakunk vezérl ihez és súgóelmeihez milyen azonosítókat rendelünk. Control ID Help ID Ez a szöveg jelenik meg, amikor a kurzor a vezérl fölött várakozik. 1 Ez a szöveg jelenik meg, amikor leütjük az F1 ill. ShiftÓF1 billenty ket.. 2 Alma IDC_BUTTON_ALMA* IDH_BUTTON_ALMA Alma vagyok. It is an apple. IDC_EDIT_ALMA* IDH_EDIT_ALMA Hány almát kér? How many apples do you want? Körte IDC_BUTTON_KORTE* IDH_BUTTON_KORTE Körte vagyok. It is a pear. IDC_EDIT_KORTE* IDH_EDIT_KORTE Hány körtét kér? How many pears do you want? Szilva IDC_BUTTON_SZILVA* IDH_BUTTON_SZILVA Szilva vagyok. It is a pear. IDC_EDIT_SZILVA* IDH_EDIT_SZILVA Help IDC_BUTTON_HELP* IDH_BUTTON_HELP Párbeszédablak IDD_ADVANCED_HELP_DEMO IDH_ADVANCED_ HELP_DEMO OK IDOK IDH_BUTTON_OK Bezárja ezt a párbeszédpanelt, és menti az öszes változást. Cancel IDCANCEL IDH_BUTTON_CANCE L Hány szilvát kér? How many plums do you want? Bezárja ezt a párbeszédpanelt, és nem menti a változásokat. Súgó azonosítók definiálása (help ID) Definiáljuk súgó azonosítóinkat (help ID) egy szövegfájlban, és rendeljünk hozzá egyedi értékeket. A szövegfájl neve legyen ctrlhelp.h. A fájlt mentsük el az alkalmazásunk alkönyvtárába. ctrlhlp.h #define IDH_BUTTON_ALMA 1200 #define IDH_BUTTON_CANCEL 1210 #define IDH_BUTTON_KORTE 1220 #define IDH_BUTTON_OK 1230 #define IDH_BUTTON_SZILVA 1240 #define IDH_EDIT_ALMA 1250 #define IDH_EDIT_KORTE 1260 #define IDH_EDIT_SZILVA 1270 #define IDH_ADVANCED_HELP_DEMO 1020 #define IDH_BUTTON_HELP 1030 1 Ezt a szöveget a ctrlhelp.txt fájlban tároljuk. 2 Ezt a szöveget a ctrlhelp_english.txt fájlban tároljuk. 4. oldal

Súgó szövegek megadása Egy szövegfájlban adjuk meg, hogy az egyes súgó azonosítókra hivatkozva milyen magyar szöveget szeretnénk megjeleníteni. A szövegfájl neve legyen ctrlhelp.txt. A fájlt mentsük el az alkalm azásunk alá. (Ezek az üzenetek akkor jelennek meg, amikor az egér hosszasan id zik a vezérl felett.) ctrlhelp.txt.topic IDH_BUTTON_ALMA Alma vagyok..topic IDH_BUTTON_KORTE Körte vagyok..topic IDH_BUTTON_SZILVA Szilva vagyok..topic IDH_EDIT_ALMA Hány almát kér?.topic IDH_EDIT_KORTE Hány körtét kér?.topic IDH_EDIT_SZILVA Hány szilvát kér?.topic IDH_BUTTON_OK Bezárja ezt a párbeszédpanelt, és menti az öszes változást..topic IDH_BUTTON_CANCEL Bezárja ezt a párbeszédpanelt, és nem menti a változásokat..topic IDH_BUTTON_HELP A párbeszédpanel súgója. Egy szövegfájlban adjuk meg, hogy az egyes súgó azonosítókra hivatkozva milyen angol szöveget szeretnénk megjeleníteni. A szövegfájl neve legyen ctrlhelp_english.txt. Mentsük a fájlt az alkalmazásunk alkönyvtárába. (Ezek az üzenetek akkor jelennek meg, amikor F1-et vagy Shift+F1-et adunk..) ctrlhelp_english.txt.topic IDH_BUTTON_ALMA It is an apple..topic IDH_BUTTON_KORTE It is a pear..topic IDH_BUTTON_SZILVA It is a plum..topic IDH_EDIT_ALMA How many apples do you want?.topic IDH_EDIT_KORTE How many pears do you want?.topic IDH_EDIT_SZILVA How many plums do you want?.topic IDH_BUTTON_OK Closes the dialog and saves the changes..topic IDH_BUTTON_CANCEL Closes the dialog whithout changes..topic IDH_BUTTON_HELP About dialog box. 5. oldal

A párbeszédablak súgófájljának elkészítése Készítsük el a dialógusablak használatára vonatkozó ismereteket tartalmazó AdvancedHelpDemo.htm fájlt, és vegyük fel ezt a fájlt is súgó projektünk html oldalai közé. 1. Készítsük el az AdvancedHelpDemo.htm a fájlt és mentsük el alkalmazásunk html alkönyvtárába. 2. A Html Help Workshop segítségével nyissuk meg a HHDemo.hhp súgó projektet. 3. A Project fül kiválasztása után kattintsunk az Add/Remove topic files gombjára. 4. Vegyük fel a listába (Add) a fájlt. HHDemo.hhp [FILES] html\alma.htm... html\advancedhelpdemo.htm Súgó üzenetek felvétele a súgó projektbe 1. A Html Help Workshop segítségével nyissuk meg a HHDemo.hhp súgó projektünket (Ügyeljünk arra, hogy ne fusson a Visual C++ alkalmazásunk.) 2. A Project fül kiválasztása után kattintsunk a HtmlHelp API Information gombra. 3. Válasszuk ki a Text Pop-ups fület. 4. Kattintsunk a Header file gombra, majd jelöljük meg az el z pontban elkészített, az alkalmazásunk alkönyvtárában található ctrlhelp.h header fájlt. 5. A HtmlHelp API Information/Text Pop-ups fülén a Text file gombot kiválasztva megadhatjuk a súgószövegeket tartalmazó szövegfájljainkat. (ctrlhelp.txt és ctrlhelp_english.txt). HHDemo.hhp [TEXT POPUPS] ctrlhelp.h ctrlhelp.txt ctrlhelp_english.txt Súgó azonosítók és HTML oldalak összekapcsolása 1. A Html Help Workshop segítségével nyissuk meg a HHDemo.hhp súgó projektünket (Ügyeljünk arra, hogy ne fusson a Visual C++ alkalmazásunk.) 2. A Project fül kiválasztása után kattintson a HtmlHelp API Information gombra. 3. Válasszuk ki az ALIAS fület. 4. Adjuk meg, hogy mely súgóazonosítóval hivatkozunk az egyes HTML oldalra. 6. oldal

HHDemo.hhp [ALIAS] IDH_ADVANCED_HELP_DEMO=html\AdvancedHelpDemo.htm IDH_BUTTON_ALMA=html\alma.htm IDH_BUTTON_KORTE=html\korte.htm IDH_BUTTON_SZILVA=html\szilva.htm IDH_EDIT_ALMA=html\alma.htm IDH_EDIT_KORTE=html\korte.htm IDH_EDIT_SZILVA=html\szilva.htm 5. Válasszuk ki az Map fület és illesszük be ide is a ctrlhelp.h fájlunkat.. Ezzel rendelünk értékeket a 3-4 pontban bevezetett ALIAS nevekhez. (Mi az egyszer ség kedvéért ugyanazokat az azonosítókat használjuk a popup szövegek, ill. a HTML oldalak azonosítására is). HHDemo.hhp [MAP] #include ctrlhelp.h Új ablak felvétele a súgó projektbe Amikor a felhasználó a dialógusablakon a Help gombra kattint, akkor a párbbeszédablak használatára vonatkozó információ egy új ablakban jelenitjük meg, így azt nyitva lehet tartani a program futása alatt. 1. A Html Help Workshop segítségével nyissuk meg a HHDemo.hhp súgó projektünket (Ügyeljünk arra, hogy ne fusson a Visual C++ alkalmazásunk.) 2. A Project fül kiválasztása után kattintson az Add/Modify windows definitions gombra. 3. Definiáljon egy második ablakot az alábbiak szerint: GENERAL FÜL: Window type: Second Title bar text: Help Demo STYLES FÜL: Properties: Pop up Thick frame POSITION FÜL: Válassza ki az Autosizer gombot és állítsa be a kívánt ablakméretet. HHDemo.hhp [WINDOWS] Tripane="HHDemo HTML Help","toc.hhc","C:\Projects\hhDemo2\HHDemo\index.hhk",,,,,,,0 x2520,,0x3006,,,,,,,,0 Second=,"toc.hhc","index.hhk","html\intro.htm",,,,,,0x20,,,[2 71,372,593,566],0x80040000,,,,,,0 7. oldal

A HHDemo.hhp súgó projekt teljes listája HHDemo.hhp [OPTIONS] Compatibility=1.1 or later Compiled file=hhdemo.chm Contents file=toc.hhc Default Window=Tripane Default topic=html\intro.htm Display compile progress=no Full-text search=yes Index file=index.hhk Language=0x40e magyar Title=HHDemo Help [WINDOWS] Tripane="Html Help Demo Program","toc.hhc","C:\Projects\HHDemo\index.hhk",,,,,,,0x42520,,0x3006,,,,,,,,0 Second="Help Demo",,,,,,,,,,,0x0,[388,134,739,337],0x80040000,,,,,,0 [FILES] html\szilva.htm html\_topic_not_found.htm html\alma.htm html\eger.htm html\intro.htm html\kek.htm html\korte.htm html\kutya.htm html\macska.htm html\piros.htm html\sarga.htm html\advancedhelpdemo.htm [ALIAS] IDH_ADVANCED_HELP_DEMO=html\AdvancedHelpDemo.htm IDH_BUTTON_ALMA=html\alma.htm IDH_BUTTON_KORTE=html\korte.htm IDH_BUTTON_SZILVA=html\szilva.htm IDH_EDIT_ALMA=html\alma.htm IDH_EDIT_KORTE=html\korte.htm IDH_EDIT_SZILVA=html\szilva.htm [MAP] #include ctrlhelp.h [TEXT POPUPS] ctrlhelp.h ctrlhelp.txt ctrlhelp_english.txt [INFOTYPES] jegyzeteim Saját 8. oldal

A HtmlHelp API használata A súgó szövegek és a HTML oldalak megjelentetését a HtmlHelp API függvénnyel valósítjuk meg. A HtmlHelp API függvénynek deklarációja: BOOL HtmlHelp (HWND hwndmain, LPCTSTR lpszhelp, UINT ucommand, DWORD dwdata) ahol az els paraméter a szolgáltatást kér ablakra mutató pointer; a második paraméter egy string, melyben a súgó fájl nevét és helyét lehet megadni; a harmadik paraméter egy parancs (HtmlHelp command)., amellyel azt mondhatjuk meg, hogy milyen súgó szolgáltatást szeretnénk igénybe venni. Néhány parancs: HH_DISPLAY_TOC: A súgó fájl teljes tartalmának megjelentetése tartalomjegyzékkel együtt. HH_DISPLAY_TOPIC: súgó fájl egy adott témakörének megjelenítése HH_DISPLAY_TEXT_POPUP: Popup text megjelentetése HH_HELP_CONTEXT: A Map opcióban megadott súgótémák HTML oldalainak megjelentetése. a negyedik paraméter jelentése attól függ, hogy éppen milyen HtmlHelp parancsot készülünk kiadni. Itt adhatjuk meg az adott parancshoz szükséges további adatot. A HH_POPUP struktúra Egy popup szöveg megjelenítéséhez a HtmlHelp API függvényt a HH_DISPLAY_TEXT_POPUP paranccsal hívjuk meg. Ilyenkor a negyedik paraméter egy HH_POPUP struktúra. Itt adhatjuk meg a szöveg megjelenítésével kapcsolatos elvárásainkat: typedef struct taghh_popup int cbstruct; // sizeof this structure HINSTANCE hinst; // instance handle for string resource UINT idstring; // string resource id, or text id if pszfile is specified in HtmlHelp call LPCTSTR psztext; // used if idstring is zero POINT pt; // top center of popup window COLORREF clrforeground; // use -1 for default COLORREF clrbackground; // use -1 for default RECT rcmargins; // amount of space between edges of window and text, -1 for each member to ignore LPCTSTR pszfont; // facename, point size, char set, BOLD ITALIC UNDERLINE HH_POPUP; Illesszük be a htmlhelp.h header fájlt alkalmazásunk StdAfx.h headerfájljába, hogy ne egyesével kelljen beillesztgetnünk azt a HtmlHelp-et használó valamennyi osztályba. StdAfx.h #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC support for Windows Common Controls #include "htmlhelp.h" #endif // _AFX_NO_AFXCMN_SUPPORT... 9. oldal

A CSHButton osztály Az MFC CButton osztályát csak két esemény kezelésére készítették fel. Ha párbeszédablakunkra olyan gombot szeretnénk feltenni, amely figyeli a rajta id z egérkurzort, akkor ezt a funkciót nekünk kell megvalósítani. A CButton osztályból származtatva elkészítjük a helyzetérzékeny súgást biztosító gombok osztályát. Legyen az osztály neve CSHButton (Context Sesnsitive Help BUTTON). Az osztály SetHelpID metódusával beállíthatjuk az adott gombra vonatkozó súgóazonosítót. Az így el készített gombok a súgóazonosító alapján helyzetérzékeny módon súgnak. A CSHButton osztály létrehozása Insert/New Class Class Type: MFC Class Class Information/Name: CSHButton A Change gombra kattintva lehet módosítani a felajánlott fájlneveket (CSHButton,h, CSHButton,cpp) Base class: CButton A CSHButton osztály adattagjai m_helpid: Itt tároljuk a gombhoz rendelt súgó azonosító értékét. m_over: Logikai változó, melynek értéke akkor igaz, ha az egérkurzor a gomb fölött van. A CSHButton osztály konstruktorában inicializáljuk m_over adattagot. A CSHButton osztály metódusai GetHelpID: Visszaadja a gombhoz rendelt súgóazonosító értékét. SetHelpID: Beállítja a gomb súgóazonosítóját. ShowPopupText: A gomb fölött megjeleníti a súgóazonosítóhoz rendelt popup szöveget a paraméterben megadott színekben. CSHButton.h class CSHButton : public CButton... public: void SetHelpID(DWORD d); DWORD GetHelpID(); protected: DWORD m_helpid; bool m_over; void ShowPopupTex t(cstring textfile, COLORREF frg, COLORREF bkg );... ; CSHButton.cpp void CSHButton::SetHelpID(DWORD d) m_helpid=d; CSHButton::CSHButton() m_over=false; 10. oldal

CSHButton.cpp void CSHButton::ShowPopupText(CString textfile, COLORREF frg, COLORREF bkg ) //Find the good position CRect ctrlrect; GetClientRect(ctrlRect); CPoint msgpoint; msgpoint.x=ctrlrect.left+ctrlrect.width(); msgpoint.y=ctrlrect.bottom; ClientToScreen(&msgPoint); HH_POPUP popup ; RECT rrect ; // Set the popup's margins rrect.top = -1 ; rrect.left = -1 ; rrect.bottom = -1 ; rrect.right = -1 ; memset(&popup, 0, sizeof(hh_popup)); popup.cbstruct = sizeof(hh_popup); popup.hinst = 0; popup.idstring = m_helpid; popup.psztext =""; popup.pt = msgpoint; popup.clrforeground = frg; popup.clrbackground = bkg; popup.rcmargins = rrect; popup.pszfont = "Arial, 8, ascii,,, "; HtmlHelp( 0, "hhdemo.chm::/"+textfile, HH_DISPLAY_TEXT_POPUP, (DWORD)&popup) ; A CSHButton osztály eseménykezel metódusai Esemény Üzenet Tennivalók az esemény bekövetkezésekor Az egérkurzor a WM_MOUSEMOVE Létrehozunk egy id zít t egy adott id tartammal, gomb fölött van mert csak az itt beállított id elteltével szeretnénk megjeleníteni a magyar nyelv popup szöveget. Az m_over adattagot igazra állítjuk. Jobb kattintás WM_CONTEXT_HELP Megjelenítjük a gombhoz rendelt angol nyelv popup szöveget. F1 vagy Shift F1 WM_HELPINFO Megjelenítjük a gombhoz tartozó HTML oldalt. Letelt az id zít höz rendelt id tartam WM_TIMER Ha az egérkurzor még mindig a gomb fölött van, akkor megjelenítjük a popup szöveget, egyébként hamisra állítjuk az m_over adattagot. 11. oldal

View/ClassWizard/Message Maps Project:HHDemo Class name:cshbutton Object IDs: CSHButton Messages:WM_MOUSEMOVE void CSHButton::OnMouseMove(UINT nflags, CPoint point) if(m_over==false) //Ha most jöttünk a gomb fölé m_over = true; SetTimer(SHOW_POPUP_TIMER,1000,NULL); SetTimer(MOVE_OUT_TIMER,100,NULL); CButton::OnMouseMove(nFlags, point); View/ClassWizard/Message Maps Project:HHDemo Class name:cshbutton Object IDs: CSHButton Messages:WM_TIMER CSHButton.cpp void CSHButton::OnTimer(UINT nidevent) CRect btnrect; GetClientRect(btnRect); CPoint point(getmessagepos()); //get the current mouse position ScreenToClient(&point); switch(nidevent) case MOVE_OUT_TIMER: if (!(btnrect.ptinrect(point))) m_over=false; KillTimer(SHOW_POPUP_TIMER); KillTimer(MOVE_OUT_TIMER); break; case SHOW_POPUP_TIMER: if(m_over) COLORREF frg = 0; COLORREF bkg = RGB(255, 255, 208); ShowPopupText("ctrlhelp.txt",frg,bkg); KillTimer(SHOW_POPUP_TIMER); break; 12. oldal

Definiáljunk a CSHButton.cpp fájlban két ID ZÍT T. Ha az egérkurzor a gomb fölött van, akkor bekapcsoljuk a SHOW_POPUP_TIMER t és a popup szöveget akkor jelenítjük meg, amikor ez az id zít leketyegett. A MOVE_OUT_TIMER azt figyeli, hogy rajta vagyunk-e a gombon. Ha azt észleli, hogy az egér már nincs a gomb fölött, akkor törli a két id zít t. CSHButton.cpp #define new DEBUG_NEW #define SHOW_POPUP_TIMER 1 #define MOVE_OUT_TIMER 2 #undef THIS_FILE View/ClassWizard/Message Maps Project:HHDemo Class name:cshbutton Object IDs: CSHButton Messages:WM_CONTEXT_MENU void CSHButton::OnContextMenu(CWnd* pwnd, CPoint point) // TODO: Add your message handler code here ShowPopupText("ctrlhelp_English.txt",0,RGB(255, 0, 0)); Project:HHDemo Class name:cshbutton Object IDs: CSHButton Messages:WM_HELPINFO BOOL CSHButton::OnHelpInfo(HELPINFO* phelpinfo) // TODO: Add your message handler code here and/or call default return (HtmlHelp( 0, "hhdemo.chm>tripane", HH_HELP_CONTEXT, m_helpid)!=null) ; A CSHEdit osztály A CSHButton osztályhoz hasonlóan készítsük el a helyzetérzékeny adatbeviteli mez k osztályát. Ezt az osztályt a CEdit osztályból kell származtatni. Önálló feladat. 13. oldal

Az AdvancedHelpDemo osztály Készítse el benne az alábbi párbeszédablakot. A párbeszédablak osztályneve legyen AdvancedHelpDemo. (AdvancedHelpDemo.h, AdvancedHelpDemo.cpp). A párbeszédablak vezérl elemeinek (gomb, adatbeviteli mez ) azonosítására használja az alábbi táblázatot. A táblázat csillaggal (*) megjelölt vezérl inél feltétlenül kapcsolja be a Help ID kapcsolót. Control ID Caption Egyéb IDC_BUTTON_ALMA* Alma Help ID IDC_EDIT_ALMA* Help ID IDC_BUTTON_KORTE* Körte Help ID IDC_EDIT_KORTE* Help ID IDC_BUTTON_SZILVA* Szilva Help ID IDC_EDIT_SZILVA* Help ID IDC_BUTTON_HELP* Help Help ID IDD_ADVANCED_HELP_DEMO Advanced Help Demo - IDOK IDCANCEL OK Cancel 14. oldal

Az AdvancedHelpDemo osztály felkészítése súgásra A dialógusablak elkészítése után rendeljen változókat a vezérl khöz. Control ID Member variable name Category Variable type IDC_BUTTON_ALMA* m_button_alma Control CSHButton IDC_BUTTON_KORTE m_button_korte Control CSHButton IDC_BUTTON_SZILVA* m_button_szilva Control CSHButton IDC_BUTTON_HELP* m_button_help Control CSHButton IDC_EDIT_ALMA* m_edit_alma Control CSHEdit IDC_EDIT_KORTE* m_edit_korte Control CSHEdit IDC_EDIT_SZILVA* m_edit_szilva Control CSHEdit IDC_EDIT_ALMA m_alma Value CString (maximum characters 1) IDC_EDIT_SZILVA m_szilva Value int Megjegyzés: 1. Vegye észre, hogy a helyzetérzékeny gombok és adatbeviteli mez k típusai az újonnan bevezetett osztályok. 2. Az alma és a szilva adatbeviteli mez khöz Control és Value kategóriájú változó is tartozik. E két mez nél mutatjuk meg a hibaüzenetek kezelését. AdvancedHelpDemo.h #include "CSHButton.h" #include "CSHEdit.h" Ne feledkezzen meg a header fájlokról. // Dialog Data //AFX_DATA(AdvancedHelpDemo) enum IDD = IDD_ADVANCED_HELP_DEMO ; CSHEdit m_edit_szilva; CSHEdit m_edit_korte; CSHEdit m_edit_alma; CSHButton m_button_szilve; CSHButton m_button_korte; CSHButton m_button_help; CSHButton m_button_alma; CString m_alma; int m_szilva; //AFX_DATA 15. oldal

A párbeszédablak inicializálása: OnInitDialog A párbeszédablak inicializálásakor hozzárendeljük a vezérl khöz a súgóazonosítókat, és a ModifyStyleEx függvénnyel feltesszük a súgó kérd jelet az ablakra. AdvancedHelpDemo.cpp #include "ctrlhelp.h" BOOL AdvancedHelpDemo::OnInitDialog() CDialog::OnInitDialog(); // TODO: Add extra initialization here Ne feledkezzen meg a header fájlokról. ModifyStyleEx(0, WS_EX_CONTEXTHELP); m_button_alma.sethelpid(idh_button_alma); m_button_korte.sethelpid(idh_button_korte); m_button_szilva.sethelpid(idh_button_szilva); m_button_help.sethelpid(idh_button_help); m_button_ok.sethelpid(idh_button_ok); m_button_cancel.sethelpid(idh_button_cancel); m_edit_alma.sethelpid(idh_edit_alma); m_edit_korte.sethelpid(idh_edit_korte); m_edit_szilva.sethelpid(idh_edit_szilva); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE A Demo/Advaced Demo menüpont megadása Készítsük el a Demo/Advaced Demo menüpontot és az AdvancedHelpDemo párbeszédablakot felhívó callback függvényt. Project:HHDemo Class name: CMainFrame Object IDs: ID_DEMO_ADVANCED Messages:COMMAND CMainFrame.cpp #include "AdvancedHelpDemo.h" void CMainFrame::OnDemoAdvanced() // TODO: Add your command handler code here AdvancedHelpDemo dlg; if (dlg.domodal() == IDOK) return; Ne feledkezzen meg a header fájlokról. 16. oldal

Helyi menü a párbeszédablakon A jobb egérfüllel a párbeszédablak szabad felületére kattintva jelenjen meg a színeket tartalmazó helyi menü. A megfelel szín kiválasztása után ajánljuk fel az adott színhez tartozó témaköröket. Helyi menü megtervezése Az er forrás szerkeszt vel illesszünk be új menüt az alkalmazásunkba. Készítsünk el egy olyan menüpontot, amelynek a f menüje üres, és az almenüpontok pedig a színek nevei. (Kezdetben töltsük ki valamilyen fiktív szöveggel a f menüt is, mert különben nem tudjuk létrehozni az almenüpontokat. A f menü feliratát csak akkor töröljük, ha már egyszer lefordítottuk a programunkat, mert egyébként az osztályvarázsló nem vesz tudomást az almenü pontjainkról, és nem tudunk eseménykezel t rendelni hozzájuk. Control ID Caption IDR_COLOR_POPUP_MENU F menü - Üres!!! ID_POPUP_PIROS ID_POPUP_KEK ID_POPUP_SARGA Piros Kék Sárga! View/ClassWizard/Message Maps Project:HHDemo Class name:avancedhelpdemo Object IDs: AvancedHelpDemo Messages:WM_RBUTTTONDOWN AdvancedHelpDemo,cpp void AdvancedHelpDemo::OnRButtonDown(UINT nflags, CPoint point) // TODO: Add your message handler code here and/or call default CMenu menu; VERIFY(menu.LoadMenu(IDR_COLOR_POPUP_MENU)); CMenu* ppopup = menu.getsubmenu(0); ASSERT(pPopup!= NULL); ClientToScreen(&point); ppopup->trackpopupmenu (TPM_LEFTALIGN TPM_RIGHTBUTTON, point.x, point.y, this); CDialog::OnRButtonDown(nFlags, point); 17. oldal

" View/ClassWizard/Message Maps Project:HHDemo Class name:avancedhelpdemo Object IDs: ID_POPUP_PIROS Messages: COMMAND AdvancedHelpDemo.cpp void AdvancedHelpDemo::OnPopupPiros() // TODO: Add your command handler code here ShowKeyword("Piros szín"); Készítsük el a kék és a sárga színre is a menüpontokat. # $ % &'" Egy adott kulcsszóhoz tartozó témakörök megjelentetésére definiáljuk a ShowKeyword metódust: Workspace/ClassView/AdvancedHelpDemo/Jobb egérfül/add member function / Function type: void Function declaration: ShowKeyword(CString keyword) AdvancedHelpDemo.cpp void AdvancedHelpDemo::ShowKeyword(CString keyword) // TODO: Add your command handler code here HH_AKLINK link; link.cbstruct = sizeof(hh_aklink) ; link.freserved = FALSE ; link.pszkeywords = keyword ; link.pszwindow = "tripane" ; link.findexonfail = FALSE ; HtmlHelp( 0, "hhdemo.chm", HH_KEYWORD_LOOKUP, (DWORD)&link); 18. oldal

Hibaüzenet callback függvénye popup text View/ClassWizard/Message Maps Project:HHDemo Class name:avancedhelpdemo Object IDs: ID_EDIT_SZILVA Messages: EN_CHANGE AdvancedHelpDemo.cpp void AdvancedHelpDemo::OnChangeEditSzilva() // TODO: Add your control notification handler code here CRect ctrlrect; CWnd *pwnd=getfocus(); pwnd->getclientrect(ctrlrect); CPoint msgpoint; msgpoint.x=ctrlrect.left+ctrlrect.width(); msgpoint.y=ctrlrect.bottom-ctrlrect.height()/2; pwnd->clienttoscreen(&msgpoint); m_szilva=0; UpdateData(FALSE); HH_POPUP popup ; RECT rrect ; // Set the popup's margins rrect.top = -1 ; rrect.left = -1 ; rrect.bottom = -1 ; rrect.right = -1 ; memset(&popup, 0, sizeof(hh_popup)); popup.cbstruct = sizeof(hh_popup); popup.hinst = 0; popup.idstring = 0; popup.psztext =_tcsdup(_t("sajnos kifogyott a szilva.")); popup.pt = msgpoint; popup.clrforeground = RGB(255, 255, 255); popup.clrbackground = RGB(92, 143, 218); popup.rcmargins = rrect; popup.pszfont = "Arial, 8, ascii,,, "; HtmlHelp( 0, NULL, HH_DISPLAY_TEXT_POPUP, (DWORD)&popup) ; A Help gomb callback függvénye Ha a párbeszédablak Help gombjára kattintunk jelenjen meg egy új ablak és abban a dialógusablakhoz rendelt HTML oldal. View/ClassWizard/Message Maps Project:HHDemo Class name:avancedhelpdemo Object IDs: ID_BUTTON_HELP Messages: COMMAND 19. oldal

AdvancedHelpDemo.cpp void AdvancedHelpDemo::OnButtonHelp() // TODO: Add your control notification handler code here HtmlHelp( 0, "hhdemo.chm>second", HH_HELP_CONTEXT, IDH_ADVANCED_HELP_DEMO) ; 20. oldal