Compartilhar via


Manipulando a Ajuda Online

A ajuda online pode vir de várias formas, desde informações conceituais detalhadas até definições rápidas. Este tópico inclui as seções a seguir.

Sobre a Ajuda

Um elemento importante de um aplicativo amigável está prontamente disponível na ajuda online. O Windows fornece funções e mensagens que, quando usadas em conjunto com o aplicativo de Ajuda do Windows, facilitam a implementação da ajuda online em seu aplicativo. Essa visão geral discute os elementos do Windows que dão suporte à ajuda online. Ele descreve como usar esses elementos para fornecer aos usuários um meio de solicitar ajuda e explica como usar o aplicativo da Ajuda do Windows para exibir ajuda.

Solicitações de Ajuda

A maioria dos aplicativos baseados no Windows fornece informações de ajuda online em uma variedade de formas, desde ajuda conceitual que explica a finalidade dos recursos de um aplicativo até a ajuda pop-up que fornece definições rápidas de elementos individuais na interface do usuário do aplicativo. Você usa funções e mensagens para fornecer aos usuários várias maneiras de solicitar acesso a essas informações. As seções a seguir descrevem essas solicitações de ajuda.

Menu Ajuda

A maioria dos aplicativos fornece acesso do usuário às informações de ajuda, incluindo um menu ajuda na janela main. Quando o usuário seleciona um item em um menu da Ajuda , o procedimento de janela correspondente recebe uma mensagem WM_COMMAND que identifica o item selecionado. O aplicativo responde exibindo as informações de ajuda apropriadas, como uma lista de tópicos de ajuda, um índice ou uma introdução ao aplicativo.

Ajuda do teclado

O Windows fornece acesso do usuário para ajudar as informações do teclado notificando o aplicativo sempre que o usuário pressiona a tecla F1. O sistema envia uma mensagem WM_HELP para a janela que tinha o foco do teclado quando o usuário pressionava a tecla. Se a janela for uma janela filho (por exemplo, um controle em uma caixa de diálogo), a função DefWindowProc passará a mensagem para a janela pai. Se um menu estiver ativo quando F1 for pressionado, o sistema enviará a mensagem para a janela associada ao menu. O aplicativo responde exibindo informações de ajuda associadas à janela, controle ou menu que tem o foco ou está ativo. Por exemplo, se o usuário selecionar um controle em uma caixa de diálogo e pressionar F1, o aplicativo exibirá informações de ajuda para esse controle.

O parâmetro lParam de WM_HELP é um ponteiro para uma estrutura HELPINFO que contém informações detalhadas sobre o item para o qual a ajuda é solicitada. Use essas informações para determinar o tópico de ajuda a ser exibido. A estrutura HELPINFO também inclui as coordenadas do cursor do mouse no momento em que o usuário pressionou a tecla. Você pode usar essas informações para fornecer ajuda com base na localização do cursor do mouse.

Ajuda do mouse

O Windows fornece ao usuário acesso para ajudar as informações do mouse notificando o aplicativo sempre que o usuário clica no botão direito do mouse ou clica em uma janela, controle ou menu depois de clicar no botão Pergunta (?). O aplicativo responde exibindo informações de ajuda associadas à janela, controle ou menu fornecidos.

O sistema envia uma mensagem WM_CONTEXTMENU quando o usuário clica no botão direito do mouse. A janela que foi clicada recebe a mensagem. Se a janela for uma janela filho, como um controle, a função DefWindowProc passará a mensagem para a janela pai. A mensagem WM_CONTEXTMENU especifica as coordenadas do cursor do mouse. A coordenada x está na palavra de baixa ordem do parâmetro lParam e a coordenada y está na palavra de alta ordem. Se o usuário clicou em um controle, o parâmetro wParam será o identificador para o controle que recebeu o clique.

O sistema envia uma mensagem WM_HELP quando o usuário clica em um item em uma janela depois de clicar no botão Pergunta (?) que aparece na barra de título da janela. Você pode adicionar um botão Pergunta a uma barra de título especificando o estilo WS_EX_CONTEXTHELP na função CreateWindowEx ao criar a janela. O parâmetro lParam de WM_HELP é um ponteiro para uma estrutura HELPINFO que contém informações detalhadas sobre o item para o qual a ajuda é solicitada, incluindo as coordenadas do cursor do mouse no momento em que o usuário clicou no botão do mouse.

O botão Pergunta é recomendado apenas para uso em caixas de diálogo. No passado, os aplicativos forneceram acesso do usuário para ajudar informações sobre uma caixa de diálogo fornecendo um botão Ajuda na caixa de diálogo. Esse método não é mais recomendado. Em vez disso, use o botão Pergunta.

Ajuda para exibir e Ajuda do Windows

Depois que um aplicativo recebe uma solicitação de ajuda, ele deve exibir as informações de ajuda apropriadas. Como o aplicativo da Ajuda do Windows fornece uma interface do usuário consistente, é recomendável que os aplicativos usem a Ajuda do Windows em vez de outros métodos. Para direcionar a Ajuda do Windows para exibir informações de ajuda, um aplicativo usa a função WinHelp , especificando detalhes como as informações a serem exibidas e a forma da janela na qual exibi-la. As seções a seguir explicam como usar o WinHelp para exibir informações de ajuda.

Arquivos da Ajuda

Para exibir informações de ajuda, você deve especificar um arquivo de ajuda ao chamar a função WinHelp . O arquivo de ajuda deve ter o formato de arquivo da Ajuda do Windows (.hlp) e um ou mais tópicos. Cada tópico é uma unidade distinta de informações, como uma descrição conceitual, um conjunto de instruções, uma imagem, uma definição de glossário e assim por diante. Os tópicos devem ser identificados exclusivamente para que a Ajuda do Windows possa localizá-los sempre que forem solicitados. Internamente, a Ajuda do Windows usa identificadores de tópico para localizar tópicos, mas os aplicativos geralmente usam identificadores de contexto (valores inteiros exclusivos) para especificar os tópicos a serem exibidos. O autor do arquivo de ajuda deve mapear explicitamente identificadores de contexto para identificadores de tópico na seção [MAP] do arquivo de projeto usado para criar o arquivo de ajuda.

Quando você especifica um arquivo de ajuda, mas não especifica um caminho, o WinHelp procura o arquivo de ajuda no diretório de ajuda ou em um diretório especificado pela variável de ambiente PATH. Além disso, o WinHelp pode encontrar um arquivo de ajuda cujo nome está listado no seguinte local do Registro:

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            Help

Para aproveitar o registro, você deve criar um nome de valor que tenha o mesmo nome que o arquivo de ajuda. O valor atribuído a esse nome deve ser o diretório em que o arquivo de ajuda reside.

Se o WinHelp não encontrar o arquivo de ajuda especificado, ele exibirá uma caixa de diálogo que permite que o usuário especifique o local do arquivo de ajuda. Como o WinHelp salva as informações de localização no Registro, ele não solicita novamente o local do mesmo arquivo de ajuda.

Para obter mais informações sobre como criar e criar um arquivo de ajuda, consulte a documentação fornecida com suas ferramentas de desenvolvimento.

Iniciando a Ajuda do Windows

O exemplo a seguir usa a função WinHelp para iniciar o aplicativo da Ajuda do Windows e abrir o arquivo de ajuda para o tópico Conteúdo.

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

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

Este próximo exemplo abre o arquivo de ajuda do usuário, pesquisa o arquivo para o tópico associado a uma cadeia de caracteres de palavra-chave e exibe o tópico.

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

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

Caixa de diálogo Tópicos da Ajuda

Você pode exibir a caixa de diálogo Tópicos da Ajuda chamando a função WinHelp com o comando HELP_FINDER . A caixa de diálogo Tópicos da Ajuda permite que o usuário selecione tópicos a serem exibidos exibindo os títulos dos tópicos, as palavras-chave associadas aos tópicos ou as palavras e frases encontradas nos tópicos. Os aplicativos normalmente exibem essa caixa de diálogo quando o usuário escolhe um comando, como Tópicos de Ajuda, no menu Ajuda. Um aplicativo também poderá exibir essa caixa de diálogo se o usuário pressionar a tecla quando nenhuma janela, controle ou menu específico no aplicativo tiver o foco ou estiver ativo.

No passado, os aplicativos usavam os comandos HELP_CONTENTS e HELP_INDEX com a função WinHelp para exibir o tópico Conteúdo e o índice palavra-chave do arquivo de Ajuda. Esses comandos não são mais recomendados. Em vez disso, use o comando HELP_FINDER .

Tópicos de informações

Você pode exibir um tópico específico chamando a função WinHelp com o comando HELP_CONTEXT e especificando o identificador de contexto para o tópico. Os aplicativos normalmente usam o comando HELP_CONTEXT em resposta a solicitações de usuário para tópicos que contêm informações conceituais ou ajuda processual, em vez de informações sobre um controle ou menu específico. Nesses casos, o usuário pode continuar a procurar o arquivo de ajuda procurando informações relacionadas antes de retornar ao aplicativo.

O comando HELP_CONTEXT invoca uma instância regular da Ajuda do Windows, permitindo que o usuário encontre outros tópicos no arquivo de ajuda. Normalmente, ele exibe a janela ajuda main, que inclui uma barra de título, um menu do sistema, botões minimizar e maximizar, um menu main, uma barra de navegação opcional, uma borda de dimensionamento e uma área do cliente. O texto do tópico selecionado aparece na área do cliente e o usuário pode navegar pelo arquivo de ajuda usando links frequentes ou botões de navegação na janela main. A instância regular da Ajuda do Windows também pode ser usada para exibir ajuda em uma ou mais janelas secundárias em vez da janela main.

Tópicos pop-up

Você pode exibir um tópico pop-up que contém informações para um controle ou menu específico chamando a função WinHelp com o comando HELP_WM_HELP ou HELP_CONTEXTMENU. Esses comandos exibem um tópico em uma janela pop-up próxima ao controle ou menu correspondente. Para permitir que o usuário retorne imediatamente para trabalhar no aplicativo, a janela pop-up é destruída assim que o usuário pressiona uma tecla ou clica no botão esquerdo do mouse.

Use o comando HELP_WM_HELP ao processar mensagens WM_HELP para janelas de controle. Como a maioria dos controles passa a mensagem WM_HELP para a função DefWindowProc , o procedimento da caixa de diálogo correspondente (ou procedimento de janela pai) processa essa mensagem. Em vez de fornecer um identificador de contexto específico, o procedimento da caixa de diálogo deve passar uma matriz de pares de controle e identificador de contexto para WinHelp junto com o identificador de controle especificado no membro hItemHandle da estrutura HELPINFO passada com a mensagem WM_HELP . A função determina o identificador do controle para o qual a mensagem WM_HELP foi gerada e usa o identificador de contexto correspondente para exibir o tópico apropriado.

Você usa o comando HELP_CONTEXTMENU ao processar mensagens WM_CONTEXTMENU . Como a maioria dos controles passa a mensagem WM_CONTEXTMENU para a função DefWindowProc , o procedimento da caixa de diálogo correspondente (ou procedimento de janela pai) processa essa mensagem. O procedimento especifica uma matriz de pares de identificador de controle e contexto; ele também especifica o identificador no parâmetro wParam ao chamar WinHelp para que a função possa escolher o identificador de contexto apropriado da matriz e exibir o tópico apropriado. Ao contrário do comando HELP_WM_HELP, HELP_CONTEXTMENU primeiro exibe um comando What's This? em um menu. Se o usuário escolher o comando, WinHelp exibirá o tópico. Caso contrário, a solicitação será cancelada.

Você também pode exibir tópicos pop-up usando o comando HELP_CONTEXTPOPUP e especificando um identificador de contexto do tópico. Esse comando é semelhante ao comando HELP_CONTEXT, mas invoca a instância pop-up da Ajuda do Windows usada por HELP_WM_HELP e HELP_CONTEXTMENU. Os aplicativos podem usar esse comando em resposta a mensagens de WM_HELP para exibir ajuda para menus e para janelas que não são controles em uma caixa de diálogo. Para usar esse comando com mais eficiência, o aplicativo deve atribuir identificadores de contexto a esses menus e janelas.

Você pode atribuir um identificador de contexto a qualquer janela ou menu no aplicativo. Quando uma mensagem de WM_HELP é gerada, o sistema inclui o identificador de contexto na estrutura HELPINFO que é passada para a janela pai na mensagem WM_HELP . Em seguida, a janela pai pode passar o identificador de contexto para WinHelp para exibir o tópico de ajuda solicitado.

Use a função SetWindowContextHelpId para atribuir um identificador de contexto a uma janela ou controle e a função SetMenuContextHelpId para atribuir um identificador de contexto a um menu. Você pode recuperar o identificador de contexto de uma janela ou menu usando a função GetWindowContextHelpId ou GetMenuContextHelpId .

Pesquisas de palavra-chave

Você pode permitir que o usuário localize e exiba tópicos atribuindo palavras-chave a tópicos no arquivo de ajuda. Um palavra-chave é simplesmente uma cadeia de caracteres associada a um ou mais tópicos. A Ajuda do Windows coleta todas as palavras-chave em um arquivo de ajuda, as coloca em uma tabela e as exibe na lista Índice da caixa de diálogo Tópicos da Ajuda . Quando o usuário seleciona um palavra-chave, a Ajuda do Windows exibe o tópico de ajuda associado ou, se houver mais de um tópico associado ao palavra-chave, exibe uma lista de tópicos dos quais o usuário pode escolher.

Em um aplicativo, você pode usar o comando HELP_KEY, HELP_PARTIALKEY ou HELP_MULTIKEY com a função WinHelp para pesquisar e exibir tópicos de ajuda com base em palavras-chave inteiras ou parciais. Especifique o comando, a cadeia de caracteres palavra-chave, o arquivo de ajuda e o identificador para a janela de proprietário. Em todos os casos, se uma única correspondência for encontrada, o WinHelp exibirá o tópico correspondente. Se mais de uma correspondência for encontrada, a função exibirá a caixa de diálogo Tópicos Encontrados e o usuário poderá escolher qual tópico exibir. Se nenhuma correspondência for encontrada, o WinHelp exibirá a lista Índice (para HELP_KEY e HELP_PARTIALKEY) ou exibirá uma mensagem de erro (para HELP_MULTIKEY).

Seu aplicativo pode pesquisar várias palavras-chave em uma única chamada para WinHelp separando as palavras-chave com ponto e vírgula. (Não há suporte para a pesquisa de várias palavras-chave para arquivos de ajuda criados para o Windows versão 3. x) Ele também pode pesquisar palavras-chave em vários arquivos de ajuda se o arquivo de ajuda especificado tiver um arquivo contents(.cnt) que contém comandos :Index ou :Link. Com o comando HELP_KEY, o WinHelp pesquisa palavras-chave em todos os arquivos especificados por esses comandos. Com os comandos HELP_MULTIKEY e HELP_PARTIALKEY, a função pesquisa todos os arquivos, exceto aqueles especificados por comandos :Link.

Por padrão, a Ajuda do Windows reconhece apenas a tabela palavra-chave identificada pelo caractere de nota de rodapé K no arquivo de origem da ajuda. Você pode direcionar a Ajuda do Windows para criar tabelas de palavra-chave adicionais adicionando um caractere de nota de rodapé diferente de K, com a definição de palavra-chave, no arquivo de origem da ajuda. (O caractere de nota de rodapé A, no entanto, é reservado.) Você deve definir quaisquer tabelas de palavra-chave adicionais usando instruções MULTIKEY na seção [OPÇÕES] do arquivo de projeto ao criar o arquivo de ajuda.

Um aplicativo pode usar o comando HELP_SETINDEX com a função WinHelp para direcionar a Ajuda do Windows para exibir uma tabela palavra-chave diferente de K em sua lista índice. Para direcionar a Ajuda do Windows para pesquisar um palavra-chave em uma tabela palavra-chave alternativa, um aplicativo pode usar o comando HELP_MULTIKEY. Especifique a tabela palavra-chave e palavra-chave em uma estrutura MULTIKEYHELP, que você passa para WinHelp.

Quando o WinHelp exibe um tópico, ele o exibe na janela especificada pela nota de rodapé ">" para o tópico, na janela especificada pelo comando :Base no arquivo de conteúdo ou na janela main. Se a janela main já estiver aberta para um arquivo de ajuda diferente quando você chamar WinHelp, a função ocultará a janela main durante a pesquisa. Nesse caso, cancelar as caixas de diálogo Tópicos Encontrados e Tópicos de Ajuda fecha a janela main.

Janelas de Ajuda Secundária

A janela main do aplicativo da Ajuda do Windows é chamada de janela primária. A Ajuda do Windows também pode exibir tópicos de ajuda em uma janela secundária. Ao contrário da janela de Ajuda primária, uma janela secundária não contém uma barra de menus. Você pode incluir uma barra de navegação em uma janela secundária e pode adicionar botões à barra. Você também pode optar por fazer com que a Ajuda do Windows ajuste automaticamente a altura da janela secundária para acomodar o tópico.

Você deve definir janelas secundárias na seção [WINDOWS] do arquivo de projeto de ajuda, fornecendo o nome e, opcionalmente, o tamanho inicial e a posição de cada janela. Você pode direcionar o aplicativo da Ajuda do Windows para exibir um tópico em uma janela secundária acrescentando um colchete angular (>) e o nome que você definiu para a janela secundária ao nome do arquivo de ajuda. A cadeia de caracteres resultante é então passada para a função WinHelp .

Um aplicativo pode alterar o tamanho e a posição de uma janela primária ou secundária especificando o endereço de uma estrutura HELPWININFO e o comando HELP_SETWINPOS em uma chamada para WinHelp. HELPWININFO especifica o nome da janela e seu novo tamanho e posição.

Ajuda do cartão de treinamento

Usando o treinamento cartão ajuda, um aplicativo pode exibir uma sequência de instruções para orientar o usuário pelas etapas de uma tarefa. Um cartão de treinamento normalmente consiste em texto que explica uma etapa e botões específicos associados a macros TCard, que permitem que o usuário diga ao aplicativo o que fazer a seguir. Os cartões de treinamento só podem ser exibidos em janelas secundárias e não devem conter links frequentes para outros tópicos no arquivo de ajuda.

Um aplicativo inicia o treinamento cartão instância da Ajuda do Windows chamando a função WinHelp e especificando o comando HELP_TCARD em combinação com outro comando, como HELP_CONTEXT. Posteriormente, quando o usuário clica em um botão no cartão de treinamento, clica em um ponto de acesso atribuído à macro TCard ou fecha o cartão de treinamento, a Ajuda do Windows notifica o aplicativo enviando-lhe uma mensagem WM_TCARD. O parâmetro wParam identifica o botão ou a ação do usuário e o parâmetro lParam contém dados adicionais, cujo significado depende do valor de wParam.

Cancelando ajuda

A Ajuda do Windows exige que um aplicativo cancele explicitamente a ajuda para que ele possa liberar todos os recursos usados para acompanhar o aplicativo e seus arquivos de ajuda. O aplicativo pode fazer isso a qualquer momento chamando a função WinHelp e especificando o comando HELP_QUIT. Observe que isso não é verdadeiro para a instância pop-up da Ajuda do Windows. Um aplicativo não deve tentar fechar uma instância pop-up.

Se um aplicativo tiver feito chamadas para o WinHelp, ele deverá cancelar a ajuda antes de fechar sua janela de main (por exemplo, em resposta à mensagem WM_DESTROY no procedimento de janela main). Um aplicativo precisa chamar WinHelp apenas uma vez para cancelar a ajuda, independentemente de quantos arquivos de ajuda ele abriu. A Ajuda do Windows permanece em execução até que todos os aplicativos ou DLLs tenham cancelado a ajuda.

Para fechar a instância de treinamento cartão da Ajuda do Windows, você deve especificar os comandos HELP_TCARD e HELP_QUIT ao chamar WinHelp. Um aplicativo não precisa cancelar o treinamento cartão instância da Ajuda do Windows se o usuário cancelá-lo primeiro. A Ajuda do Windows notifica um aplicativo quando o usuário cancela o treinamento cartão instância enviando a mensagem WM_TCARD com o parâmetro wParam definido como IDCLOSE.

Usando a ajuda

Esta seção mostra como fornecer ajuda contextual para uma caixa de diálogo e como definir a aparência de uma janela de Ajuda secundária.

Fornecendo ajuda em uma caixa de diálogo

Para fornecer ajuda contextual em uma caixa de diálogo, você deve criar uma matriz que consiste em pares de valores DWORD . O primeiro valor em cada par é o identificador de um controle na caixa de diálogo e o segundo é o identificador de contexto do tópico de ajuda para o controle. A matriz deve conter um par de identificadores para cada controle na caixa de diálogo.

O procedimento da caixa de diálogo deve processar as mensagens WM_HELP e WM_CONTEXTMENU . O procedimento da caixa de diálogo recebe WM_HELP quando o usuário pressiona a tecla e WM_CONTEXTMENU quando o usuário clica no botão direito do mouse.

O parâmetro lParam de WM_HELP contém o endereço de uma estrutura HELPINFO . O membro hItemHandle dessa estrutura identifica o controle para o qual o usuário solicitou ajuda. Você deve passar esse identificador para a função WinHelp junto com o comando HELP_WM_HELP, o nome do arquivo de ajuda e um ponteiro para a matriz de identificadores. A função WinHelp pesquisa a matriz para o identificador de controle do controle especificado e recupera o identificador de contexto de ajuda correspondente. Em seguida, a função passa o identificador de contexto de ajuda para a Ajuda do Windows, que localiza o tópico correspondente e o exibe em uma janela pop-up. Se o controle tiver um identificador de -1, o sistema procurará o próximo controle que é uma parada de tabulação e, em seguida, usará seu identificador para encontrar o identificador de contexto de ajuda. Por esse motivo, é importante que você coloque o texto estático antes dos controles em um arquivo de recurso.

Ao chamar a função WinHelp , o processamento de WM_CONTEXTMENU é semelhante ao processamento WM_HELP com essas duas exceções:

  • Você passa o parâmetro wParam de WM_CONTEXTMENU, que é o identificador para o controle que enviou a mensagem.
  • Especifique o comando HELP_CONTEXTMENU em vez de HELP_WM_HELP.

O comando HELP_CONTEXTMENU faz com que a Ajuda do Windows exiba um menu antes de exibir o tópico de ajuda. O menu é definido pelo sistema. Ele permite que o usuário exiba ajuda para o controle ou exiba a caixa de diálogo Tópicos da Ajuda .

O exemplo a seguir mostra como implementar a ajuda contextual em uma caixa de diálogo.

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

Definindo a aparência de uma janela de ajuda secundária

Um aplicativo pode definir o tamanho, a posição e o estado de uma janela de ajuda secundária passando o comando HELP_SETWINPOS e o endereço de uma estrutura HELPWININFO para a função WinHelp . Os membros do HELPWININFO especificam o nome da janela a ser alterada e o novo tamanho, posição e estado da janela.

O exemplo a seguir define a aparência de uma janela secundária chamada "wnd_menu". O nome deve ser definido na seção [WINDOWS] do arquivo de projeto de ajuda.

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