Dela via


Hantera onlinehjälp

Onlinehjälp kan komma i olika former, från detaljerad konceptuell information till snabbdefinitioner. Det här avsnittet innehåller följande avsnitt.

Om hjälp

En viktig del av ett användarvänligt program är lättillgängligt i onlinehjälpen. Windows tillhandahåller funktioner och meddelanden som gör det enkelt att implementera onlinehjälp i ditt program när det används tillsammans med Windows-hjälpprogrammet. Den här översikten beskriver de element i Windows som stöder onlinehjälp. Den beskriver hur du använder dessa element för att ge användarna möjlighet att begära hjälp och förklarar hur du använder Windows-hjälpprogrammet för att visa hjälp.

Hjälpförfrågningar

De flesta Windows-baserade program tillhandahåller onlinehjälpinformation i olika former, allt från konceptuell hjälp som förklarar syftet med ett programs funktioner till popup-hjälp som ger snabbdefinitioner av enskilda element i programmets användargränssnitt. Du använder funktioner och meddelanden för att ge användarna en mängd olika sätt att begära åtkomst till den här informationen. I följande avsnitt beskrivs dessa hjälpförfrågningar.

Hjälp-menyn

De flesta program ger användarna åtkomst till hjälpinformation genom att inkludera en Hjälp-menyn i huvudfönstret. När användaren väljer ett objekt från en Hjälp-menyn får motsvarande fönsterprocedur ett WM_COMMAND meddelande som identifierar det markerade objektet. Programmet svarar genom att visa lämplig hjälpinformation, till exempel en lista över hjälpämnen, ett index eller en introduktion till programmet.

Hjälp från tangentbordet

Windows ger användaren åtkomst till hjälpinformation från tangentbordet genom att meddela programmet när användaren trycker på F1-tangenten. Systemet skickar ett WM_HELP meddelande till fönstret som hade tangentbordsfokus när användaren tryckte på tangenten. Om fönstret är ett underordnat fönster (till exempel en kontroll i en dialogruta) skickar funktionen DefWindowProc meddelandet till det överordnade fönstret. Om en meny är aktiv när F1 trycks in skickar systemet meddelandet till fönstret som är associerat med menyn. Programmet svarar genom att visa hjälpinformation som är associerad med fönstret, kontrollen eller menyn som har fokus eller är aktiv. Om användaren till exempel väljer en kontroll i en dialogruta och trycker på F1, visar programmet hjälpinformation för den kontrollen.

Parametern lParam för WM_HELP är en pekare till en HELPINFO- struktur som innehåller detaljerad information om det objekt som hjälp begärs för. Du använder den här informationen för att fastställa vilket hjälpavsnitt som ska visas. HELPINFO- struktur innehåller även koordinaterna för musmarkören när användaren tryckte på tangenten. Du kan använda den här informationen för att ge hjälp baserat på musmarkörens plats.

Hjälp från musen

Windows ger användaren åtkomst till hjälpinformation från musen genom att meddela programmet när användaren klickar på höger musknapp eller klickar på ett fönster, en kontroll eller en meny efter att ha klickat på knappen Fråga (?). Programmet svarar genom att visa hjälpinformation som är associerad med det angivna fönstret, kontrollen eller menyn.

Systemet skickar ett WM_CONTEXTMENU meddelande när användaren klickar på höger musknapp. Fönstret som klickades tar emot meddelandet. Om fönstret är ett barnfönster, till exempel en kontroll, skickar funktionen DefWindowProc meddelandet till föräldrafönstret. Meddelandet WM_CONTEXTMENU anger koordinaterna för musmarkören. X-koordinaten är i lågordningsordet i parametern lParam och y-koordinaten är i högordningsordet. Om användaren klickade på en kontroll är parametern wParam referensen till kontrollen som tog emot klicket.

Systemet skickar ett WM_HELP meddelande när användaren klickar på ett objekt i ett fönster efter att ha klickat på knappen Fråga (?) som visas i namnlisten i fönstret. Du kan lägga till en Fråga-knapp i en titelrad genom att ange stilen WS_EX_CONTEXTHELP i funktionen CreateWindowEx när du skapar fönstret. Parametern lParam för WM_HELP är en pekare till en HELPINFO- struktur som innehåller detaljerad information om det objekt som hjälp begärs för, inklusive koordinaterna för musmarkören när användaren klickade på musknappen.

Knappen Fråga rekommenderas endast för användning i dialogrutor. Tidigare har applikationer gett användaråtkomst till hjälpinformation om en dialogruta genom att tillhandahålla en Hjälp-knapp i dialogrutan. Den här metoden rekommenderas inte längre. Använd knappen Fråga i stället.

Hjälp för bildskärm och Windows-hjälp

När ett program får en begäran om hjälp bör det visa lämplig hjälpinformation. Eftersom Windows-hjälpprogrammet tillhandahåller ett konsekvent användargränssnitt rekommenderar vi att program använder Windows-hjälpen i stället för andra metoder. För att dirigera Windows-hjälpen till att visa hjälpinformation använder ett program funktionen WinHelp och anger information, till exempel den information som ska visas och vilken form av fönster som den ska visas i. I följande avsnitt beskrivs hur du använder WinHelp- för att visa hjälpinformation.

Hjälpfiler

Om du vill visa hjälpinformation måste du ange en hjälpfil när du anropar funktionen WinHelp. Hjälpfilen måste ha filformatet Windows Help (.hlp) och ett eller flera ämnen. Varje ämne är en distinkt informationsenhet, till exempel en konceptbeskrivning, en uppsättning instruktioner, en bild, en ordlista och så vidare. Ämnen måste identifieras unikt så att Windows-hjälpen kan hitta dem när de begärs. Internt använder Windows-hjälpen ämnesidentifierare för att hitta ämnen, men program använder oftast kontextidentifierare (unika heltalsvärden) för att ange vilka ämnen som ska visas. Hjälpfilens författare måste uttryckligen mappa kontextidentifierare till ämnesidentifierare i avsnittet [MAP] i projektfilen som används för att skapa hjälpfilen.

När du anger en hjälpfil men inte anger någon sökväg letar WinHelp efter hjälpfilen i hjälpkatalogen eller i en katalog som anges av PATH-miljövariabeln. Dessutom kan WinHelp hitta en hjälpfil vars namn visas på följande registerplats:

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            Help

Om du vill dra nytta av registret måste du skapa ett värdenamn som har samma namn som din hjälpfil. Värdet som tilldelats det namnet måste vara den katalog där hjälpfilen finns.

Om WinHelp inte kan hitta den angivna hjälpfilen visas en dialogruta där användaren kan ange platsen för hjälpfilen. Eftersom WinHelp sparar platsinformationen i registret ber den inte igen om platsen för samma hjälpfil.

Mer information om hur du skapar och skapar en hjälpfil finns i dokumentationen med dina utvecklingsverktyg.

Starta Windows-hjälpen

I följande exempel används funktionen WinHelp för att starta Windows-hjälpprogrammet och öppna hjälpfilen i ämnet Innehåll.

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

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

I nästa exempel öppnas användarhjälpfilen, filen söks efter det ämne som är associerat med en nyckelordssträng och sedan visas ämnet.

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

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

Dialogruta Hjälpämnen

Du kan visa dialogrutan Hjälpavsnitt genom att anropa funktionen WinHelp med kommandot HELP_FINDER. I dialogrutan Hjälpavsnitt kan användaren välja ämnen som ska visas genom att visa rubrikerna i ämnena, nyckelorden som är associerade med ämnena eller de ord och fraser som finns i ämnena. Program visar vanligtvis den här dialogrutan när användaren väljer ett kommando, till exempel Hjälpämnen, på hjälpmenyn. Ett program kan också visa den här dialogrutan om användaren trycker på nyckeln när inget specifikt fönster, kontroll eller meny i programmet har fokus eller är aktiv.

Tidigare har program använt kommandona HELP_CONTENTS och HELP_INDEX med funktionen WinHelp för att visa ämnet Innehåll och nyckelordsindexet för hjälpfilen. Dessa kommandon rekommenderas inte längre. Använd kommandot HELP_FINDER i stället.

Informationsämnen

Du kan visa ett specifikt ämne genom att anropa funktionen WinHelp med kommandot HELP_CONTEXT och ange kontextidentifieraren för ämnet. Program använder vanligtvis kommandot HELP_CONTEXT som svar på användarförfrågningar för ämnen som innehåller konceptuell information eller procedurhjälp i stället för information om en specifik kontroll eller meny. I sådana fall kan användaren fortsätta att bläddra i hjälpfilen och söka efter relaterad information innan han eller hon återvänder till programmet.

Kommandot HELP_CONTEXT anropar en vanlig instans av Windows-hjälpen så att användaren kan hitta andra ämnen i hjälpfilen. Det visar vanligtvis det huvudsakliga hjälpfönstret, som innehåller ett namnlist, en systemmeny, minimera och maximera knappar, en huvudmeny, ett valfritt navigeringsfält, en storleksgräns och ett klientområde. Texten i det valda ämnet visas i klientområdet och användaren kan navigera i hjälpfilen med hjälp av snabblänkar eller navigeringsknappar i huvudfönstret. Den vanliga instansen av Windows-hjälpen kan också användas för att visa hjälp i ett eller flera sekundära fönster i stället för huvudfönstret.

Popup-ämnen

Du kan visa ett popup-avsnitt som innehåller information för en viss kontroll eller meny genom att anropa funktionen WinHelp med kommandot HELP_WM_HELP eller HELP_CONTEXTMENU. Dessa kommandon visar ett ämne i ett popup-fönster nära motsvarande kontroll eller meny. Om du vill låta användaren återgå omedelbart för att arbeta i programmet förstörs popup-fönstret så fort användaren trycker på en tangent eller klickar på den vänstra musknappen.

Du använder kommandot HELP_WM_HELP när du bearbetar WM_HELP meddelanden för kontrollfönster. Eftersom de flesta kontroller skickar meddelandet WM_HELP till funktionen DefWindowProc bearbetar motsvarande dialogruteprocedur (eller överordnad fönsterprocedur) det här meddelandet. I stället för att ge en specifik kontextidentifierare måste dialogruteproceduren skicka en matris med kontroll- och kontextidentifierarpar till WinHelp- tillsammans med kontrollhandtaget som anges i hItemHandle medlem i HELPINFO- struktur som skickas med WM_HELP meddelandet. Funktionen avgör identifieraren för den kontroll som WM_HELP meddelandet genererades för och använder matchande kontextidentifierare för att visa lämpligt ämne.

Du använder kommandot HELP_CONTEXTMENU när du bearbetar WM_CONTEXTMENU meddelanden. Eftersom de flesta kontroller skickar meddelandet WM_CONTEXTMENU till funktionen DefWindowProc bearbetar motsvarande dialogruteprocedur (eller överordnad fönsterprocedur) det här meddelandet. Proceduren anger en matris med kontroll- och kontextidentifierarpar. Den anger även referensen i parametern wParam när du anropar WinHelp- så att funktionen kan välja lämplig kontextidentifierare från matrisen och visa lämpligt ämne. Till skillnad från kommandot HELP_WM_HELP visar HELP_CONTEXTMENU först en Vad är det här? kommando i en meny. Om användaren väljer kommandot visar WinHelp ämnet. Annars avbryts begäran.

Du kan också visa popup-ämnen med hjälp av kommandot HELP_CONTEXTPOPUP och ange en kontextidentifierare för ämnet. Det här kommandot liknar kommandot HELP_CONTEXT men anropar popup-instansen av Windows-hjälpen som används av HELP_WM_HELP och HELP_CONTEXTMENU. Program kan använda det här kommandot som svar på WM_HELP meddelanden för att visa hjälp för menyer och för fönster som inte är kontroller i en dialogruta. Om du vill använda det här kommandot mest effektivt bör programmet tilldela kontextidentifierare till dessa menyer och fönster.

Du kan tilldela en kontextidentifierare till ett fönster eller en meny i programmet. När ett WM_HELP meddelande genereras innehåller systemet kontextidentifieraren i HELPINFO- struktur som skickas till det överordnade fönstret i det WM_HELP meddelandet. Det överordnade fönstret kan sedan skicka kontextidentifieraren till WinHelp för att visa det hjälpavsnitt som begärts.

Du använder funktionen SetWindowContextHelpId för att tilldela en kontextidentifierare till ett fönster eller en kontroll och funktionen SetMenuContextHelpId för att tilldela en kontextidentifierare till en meny. Du kan hämta kontextidentifieraren för ett fönster eller en meny med hjälp av funktionen GetWindowContextHelpId eller GetMenuContextHelpId.

Nyckelordssökningar

Du kan göra så att användaren kan hitta och visa ämnen genom att tilldela nyckelord till ämnen i hjälpfilen. Ett nyckelord är helt enkelt en sträng som är associerad med ett eller flera ämnen. Windows Help samlar in alla nyckelord i en hjälpfil, placerar dem i en tabell och visar dem i indexlistan i dialogrutan Hjälpämnen. När användaren väljer ett nyckelord visar Windows-hjälpen det associerade hjälpavsnittet eller, om det finns fler än ett ämne som är associerat med nyckelordet, visar en lista med ämnen som användaren kan välja mellan.

I ett program kan du använda kommandot HELP_KEY, HELP_PARTIALKEY eller HELP_MULTIKEY med funktionen WinHelp för att söka efter och visa hjälpämnen baserat på helt eller delvisa nyckelord. Du anger kommandot, nyckelordssträngen, hjälpfilen och handtaget till ägarfönstret. Om en enskild matchning hittas visar WinHelp i samtliga fall motsvarande ämne. Om fler än en matchning hittas visar funktionen dialogrutan Ämnen hittades och användaren kan välja vilket ämne som ska visas. Om ingen matchning hittas visar WinHelp antingen indexlistan (för HELP_KEY och HELP_PARTIALKEY) eller ett felmeddelande (för HELP_MULTIKEY).

Din applikation kan söka efter flera nyckelord i ett enda anrop till WinHelp genom att avgränsa nyckelorden med semikolon. (Sökning efter flera nyckelord stöds inte för hjälpfiler som skapats för Windows version 3.x) Den kan också söka efter nyckelord i flera hjälpfiler om den angivna hjälpfilen har en innehållsfil (.cnt) som innehåller :Index- eller :Link-kommandon. Med kommandot HELP_KEY söker WinHelp efter nyckelord i alla filer som anges av dessa kommandon. Med kommandona HELP_MULTIKEY och HELP_PARTIALKEY söker funktionen igenom alla filer förutom de som anges av :Link-kommandon.

Som standard identifierar Windows-hjälpen endast nyckelordstabellen som identifieras av K-fotnotstecknet i hjälpkällfilen. Du kan dirigera Windows-hjälpen till att skapa ytterligare nyckelordstabeller genom att lägga till ett annat fotnotstecken än K, med nyckelordsdefinitionen, i hjälpkällfilen. (Fotnotstecknet A är dock reserverat.) Du måste definiera ytterligare nyckelordstabeller med hjälp av MULTIKEY-instruktioner i avsnittet [ALTERNATIV] i projektfilen när du skapar hjälpfilen.

Ett program kan använda kommandot HELP_SETINDEX med funktionen WinHelp för att dirigera Windows-hjälpen till att visa en annan nyckelordstabell än K i indexlistan. Om du vill dirigera Windows-hjälpen till att söka efter ett nyckelord i en alternativ nyckelordstabell kan ett program använda kommandot HELP_MULTIKEY. Du anger nyckelord och nyckelordstabell i en MULTIKEYHELP-struktur som du skickar till WinHelp.

När WinHelp visar ett ämne visas det i fönstret som anges av fotnoten ">" för ämnet, i fönstret som anges av kommandot :Base i innehållsfilen eller i huvudfönstret. Om huvudfönstret redan är öppet för en annan hjälpfil när du anropar WinHelpdöljer funktionen huvudfönstret när du söker. Om du i det här fallet avbryter dialogrutorna Ämnen som hittats och Hjälpavsnitt stängs huvudfönstret.

Sekundära hjälpfönster

Huvudfönstret i Windows-hjälpprogrammet kallas det primära fönstret. Windows-hjälpen kan också visa hjälpavsnitt i ett sekundärt fönster. Till skillnad från det primära hjälpfönstret innehåller ett sekundärt fönster inte någon menyrad. Du kan inkludera ett navigeringsfält i ett sekundärt fönster och du kan lägga till knappar i fältet. Du kan också välja att låta Windows-hjälpen automatiskt justera höjden på det sekundära fönstret så att det passar ämnet.

Du måste definiera sekundära fönster i avsnittet [WINDOWS] i hjälpprojektfilen och ange namnet och, om du vill, initial storlek och position för varje fönster. Du kan dirigera Windows-hjälpprogrammet att visa ett ämne i ett sekundärt fönster genom att lägga till en vinkelparentes (>) och namnet som du har definierat för det sekundära fönstret till namnet på hjälpfilen. Den resulterande strängen skickas sedan till funktionen WinHelp.

Ett program kan ändra storlek och position för ett primärt eller sekundärt fönster genom att ange adressen för en HELPWININFO- struktur och kommandot HELP_SETWINPOS i ett anrop till WinHelp. HELPWININFO anger namnet på fönstret och dess nya storlek och position.

Hjälp om träningskort

Med hjälp av hjälpen för träningskort kan ett program visa en sekvens med instruktioner som vägleder användaren genom stegen i en uppgift. Ett träningskort består vanligtvis av text som förklarar ett visst steg och knappar som är associerade med TCard-makron, vilket gör att användaren kan tala om för programmet vad de ska göra härnäst. Träningskort kan bara visas i sekundära fönster och får inte innehålla heta länkar till andra ämnen i hjälpfilen.

Ett program initierar träningskortsinstansen av Windows-hjälpen genom att anropa funktionen WinHelp och ange kommandot HELP_TCARD i kombination med ett annat kommando, till exempel HELP_CONTEXT. När användaren klickar på en knapp i träningskortet, klickar på en frekvent punkt som tilldelats till TCard-makrot eller stänger träningskortet meddelar Windows Help programmet genom att skicka ett WM_TCARD meddelande. Parametern wParam identifierar knappen eller användaråtgärden, och parametern lParam innehåller ytterligare data, vars innebörd beror på värdet för wParam.

Avbryta hjälpen

Windows-hjälpen kräver att ett program uttryckligen avbryter hjälpen så att den kan frigöra alla resurser som används för att hålla reda på programmet och dess hjälpfiler. Programmet kan göra detta när som helst genom att anropa funktionen WinHelp och ange kommandot HELP_QUIT. Observera att detta inte gäller för popup-instansen av Windows-hjälpen. Ett program bör inte försöka stänga en popup-instans.

Om ett program har gjort några anrop till WinHelpmåste det avbryta hjälpen innan det stänger huvudfönstret (till exempel som svar på det WM_DESTROY meddelandet i huvudfönsterproceduren). Ett program behöver bara anropa WinHelp en gång för att avbryta hjälpen, oavsett hur många hjälpfiler det har öppnat. Windows-hjälpen fortsätter att köras tills alla program eller DLL:er har avbrutit hjälpen.

Om du vill stänga träningskortets instans av Windows-hjälpen måste du ange både kommandona HELP_TCARD och HELP_QUIT när du anropar WinHelp. Ett program behöver inte avbryta instansen av träningskortet i Windows Hjälp om användaren avbryter det först. Windows Help meddelar en applikation när användaren avbryter instansen av träningskortet genom att skicka WM_TCARD-meddelandet med parametern wParam inställd på IDCLOSE.

Använda hjälp

Det här avsnittet visar hur du tillhandahåller sammanhangsberoende hjälp för en dialogruta och hur du anger utseendet på ett sekundärt hjälpfönster.

Ge hjälp i en dialogruta

Om du vill ge sammanhangsberoende hjälp i en dialogruta måste du skapa en matris som består av par med DWORD- värden. Det första värdet i varje par är identifieraren för en kontroll i dialogrutan, och det andra är kontextidentifieraren för hjälpavsnittet för kontrollen. Matrisen bör innehålla ett par identifierare för varje kontroll i dialogrutan.

Dialogruteproceduren måste bearbeta WM_HELP och WM_CONTEXTMENU meddelanden. Dialogruteproceduren tar emot WM_HELP när användaren trycker på tangenten och WM_CONTEXTMENU när användaren klickar på höger musknapp.

Parametern lParam för WM_HELP innehåller adressen för en HELPINFO- struktur. Den hItemHandle- medlem i den här strukturen identifierar den kontroll som användaren har begärt hjälp för. Du måste skicka detta handtag till funktionen WinHelp tillsammans med kommandot HELP_WM_HELP, namnet på hjälpfilen och en pekare till matrisen med identifierare. Funktionen WinHelp söker i matrisen efter kontrollidentifieraren för den angivna kontrollen och hämtar sedan motsvarande hjälpkontextidentifierare. Sedan skickar funktionen hjälpkontextidentifieraren till Windows-hjälpen, som hittar motsvarande ämne och visar det i ett popup-fönster. Om kontrollen har en identifierare på -1, söker systemet efter nästa kontroll som är ett tabbstopp och använder sedan dess identifierare för att hitta hjälpkontextidentifieraren. Därför är det viktigt att du placerar statisk text före kontroller i en resursfil.

När du anropar funktionen WinHelp är bearbetningen av WM_CONTEXTMENU liknande som för bearbetningen av WM_HELP, med följande två undantag:

  • Du skickar parametern wParam från WM_CONTEXTMENU, vilket är handtaget till kontrollen som skickade meddelandet.
  • Du anger kommandot HELP_CONTEXTMENU i stället för HELP_WM_HELP.

Kommandot HELP_CONTEXTMENU gör att Windows-hjälpen visar en meny innan hjälpavsnittet visas. Menyn är systemdefinierad. Det gör att användaren kan visa hjälp för kontrollen eller visa dialogrutan Hjälpavsnitt.

I följande exempel visas hur du implementerar sammanhangsberoende hjälp i en dialogruta.

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; 
}

Ange utseendet på ett sekundärt hjälpfönster

Ett program kan ange storlek, position och visa status för ett sekundärt hjälpfönster genom att skicka kommandot HELP_SETWINPOS och adressen för en HELPWININFO- struktur till funktionen WinHelp. Medlemmarna i HELPWININFO ange namnet på fönstret som ska ändras och fönstrets nya storlek, position och visningstillstånd.

I följande exempel anges utseendet på ett sekundärt fönster med namnet "wnd_menu". Namnet måste definieras i avsnittet [WINDOWS] i hjälpprojektfilen.

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;
}