Cómo el texto de Ayuda de HTML de implementar las ventanas emergentes en una aplicación MFC

Seleccione idioma Seleccione idioma
Id. de artículo: 241218 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo describe cómo implementar ventanas emergentes de texto de Ayuda HTML. Se supone que está familiarizado con Ayuda HTML y Microsoft Foundation Classes (MFC). Para obtener información adicional sobre cómo preparar una aplicación MFC useHTML ayuda, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
186907Cómo configurar Visual C++ para utilizar la API de Ayuda HTML
Para obtener información adicional de conversión de una aplicación MFC que está utilizando Winhelp para utilizar la Ayuda de HTML, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
241209Cómo convertir una aplicación MFC nueva a la Ayuda HTML con WinHelp

Más información

Texto ventanas emergentes son pequeñas ventanas que contiene sólo texto. Se utilizan más a menudo con "¿Qué es esto?" Ayuda donde el usuario hace clic en la marca pregunta "¿Qué es esto?" y, a continuación, hace clic en un control.

Hay dos métodos diferentes que puede utilizar para implementar ventanas emergentes de texto utilizando la API de Ayuda HTML.

El primer método permite pasar una matriz de identificadores de Ayuda y el ID de un control a la API de Ayuda HTML. Ayuda HTML se determina qué tema para mostrarlo utilizando el controlador de ventana del control para obtener el identificador del control. A continuación, utiliza el identificador del control para buscar el identificador de Ayuda, que se asigna a texto en un archivo de texto. El archivo de texto se compila en el archivo .chm de Ayuda HTML.

El segundo método requiere que se pase la dirección de una estructura HH_POPUP que contiene información acerca de la ventana emergente a la API de Ayuda HTML. El tipo de información que se pasa en la matriz es los colores de primer plano y de fondo, el tamaño del cuadro de texto, la fuente y el identificador de recurso de cadena que se va a mostrar o la propia cadena real.

Este artículo muestra ambos métodos de implementación de ventanas emergentes de texto utilizando la API de Ayuda HTML: utilizando una matriz de identificadores de Ayuda y utilizando una estructura HH_POPUP.

Implementación de ventanas emergentes de texto mediante una matriz de identificadores de Ayuda

  1. Mediante un editor de texto, crear un archivo .txt con el formato siguiente:
    .topic help-id
    text to be displayed
    						
    la siguiente, denominada "Popups.txt", es un ejemplo:
    .topic IDH_HT_VSCROLL
    Vertical Scroll
    
    .topic IDH_FILE_OPEN
    Open a File
    
    .topic IDH_FILE_NEW
    Create A New File
    
    .topic IDH_FILE_SAVE
    Save a File
    					
  2. Incluya el archivo de texto emergente en la sección [texto emergentes] del archivo de proyecto de Ayuda HTML. Para ello, haga clic en el botón de Información de API de Ayuda de HTML y, a continuación, haga clic en texto emergentes y Archivo de texto para agregar el archivo de texto. Guarde el proyecto.
  3. Los identificadores que hace referencia en el archivo texto, como HID_FILE_SAVE HID_FILE_NEW en el paso anterior, deben definirse en un archivo de inclusión, como esta, uno denominado "Context.h:"
    #define IDH_FILE_NEW 1
    #define IDH_FILE_OPEN 2
    #define IDH_FILE_SAVE 3
    #define IDH_EDIT_CUT 4
    #define IDH_EDIT_COPY 5 
    #define IDH_EDIT_PASTE 6
    #define IDH_FILE_PRINT 7
    #define IDH_APP_ABOUT 8 
    #define IDH_FILE_PRINT_PREVIEW 9
    #define IDH_BUTTON1 10
    					
  4. El archivo "Context.h" debe compilarse en el proyecto de Ayuda HTML. Para ello, haga clic en el botón de Información de API de Ayuda de HTML y, a continuación, haga clic en texto emergentes y Archivo de encabezado para agregar el archivo de encabezado. Después de este paso, la sección [texto emergentes] debe tener dos archivos. Debe tener el archivo de texto de ventanas emergentes de texto y el archivo de inclusión, como:
    [TEXT POPUPS]
    popups.txt
    context.h
    						
    guardar el proyecto y compílelo.

    Los pasos siguientes implican cambiar una aplicación MFC, por lo que cerrar HTML Help Workshop y abren la aplicación en Visual Studio.
  5. Declare una matriz en el módulo es utilizando la API para mostrar ventanas de texto emergentes (vea el paso 7 para obtener más información acerca de dónde debe ser). La matriz contiene pares de identificadores de controles y sus identificadores de Ayuda correspondiente. La matriz debe terminar en un 0. El siguiente es un ejemplo:
    //Declare an array of control id - help id pairs. The array must have 0 as the last element.
    
    DWORD ids[7] ; 
    ids[0] = ID_FILE_OPEN; ids[1] = IDH_FILE_OPEN;
    ids[2] = ID_FILE_NEW;  ids[3] = IDH_FILE_NEW; 
    ids[4] = ID_FILE_SAVE; ids[5] = IDH_FILE_SAVE; 
    ids[6]= 0;
    #define numHelpIDs 3
    					
  6. Incluya el archivo de encabezado para el ID de Ayuda. Este ejemplo sería como sigue:
    #include "context.h"
    					
  7. Hay distintos lugares donde "¿Qué es esto?" Ayuda podría implementarse. Este paso describe métodos para agregar dicho ayuda en tres lugares:

    1. Para agregar ? ¿qué es esto ? ayuda a un cuadro de diálogo, asegúrese de que la opción Ayuda contextual está activada en el cuadro Estilos extendidos de la propiedad en el Editor de recursos. A continuación, reemplazar el método de OnHelpInfo() utilizando al Asistente para clases. El siguiente es un ejemplo:
      BOOL CMyDialog::OnHelpInfo(HELPINFO* pHelpInfo) 
      {
       HtmlHelp((HWND)pHelpInfo->hItemHandle, "sample.chm::/popups.txt",HH_TP_HELP_WM_HELP,(DWORD) ids);
      	  return CDialog::OnHelpInfo(pHelpInfo);
      
      }
    2. Para agregar "¿Qué es esto?" ayuda a la ventana principal, reemplazar CWinApp::Winhelp, probar el parámetro nCmd para ver si es HELP_CONTEXT. Si lo es, a continuación, podría ser Ayuda F1 o "¿Qué es esta Ayuda". Si desea controlar estos tipos de Ayuda del mismo modo, no tiene que saber cuál es. Si desea cambiar el tipo de Ayuda que se mostrará para cada uno de los comandos, debe determinar qué tipo de Ayuda se invoca. Una manera de hacerlo para reemplazar el comando CMainFrame::OnContextHelp. Cuando el cursor ? ¿qué es esto ? se hace clic en la ventana de marco, el marco de trabajo llama a esta rutina. Reemplazar esta función para establecer un indicador para indicar que ? qué es esto ? invocó la Ayuda. Cuando el usuario, a continuación, hace clic en un control, se invoca la función CWinApp::Winhelp. En la función CWinApp::Winhelp, si HELP_CONTEXT es el comando recibido, compruebe el indicador. El siguiente es un ejemplo del método CMainFrame::OnContextHelp y el método CWinApp::WinHelp:
      void CMainFrame::OnContextHelp()
       {
      	((CNEWTEXTPOPApp *) AfxGetApp())->m_bWhatsThisHelp = TRUE;
      	CMDIFrameWnd::OnContextHelp();
      }
      
      
      void CNEWTEXTPOPApp::WinHelp(DWORD dwData, UINT nCmd)
      {
         DWORD i;
         DWORD ids[3];
      
         i=nCmd;
      
         switch (nCmd)
         {
         case HELP_CONTEXT:
            for (i= 0; i < numHelpIDs*2; i+=2)
              {
      	if(  (aMenuHelpIDs[i] == LOWORD (dwData) ) )
      	{
      		if (m_bWhatsThisHelp)
      		{
      			m_bWhatsThisHelp = FALSE;
      		 	i++;
      			
      			ids[1] = aMenuHelpIDs[i];
      			ids[2] = 0;
         
      		        	ids[0]= ((CMainFrame *)m_pMainWnd)->GetDlgCtrlID();
      			HWND atest = ((CMainFrame *)m_pMainWnd)->m_hWnd;
      
                      		HtmlHelp(atest, "sample.chm::/popups.txt",HH_TP_HELP_WM_HELP,(DWORD) ids);
      
      			return;
      		  }
      		  else
      		  {
      			// If F1 help was selected, use HH_HELP_CONTEXT..			
      			HtmlHelp(m_pMainWnd->m_hWnd, "F:\\HTML H Context Help\\test\\sample.chm",HH_HELP_CONTEXT, aMenuHelpIDs[i+1]);
      			return;
                         }
                }
                }
          break;
         }
      }
      							
    3. "¿Qué es esto?" Ayuda para obtener una vista como una vista de formulario sigue la misma ruta de comando como para la ventana de marco. Control pasa la CFrameWindow::OnContextHelp a CWinApp::Winhelp. Es necesario interceptar el marco de trabajo entre estas dos funciones para establecer el identificador de control apropiado. Puede hacerlo manualmente (no se puede utilizar el Asistente de clase) reemplazando el método OnHelpHitTest.

      Esto implica tres pasos:

      1. En primer lugar, agregue el método de OnHelpHitTest al mapa de mensajes de la clase de vista:
        BEGIN_MESSAGE_MAP(MyFormView, CFormView)
        	//{{AFX_MSG_MAP(MyFormView)
        	//}}AFX_MSG_MAP
        	ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest)
        END_MESSAGE_MAP()
      2. A continuación, agregue el prototipo para OnHelpHitTest a la vista del archivo de inclusión:
        LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam);
      3. Por último, agregue el método OnHelpHitTest a la clase de vista. LParam pasado contiene la posición del mouse del cursor. Para determinar el identificador de control, compruebe si el mouse está en un control. Si es así, puede devolver el identificador del control. A continuación, el marco de trabajo llamará a CWinApp::CWinHelp con ese identificador de control O bien, puede mostrar el elemento de texto emergente de OnHelpHitTest y establecer un indicador para evitar que WinHelp controlar el mensaje nuevo. El siguiente es un ejemplo de la primera:
        LRESULT MyFormView::OnHelpHitTest(WPARAM wParam, LPARAM lParam)
        {
        	CWnd *pCtrl;
        	RECT ctrlRect;
        	CRect ctrlCRect;
        	CPoint HitPt;
        	int i;
        	CRect rectView;
        
        // Get View's Rectangle
        	GetWindowRect(&rectView);
        
        // HitPt is where the mouse clicked in screen coordinates but
        // relative to the view window.
        	HitPt.x = LOWORD (lParam);  
        	HitPt.y = HIWORD (lParam);
        
        // Make the screen coordinates relative to the main window
        // since controls coords will be.
        	HitPt.x+= rectView.left;
        	HitPt.y+= rectView.top;
        
        // Look at the screen coords for each control
        	for (i=0; i < NUM_CONTROLS; i++){
        		pCtrl =  GetDlgItem(ViewControlIds[i]);  // get a ptr to a control id
        		if (pCtrl == NULL) return (0);
              		pCtrl->GetWindowRect(&ctrlRect);     // get control's rectangle
        `		ctrlCRect = ctrlRect;                // convert to CRect for next
        
        	  	if (ctrlCRect.PtInRect(HitPt)){       // if point was in Control's rect
        	  		((CNEWTEXTPOPApp *) AfxGetApp())->m_bWhatsThisHelp = TRUE;
        			return (ViewControlIds[i]);         // pass help id to Winhelp
              		} 
        
        	}
          	i++;  // point past help control id
        	return 0;          // if not on control pass 0 to let winhelp handle
        } 
        									

Implementación de ventanas emergentes de texto mediante una estructura HH_POPUP

Una estructura HH_POPUP se define en el archivo Htmlhelp.h como:
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 szFile 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;
				
hay dos formas diferentes de utilizar esta estructura con ayuda contextual: se puede pasar el texto que se mostrará en la ventana emergente en el parámetro idString o puede pasar un identificador de recurso de cadena en el parámetro idString.

En el ejemplo siguiente se muestra el primer método pasando la cadena en el parámetro IdString.
// Define a structure to save the control IDs and the text strings for<BR/>
// them.


struct MyStrings_Struct
{
	DWORD control_id;    
	CHAR   myString[80];
} MyStrings[2];

// Initialize the structure.
MyStrings[0].control_id = ID_FILE_OPEN;
strcpy(MyStrings[0].myString , "This opens the file.\n");
MyStrings[1].control_id = ID_FILE_NEW;
strcpy(MyStrings[1].myString , "This opens a new file.\n");

// Declare the popup structure and initialize it.
HH_POPUP        myPopup;

memset(&amp;myPopup, 0, sizeof(HH_POPUP) );          // Fill in the popup 
structure
myPopup.cbStruct = sizeof(HH_POPUP);
myPopup.pt.x = r.left;
myPopup.pt.y = r.bottom;
myPopup.rcMargins.top    = 5;
myPopup.rcMargins.bottom = 5;
myPopup.rcMargins.left   = 5;
myPopup.rcMargins.right  = 5;
myPopup.idString =  0;   // set the ID string to 0

// search for the control id in the control array, put the help control ID in the HH_POPUP array.

for( i=0; i < MY_ARRAY_SIZE; i+=2 )
 {
     if  (MyControlId ==  MyStrings[i].control_id ) 
     { 
              strcpy(MyPopup.pszText, MyStrings[i].myString);
        HtmlHelp( this->m_hWnd, NULL, HH_DISPLAY_TEXT_POPUP, (DWORD) &myPopup);
	return;
   }
}
				

El otro enfoque es similar al ejemplo anterior, excepto establecer myPopup.pszText en NULL y establezca myPopup.idString en el identificador del recurso de cadena.

Propiedades

Id. de artículo: 241218 - Última revisión: jueves, 1 de julio de 2004 - Versión: 1.1
La información de este artículo se refiere a:
  • Microsoft HTML Help 1.22
Palabras clave: 
kbmt kbapi kbhowto KB241218 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 241218
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com