Delen via


Omgaan met online hulp

Online hulp kan in verschillende vormen worden geleverd, van gedetailleerde conceptuele informatie tot snelle definities. Dit onderwerp bevat de volgende secties.

Informatie over Help

Een belangrijk element van een gebruiksvriendelijke toepassing is direct beschikbaar in online help. Windows biedt functies en berichten die, wanneer deze worden gebruikt in combinatie met de Windows Help-toepassing, het eenvoudig maken om online-help in uw toepassing te implementeren. In dit overzicht worden de elementen van Windows besproken die online-help ondersteunen. Hierin wordt beschreven hoe u deze elementen gebruikt om gebruikers hulp te vragen en wordt uitgelegd hoe u de Windows Help-toepassing gebruikt om help weer te geven.

Help-aanvragen

De meeste Windows-toepassingen bieden online help-informatie in verschillende vormen, variërend van conceptuele hulp die het doel van de functies van een toepassing uitlegt tot pop-uphulp die snelle definities biedt van afzonderlijke elementen in de gebruikersinterface van de toepassing. U gebruikt functies en berichten om gebruikers verschillende manieren te bieden om toegang tot deze informatie aan te vragen. In de volgende secties worden deze Help-aanvragen beschreven.

Helpmenu

De meeste toepassingen bieden gebruikers toegang tot help-informatie door een Help- menu in het hoofdvenster op te geven. Wanneer de gebruiker een item selecteert in een Menu Help, ontvangt de bijbehorende vensterprocedure een WM_COMMAND bericht waarmee het geselecteerde item wordt geïdentificeerd. De toepassing reageert door de juiste Help-informatie weer te geven, zoals een lijst met Help-onderwerpen, een index of een inleiding tot de toepassing.

Hulp van het toetsenbord

Windows biedt gebruikers toegang tot help-informatie van het toetsenbord door de toepassing op de hoogte te stellen wanneer de gebruiker op de F1-toets drukt. Het systeem verzendt een WM_HELP bericht naar het venster met de toetsenbordfocus wanneer de gebruiker op de toets heeft gedrukt. Als het venster een kindervenster is (bijvoorbeeld een besturingselement in een dialoogvenster), geeft de functie DefWindowProc het bericht door aan het oudervenster. Als een menu actief is wanneer F1 wordt ingedrukt, verzendt het systeem het bericht naar het venster dat is gekoppeld aan het menu. De toepassing reageert door helpinformatie weer te geven die is gekoppeld aan het venster, de controle of het menu dat de focus heeft of actief is. Als de gebruiker bijvoorbeeld een besturingselement selecteert in een dialoogvenster en op F1 drukt, geeft de toepassing help-informatie voor dat besturingselement weer.

De parameter lParam van WM_HELP is een aanwijzer naar een HELPINFO structuur die gedetailleerde informatie bevat over het item waarvoor hulp wordt aangevraagd. U gebruikt deze informatie om het Help-onderwerp te bepalen dat moet worden weergegeven. De HELPINFO structuur bevat ook de coördinaten van de muiscursor op het moment dat de gebruiker op de toets heeft gedrukt. U kunt deze informatie gebruiken om hulp te bieden op basis van de locatie van de muiscursor.

Hulp van de muis

Windows biedt de gebruiker toegang tot help-informatie van de muis door de toepassing op de hoogte te stellen wanneer de gebruiker op de rechtermuisknop klikt of op een venster, besturingselement of menu klikt nadat u op de knop Vraag (?) hebt geklikt. De toepassing reageert door help-informatie weer te geven die is gekoppeld aan het opgegeven venster, besturingselement of menu.

Het systeem verzendt een WM_CONTEXTMENU bericht wanneer de gebruiker op de rechtermuisknop klikt. Het venster waarop is geklikt, ontvangt het bericht. Als het venster een child window is, zoals een besturingselement, geeft de functie DefWindowProc het bericht door aan het parent window. Het WM_CONTEXTMENU bericht geeft de coördinaten van de muiscursor aan. De x-coördinaat bevindt zich in het laagwaardige woord van de parameter lParam, en de y-coördinaat bevindt zich in het hoogwaardige woord. Als de gebruiker op een besturingselement heeft geklikt, is de parameter wParam de ingang voor het besturingselement dat de klik heeft ontvangen.

Het systeem verzendt een WM_HELP bericht wanneer de gebruiker op een item in een venster klikt nadat op de knop Vraag (?) is geklikt die wordt weergegeven op de titelbalk van het venster. U kunt een knop Vraag toevoegen aan een titelbalk door de stijl WS_EX_CONTEXTHELP op te geven in de functie CreateWindowEx bij het maken van het venster. De parameter lParam van WM_HELP is een aanwijzer naar een HELPINFO structuur met gedetailleerde informatie over het item waarvoor hulp wordt aangevraagd, inclusief de coördinaten van de muiscursor op het moment dat de gebruiker op de muisknop heeft geklikt.

De knop Vraag wordt alleen aanbevolen voor gebruik in dialoogvensters. In het verleden hebben toepassingen gebruikers toegang gegeven tot helpinformatie over een dialoogvenster door een Help--knop in het dialoogvenster aan te bieden. Deze methode wordt niet meer aanbevolen. Gebruik in plaats daarvan de knop Vraag.

Hulpweergave en Windows Help

Zodra een toepassing een aanvraag voor hulp ontvangt, moet deze de juiste Help-informatie weergeven. Omdat de Windows Help-toepassing een consistente gebruikersinterface biedt, wordt het aanbevolen dat toepassingen Windows Help gebruiken in plaats van andere methoden. Een toepassing gebruikt de functie WinHelp om Help-informatie weer te geven, waarbij details worden opgegeven zoals de informatie die moet worden weergegeven en de vorm van het venster waarin deze moet worden weergegeven. In de volgende secties wordt uitgelegd hoe u WinHelp- kunt gebruiken om help-informatie weer te geven.

Help-bestanden

Als u help-informatie wilt weergeven, moet u een Help-bestand opgeven bij het aanroepen van de WinHelp--functie. Het Help-bestand moet de Windows Help-bestandsindeling (.hlp) en een of meer onderwerpen hebben. Elk onderwerp is een afzonderlijke informatie-eenheid, zoals een conceptuele beschrijving, een reeks instructies, een afbeelding, een woordenlijstdefinitie, enzovoort. Onderwerpen moeten uniek worden geïdentificeerd, zodat Windows Help ze kan vinden wanneer ze worden aangevraagd. Windows Help gebruikt intern onderwerp-id's om onderwerpen te vinden, maar toepassingen gebruiken meestal context-id's (unieke geheel getalwaarden) om de onderwerpen op te geven die moeten worden weergegeven. De auteur van het Help-bestand moet context-id's expliciet toewijzen aan onderwerp-id's in de sectie [MAP] van het projectbestand dat wordt gebruikt om het Help-bestand te bouwen.

Wanneer u een Help-bestand opgeeft, maar u geen pad opgeeft, zoekt WinHelp naar het Help-bestand in de Help-map of in een map die is opgegeven door de omgevingsvariabele PATH. Daarnaast kunt WinHelp- een Help-bestand vinden waarvan de naam wordt vermeld op de volgende registerlocatie:

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            Help

Als u wilt profiteren van het register, moet u een waardenaam met dezelfde naam maken als uw Help-bestand. De waarde die aan die naam is toegewezen, moet de map zijn waarin het Help-bestand zich bevindt.

Als WinHelp- het opgegeven Help-bestand niet kan vinden, wordt er een dialoogvenster weergegeven waarmee de gebruiker de locatie van het Help-bestand kan opgeven. Omdat WinHelp- de locatiegegevens in het register opslaat, wordt er niet opnieuw om de locatie van hetzelfde Help-bestand gevraagd.

Zie de documentatie van uw ontwikkelhulpprogramma's voor meer informatie over het ontwerpen en bouwen van een Help-bestand.

Windows Help starten

In het volgende voorbeeld wordt de functie WinHelp gebruikt om de Windows Help-toepassing te starten en het Help-bestand te openen in het onderwerp Inhoud.

HWND hwnd;     // main window handle 
BOOL bResult   // for checking Boolean function result 

bResult = WinHelp(hWnd, "WINNT.HLP", HELP_CONTENTS, 0L);

In dit volgende voorbeeld wordt het Help-bestand van de gebruiker geopend, wordt in het bestand gezocht naar het onderwerp dat is gekoppeld aan een trefwoordtekenreeks en wordt het onderwerp vervolgens weergegeven.

HWND hwnd;     // main window handle 
BOOL bResult   // for checking Boolean function result 

bResult = WinHelp(hWnd, "WINNT.HLP", HELP_KEY, (DWORD) "finding topics");

Dialoogvenster Help-onderwerpen

U kunt het dialoogvenster Help-onderwerpen weergeven door de functie WinHelp- aan te roepen met de opdracht HELP_FINDER. Met het dialoogvenster Help-onderwerpen kan de gebruiker onderwerpen selecteren die moeten worden weergegeven door de titels van de onderwerpen, de trefwoorden die aan de onderwerpen zijn gekoppeld of de woorden en woordgroepen in de onderwerpen weer te geven. In toepassingen wordt dit dialoogvenster meestal weergegeven wanneer de gebruiker een opdracht kiest, zoals Help-onderwerpen, in het Menu Help. Een toepassing kan dit dialoogvenster ook weergeven als de gebruiker op de toets drukt wanneer er geen specifiek venster, besturingselement of menu in de toepassing de focus heeft of actief is.

In het verleden hebben toepassingen de opdrachten HELP_CONTENTS en HELP_INDEX gebruikt met de functie WinHelp om het onderwerp Inhoud en de trefwoordindex van het Help-bestand weer te geven. Deze opdrachten worden niet meer aanbevolen. Gebruik in plaats daarvan de opdracht HELP_FINDER.

Informatieonderwerpen

U kunt een specifiek onderwerp weergeven door de functie WinHelp- aan te roepen met de opdracht HELP_CONTEXT en de context-id voor het onderwerp op te geven. Toepassingen gebruiken doorgaans de opdracht HELP_CONTEXT als reactie op gebruikersaanvragen voor onderwerpen met conceptuele informatie of procedurele hulp in plaats van informatie over een specifiek besturingselement of menu. In dergelijke gevallen kan de gebruiker door het Help-bestand blijven bladeren op zoek naar gerelateerde informatie voordat deze terugkeert naar de toepassing.

Met de opdracht HELP_CONTEXT wordt een normaal exemplaar van Windows Help aangeroepen, zodat de gebruiker andere onderwerpen in het Help-bestand kan vinden. Meestal wordt het hoofdvenster van Help weergegeven, waaronder een titelbalk, een systeemmenu, het minimaliseren en maximaliseren van knoppen, een hoofdmenu, een optionele navigatiebalk, een rand voor de grootte en een clientgebied. De tekst van het geselecteerde onderwerp wordt weergegeven in het clientgebied en de gebruiker kan door het Help-bestand navigeren met behulp van dynamische koppelingen of navigatieknoppen in het hoofdvenster. Het normale exemplaar van Windows Help kan ook worden gebruikt om help weer te geven in een of meer secundaire vensters in plaats van het hoofdvenster.

Pop-uponderwerpen

U kunt een pop-uponderwerp met informatie voor een specifiek besturingselement of menu weergeven door de functie WinHelp- aan te roepen met de opdracht HELP_WM_HELP of HELP_CONTEXTMENU. Met deze opdrachten wordt een onderwerp weergegeven in een pop-upvenster in de buurt van het bijbehorende besturingselement of menu. Als u de gebruiker onmiddellijk wilt laten terugkeren om in de toepassing te werken, wordt het pop-upvenster vernietigd zodra de gebruiker op een toets drukt of op de linkermuisknop klikt.

U gebruikt de opdracht HELP_WM_HELP bij het verwerken van WM_HELP berichten voor besturingsvensters. Omdat de meeste besturingselementen het WM_HELP bericht doorgeven aan de functie DefWindowProc, verwerkt de bijbehorende dialoogvensterprocedure (of bovenliggende vensterprocedure) dit bericht. In plaats van een specifieke context-id te geven, moet de procedure in het dialoogvenster een matrix met besturings- en context-id-paren doorgeven aan WinHelp-, samen met de besturingsgreep die is opgegeven in de hItemHandle- lid van de HELPINFO- structuur die is doorgegeven met het WM_HELP bericht. De functie bepaalt de id van het besturingselement waarvoor het WM_HELP bericht is gegenereerd en gebruikt de overeenkomende context-id om het juiste onderwerp weer te geven.

U gebruikt de opdracht HELP_CONTEXTMENU bij het verwerken van WM_CONTEXTMENU berichten. Omdat de meeste besturingselementen het WM_CONTEXTMENU bericht doorgeven aan de functie DefWindowProc, wordt dit bericht verwerkt door de bijbehorende dialoogvensterprocedure (of bovenliggende vensterprocedure). De procedure specificeert een matrix van besturings- en context-id-paren; hiermee wordt ook de ingang opgegeven in de parameter wParam bij het aanroepen van WinHelp-, zodat de functie de juiste context-id uit de matrix kan kiezen en het juiste onderwerp kan weergeven. In tegenstelling tot de opdracht HELP_WM_HELP geeft HELP_CONTEXTMENU eerst een Wat is dit? opdracht in een menu. Als de gebruiker de opdracht kiest, WinHelp het onderwerp weergeeft. Anders wordt de aanvraag geannuleerd.

U kunt ook pop-uponderwerpen weergeven met behulp van de opdracht HELP_CONTEXTPOPUP en een context-id van het onderwerp opgeven. Deze opdracht is vergelijkbaar met de HELP_CONTEXT-opdracht, maar roept een pop-upexemplaar van Windows Help aan dat wordt gebruikt door HELP_WM_HELP en HELP_CONTEXTMENU. Toepassingen kunnen deze opdracht gebruiken als reactie op WM_HELP berichten om help weer te geven voor menu's en voor vensters die geen besturingselementen zijn in een dialoogvenster. Als u deze opdracht het effectiefst wilt gebruiken, moet de toepassing context-id's toewijzen aan deze menu's en vensters.

U kunt een context-id toewijzen aan elk venster of menu in de toepassing. Wanneer een WM_HELP bericht wordt gegenereerd, bevat het systeem de contextidentifier in de HELPINFO- structuur die wordt doorgegeven aan het oudervenster in het WM_HELP bericht. Het hoofdvenster kan vervolgens de context-ID doorgeven aan WinHelp om het aangevraagde Help-onderwerp weer te geven.

U gebruikt de functie SetWindowContextHelpId om een context-id toe te wijzen aan een venster of besturingselement en de functie SetMenuContextHelpId om een context-id toe te wijzen aan een menu. U kunt de context-id voor een venster of menu ophalen met behulp van de functie GetWindowContextHelpId of GetMenuContextHelpId.

Trefwoordzoekopdrachten

U kunt de gebruiker inschakelen om onderwerpen te zoeken en weer te geven door trefwoorden toe te wijzen aan onderwerpen in het Help-bestand. Een trefwoord is gewoon een tekenreeks die is gekoppeld aan een of meer onderwerpen. Windows Help verzamelt alle trefwoorden in een Help-bestand, plaatst deze in een tabel en geeft deze weer in de lijst Index van de Help-onderwerpen dialoogvenster. Wanneer de gebruiker een trefwoord selecteert, wordt in Windows Help het bijbehorende Help-onderwerp weergegeven of, als er meer dan één onderwerp is gekoppeld aan het trefwoord, wordt een lijst weergegeven met onderwerpen waaruit de gebruiker kan kiezen.

In een toepassing kunt u de opdracht HELP_KEY, HELP_PARTIALKEY of HELP_MULTIKEY gebruiken met de functie WinHelp om help-onderwerpen te zoeken en weer te geven op basis van hele of gedeeltelijke trefwoorden. U geeft de opdracht, de tekenreeks voor trefwoorden, het Help-bestand en de ingang op voor het eigenaarsvenster. In alle gevallen, als er één overeenkomst wordt gevonden, geeft WinHelp het bijbehorende onderwerp weer. Als er meer dan één overeenkomst wordt gevonden, geeft de functie het dialoogvenster Gevonden onderwerpen weer en kan de gebruiker kiezen welk onderwerp moet worden weergegeven. Als er geen overeenkomst wordt gevonden, wordt in WinHelp- de indexlijst (voor HELP_KEY en HELP_PARTIALKEY) of een foutbericht (voor HELP_MULTIKEY) weergegeven.

Uw toepassing kan zoeken naar meerdere trefwoorden in één aanroep naar WinHelp- door de trefwoorden te scheiden met puntkomma's. (Zoeken naar meerdere trefwoorden wordt niet ondersteund voor Help-bestanden die zijn gemaakt voor Windows versie 3.x) Het kan ook zoeken naar trefwoorden in meerdere Help-bestanden als het opgegeven Help-bestand een inhoudsbestand (.cnt) bevat dat :Index- of :Link-opdrachten bevat. Met de opdracht HELP_KEY zoekt WinHelp naar trefwoorden in alle bestanden die door deze opdrachten zijn opgegeven. Met de opdrachten HELP_MULTIKEY en HELP_PARTIALKEY doorzoekt de functie alle bestanden, met uitzondering van bestanden die zijn opgegeven door :Link-opdrachten.

Windows Help herkent standaard alleen de trefwoordtabel die wordt geïdentificeerd door het K-voetnootteken in het Help-bronbestand. U kunt Windows Help instrueren om extra trefwoordtabellen te maken door een ander voetnootteken dan K, samen met de definitie van het trefwoord, toe te voegen in het bronbestand van de helpfunctie. (Het voetnootteken A is echter gereserveerd.) U moet aanvullende trefwoordtabellen definiëren met behulp van MULTIKEY-instructies in de sectie [OPTIES] van het projectbestand bij het bouwen van het Help-bestand.

Een toepassing kan de opdracht HELP_SETINDEX gebruiken met de functie WinHelp om Windows Help te leiden om een andere trefwoordtabel dan K in de indexlijst weer te geven. Als u Windows Help wilt laten zoeken naar een trefwoord in een alternatieve trefwoordtabel, kan een toepassing de opdracht HELP_MULTIKEY gebruiken. U geeft het trefwoord en de trefwoordtabel op in een MULTIKEYHELP structuur, die u doorgeeft aan WinHelp-.

Wanneer WinHelp- een onderwerp weergeeft, wordt het weergegeven in het venster dat is opgegeven door de voetnoot '>' voor het onderwerp, in het venster dat is opgegeven met de opdracht :Base in het inhoudsbestand of in het hoofdvenster. Als het hoofdvenster al is geopend in een ander Help-bestand wanneer u WinHelpaanroept, verbergt de functie het hoofdvenster tijdens het zoeken. In dit geval wordt het hoofdvenster gesloten als u zowel de dialoogvensters Onderwerpen gevonden als Help-onderwerpen annuleert.

Secundaire Hulpvensters

Het hoofdvenster van de Windows Help-toepassing wordt het primaire venster genoemd. Windows Help kan ook Help-onderwerpen in een secundair venster weergeven. In tegenstelling tot het primaire Help-venster bevat een secundair venster geen menubalk. U kunt een navigatiebalk opnemen in een secundair venster en u kunt knoppen toevoegen aan de balk. U kunt er ook voor kiezen om Windows Help automatisch de hoogte van het secundaire venster aan te passen voor het onderwerp.

U moet secundaire vensters definiëren in de sectie [WINDOWS] van het Help-projectbestand, waarbij u de naam en eventueel de initiële grootte en positie van elk venster opneemt. U kunt de Windows Help-toepassing zo instellen dat een onderwerp in een secundair venster wordt weergegeven door een hoekhaak (>) en de naam die u voor het secundaire venster heeft gedefinieerd toe te voegen aan de naam van het helpbestand. De resulterende tekenreeks wordt vervolgens doorgegeven aan de functie WinHelp.

Een toepassing kan de grootte en positie van een primair of secundair venster wijzigen door het adres van een HELPWININFO structuur en de opdracht HELP_SETWINPOS in een aanroep naar WinHelp-op te geven. HELPWININFO geeft de naam van het venster en de nieuwe grootte en positie aan.

Help voor trainingskaarten

Met trainingskaart-hulp kan een toepassing een reeks instructies weergeven die de gebruiker door de stappen van een taak leidt. Een trainingskaart bestaat doorgaans uit tekst waarin een bepaalde stap en knoppen worden uitgelegd die zijn gekoppeld aan TCard-macro's, zodat de gebruiker de toepassing kan laten weten wat er vervolgens moet worden uitgevoerd. Trainingskaarten kunnen alleen worden weergegeven in secundaire vensters en mogen geen dynamische koppelingen naar andere onderwerpen in het Help-bestand bevatten.

Een toepassing initieert het exemplaar van de trainingskaart van Windows Help door de functie WinHelp- aan te roepen en de HELP_TCARD opdracht in combinatie met een andere opdracht op te geven, zoals HELP_CONTEXT. Wanneer de gebruiker vervolgens op een knop in de trainingskaart klikt, klikt u op een hot spot die is toegewezen aan de TCard-macro of sluit u de trainingskaart, windows Help meldt de toepassing door een WM_TCARD bericht te verzenden. De parameter wParam identificeert de knop of gebruikersactie en de parameter lParam bevat aanvullende gegevens, waarvan de betekenis afhankelijk is van de waarde van wParam.

Hulp annuleren

Windows Help vereist dat een applicatie expliciet de hulp annuleert, zodat alle resources die worden gebruikt om de applicatie en zijn help-bestanden bij te houden, vrijgemaakt kunnen worden. De toepassing kan dit op elk gewenst moment doen door de functie WinHelp aan te roepen en de opdracht HELP_QUIT op te geven. Houd er rekening mee dat dit niet het geval is voor de pop-upversie van Windows Help. Een toepassing zou niet moeten proberen een pop-upvenster te sluiten.

Als een toepassing oproepen heeft gedaan naar WinHelp-, moet deze hulp annuleren voordat het hoofdvenster wordt gesloten (bijvoorbeeld als reactie op het WM_DESTROY bericht in de procedure van het hoofdvenster). Een toepassing moet WinHelp slechts één keer aanroepen om hulp te annuleren, ongeacht het aantal Help-bestanden dat is geopend. Windows Help blijft actief totdat alle toepassingen of DLL's help hebben geannuleerd.

Als u de Windows Help-instantie van de trainingskaart wilt afsluiten, moet u zowel de opdrachten HELP_TCARD als HELP_QUIT opgeven wanneer u WinHelpaanroept. Een toepassing hoeft het trainingskaart-exemplaar van Windows Help niet te annuleren als de gebruiker het eerst annuleert. Windows Help meldt een toepassing wanneer de gebruiker het exemplaar van de trainingskaart annuleert door het WM_TCARD bericht te verzenden met de parameter wParam ingesteld op IDCLOSE.

Help gebruiken

In deze sectie wordt beschreven hoe u contextgevoelige help kunt bieden voor een dialoogvenster en hoe u het uiterlijk van een secundair Help-venster instelt.

Help verstrekken in een dialoogvenster

Als u contextgevoelige hulp in een dialoogvenster wilt bieden, moet u een matrix maken die bestaat uit paren van DWORD- waarden. De eerste waarde in elk paar is de id van een besturingselement in het dialoogvenster en de tweede is de context-id van het Help-onderwerp voor het besturingselement. De matrix moet één paar id's bevatten voor elk besturingselement in het dialoogvenster.

De dialoogvensterprocedure moet de WM_HELP en WM_CONTEXTMENU berichten verwerken. De dialoogvensterprocedure ontvangt WM_HELP wanneer de gebruiker op de toets drukt en WM_CONTEXTMENU wanneer de gebruiker op de rechtermuisknop klikt.

De parameter lParam van WM_HELP bevat het adres van een HELPINFO structuur. De hItemHandle lid van deze structuur identificeert het besturingselement waarvoor de gebruiker hulp heeft aangevraagd. U moet deze ingang doorgeven aan de WinHelp--functie, samen met de opdracht HELP_WM_HELP, de naam van het Help-bestand en een aanwijzer naar de matrix met id's. De WinHelp-functie zoekt in de matrix naar de besturings-id van het opgegeven besturingselement en haalt vervolgens de bijbehorende Help-context-id op. Vervolgens geeft de functie de Help-context-id door aan Windows Help, waarmee het bijbehorende onderwerp wordt gevonden en weergegeven in een pop-upvenster. Als het besturingselement een id van -1 heeft, zoekt het systeem naar het volgende besturingselement dat een tabstop is en gebruikt vervolgens de bijbehorende id om de Help-context-id te vinden. Daarom is het belangrijk dat u statische tekst vóór bedieningselementen in een resourcebestand plaatst.

Wanneer u de WinHelp--functie aanroept, is de verwerking WM_CONTEXTMENU vergelijkbaar met het verwerken van WM_HELP met deze twee uitzonderingen:

  • U geeft de parameter wParam door van WM_CONTEXTMENU. Dit is de ingang voor het besturingselement dat het bericht heeft verzonden.
  • U geeft de opdracht HELP_CONTEXTMENU op in plaats van HELP_WM_HELP.

De opdracht HELP_CONTEXTMENU zorgt ervoor dat Windows Help een menu weergeeft voordat het Help-onderwerp wordt weergegeven. Het menu is door het systeem gedefinieerd. Hiermee kan de gebruiker help voor het besturingselement weergeven of het Help-onderwerpen dialoogvenster tonen.

In het volgende voorbeeld ziet u hoe u contextgevoelige Help in een dialoogvenster implementeert.

LRESULT CALLBACK EditDlgProc(HWND hwndDlg, UINT uMsg, 
                             WPARAM wParam, LPARAM lParam) 
{ 
    // Create an array of control identifiers and context identifiers. 
    static DWORD aIds[ ] = 
    { 
        ID_SAVE,   IDH_SAVE, 
        ID_DELETE, IDH_DELETE, 
        ID_COPY,   IDH_COPY, 
        ID_PASTE,  IDH_PASTE, 
        0,0 
    }; 

    switch (uMsg) 
    { 
        case WM_HELP: 
            WinHelp(((LPHELPINFO)lParam)->hItemHandle, "helpfile.hlp", 
                    HELP_WM_HELP, (DWORD)(LPSTR)aIds); 
            break; 

        case WM_CONTEXTMENU: 
            WinHelp((HWND)wParam, "helpfile.hlp", HELP_CONTEXTMENU, 
                    (DWORD)(LPVOID)aIds); 
            break; 
        
        // Process other messages here. 
    } 
    return FALSE; 
}

Het uiterlijk van een secundair Help-venster instellen

Een toepassing kan de grootte, positie en status van een secundair Help-venster instellen door de opdracht HELP_SETWINPOS en het adres van een HELPWININFO- structuur door te geven aan de WinHelp--functie. De leden van HELPWININFO geven de naam op van het venster dat moet worden gewijzigd, samen met de nieuwe grootte, positie en toonstatus van het venster.

In het volgende voorbeeld wordt het uiterlijk van een secundair venster met de naam wnd_menu ingesteld. De naam moet worden gedefinieerd in de sectie [WINDOWS] van het Help-projectbestand.

BOOL DoWindowSize(VOID) 
{ 
    HANDLE hhwi; 
    LPHELPWININFO lphwi; 
    WORD wSize; 
    char *szWndName = "wnd_menu"; 
    size_t NameLength;      // Does not include the terminating null character
    HRESULT hr
    BOOL retval;

    hr = StringCbLengthA(szWndName, STRSAFE_MAX_CCH, &NameLength);
    
    if (SUCCEEDED(hr))
    {
        // Add 1 to account for the name string's terminating null character.
        NameLength++;
        
        // The HELPWININFO structure contains a minimal TCHAR array of size [2] 
        // that is used for the window name. Since sizeof(HELPWININFO) 
        // includes those two TCHARS, they must be subtracted from the 
        // total when adding the actual string length to calculate the  
        // size of the structure. 
        wSize = sizeof(HELPWININFO) - 2 + NameLength; 
    }
    else
        // Something's amiss with the string.
        return FALSE;
        
    hhwi  = GlobalAlloc(GHND, wSize); 
    lphwi = (LPHELPWININFO)GlobalLock(hhwi); 

    lphwi->wStructSize = wSize; 
    lphwi->x    = 256;      // horizontal position 
    lphwi->y    = 256;      // vertical position 
    lphwi->dx   = 767;      // width 
    lphwi->dy   = 512;      // height 
    lphwi->wMax = SW_SHOW;  // show the window 
    
    // secondary window
    hr = StringCbCopyA(lphwi->rgchMember, sizeof(lphwi->rgchMember), szWndName);
    
    if (SUCCEEDED(hr))
    {
        WinHelp(hwnd, "myhelp.hlp", HELP_SETWINPOS, (DWORD)lphwi); 
     
        GlobalUnlock(hhwi); 
        GlobalFree(hhwi); 

        return TRUE; 
    }
    else
        // There was a problem copying the window name.
        return FALSE;
}