How To Implement HTML Help Text Pop-Ups in einer MFC-Anwendung

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 241218 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die HTML-Text-Popupfenstern zu implementieren. Es wird davon ausgegangen, dass Sie mit HTML Help und Microsoft Foundation Classes (MFC) vertraut sind. Weitere Informationen zu MFC-Anwendung zu UseHTML Hilfe Vorbereiten finden Sie die Artikel der Microsoft Knowledge Base:
186907Einrichten von Visual C++ mit HTML Help-API
Weitere Informationen zum Konvertieren einer MFC-Anwendung, WinHelp HTML-Hilfe finden Sie die Artikelnummer unten klicken, um der Microsoft Knowledge Base:
241209Gewusst wie: Konvertieren eine neue MFC-Anwendung mit WinHelp HTML-Hilfe

Weitere Informationen

Text-Popupfenster sind kleine Fenster, die nur Text enthält. Sie werden häufig mit "Direkthilfe" verwendet, in denen der Benutzer klickt auf das Fragezeichen "Direkthilfe" und dann auf ein Steuerelement auf, Hilfe.

Es gibt zwei unterschiedliche Methoden, die Sie verwenden können, um Text Popupfenster mit der HTML-Hilfe-API zu implementieren.

Die erste Methode können Sie ein Array des Hilfe-IDs und ein Steuerelement-ID an HTML Help-API übergeben. HTML-bestimmt, welches Thema zur Anzeige indem Sie das Fensterhandle des Steuerelements verwenden, um die Steuerelement-ID abrufen Anschließend werden die Steuerelement-ID verwendet, um die Hilfe-ID, der die zu Text in einem Textdatei zuordnet gefunden. Die Textdatei wird in der HTML-CHM-Datei kompiliert.

Die zweite Methode erfordert, dass die Adresse ein HH_POPUP-Struktur mit Informationen über das Popup-Fenster an der HTML Help-API übergeben werden. Der Typ der im Array übergebenen Informationen ist die Farben für Vorder- und Hintergrund, die Größe des im Textfeld, die Schriftart und die RESSOURCENKENNUNG des die Zeichenfolge, die angezeigt wird oder die tatsächliche Zeichenfolge selbst.

Dieser Artikel beschreibt beide Methoden der Implementierung Text Popupfenster mit der HTML-Hilfe-API: mithilfe eines Arrays der Hilfe-IDs und mithilfe einer Struktur HH_POPUP.

Implementieren von Text Popup Windows mithilfe eines Hilfe-IDs

  1. Erstellen Sie eine TXT-Datei mit einem Texteditor, mit dem folgenden Format:
    .topic help-id
    text to be displayed
    						
    die folgenden, mit dem Namen "Popups.txt", ist ein Beispiel:
    .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. Enthalten Sie Popup Textdatei im Bereich [TEXT POPUPS] Ihrer Projektdatei HTML-Hilfe. Dazu klicken Sie auf die Schaltfläche HTML-Hilfe API Informationen , und klicken Sie auf Text-Popups und Textdatei , um die Textdatei hinzufügen. Speichern Sie das Projekt.
  3. Die IDs verwiesen in der Textdatei wie z. B. HID_FILE_SAVE und HID_FILE_NEW in der vorherigen Schritt müssen in einer Includedatei definiert werden, wie dieser mit dem Namen "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. Die Datei "Context.h" muss in das HTML-Projekt kompiliert werden. Dazu klicken Sie auf die Schaltfläche HTML-Hilfe API Informationen , und klicken Sie auf Text-Popups und Header , um die Headerdatei hinzufügen. Nachdem dieser Schritt sollten der Abschnitt [TEXT POPUPS] zwei Dateien verfügen. Er sollte die Textdatei des Text-Popups und Include-Datei, z. B. haben:
    [TEXT POPUPS]
    popups.txt
    context.h
    						
    das Projekt speichern und kompilieren.

    Die nächsten Schritte beinhalten MFC-Anwendung so schließen Sie HTML Help Workshop und die Anwendung in Visual Studio öffnen.
  5. Deklarieren Sie ein Array davon ab, welches Modul die API verwenden, um Text Popup-Fenstern anzuzeigen (siehe Schritt 7 Weitere Informationen dazu, wo dies sein sollte). Das Array enthält Paare von Steuerelement-IDs und deren entsprechende Hilfe-IDs. Das Array muss eine 0 enden. Folgt ein Beispiel:
    //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. Schließen Sie die Headerdatei für die Hilfe-IDs. Damit dieses Beispiel könnte es sein, wie folgt:
    #include "context.h"
    					
  7. Es gibt mehrere verschiedene Orten, wobei "Direkthilfe" Hilfe implementiert werden konnte. Diese Schritt beschreibt Methoden, um diese Hilfe an drei Stellen hinzuzufügen:

    1. Hinzuzufügende ? Direkthilfe eingeben-Hilfe zu einem Dialogfeld stellen Sie sicher die Context Help Option im Eigenschaftenfeld Erweiterte Formatvorlagen im Ressourcen-Editor ausgewählt ist. Anschließend überschreiben Sie die OnHelpInfo()-Methode mit dem Klassen-Assistenten ein. Folgt ein Beispiel:
      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. Zum Hinzufügen der "Direkthilfe" Hilfe zum Hauptfenster, überschreiben Sie CWinApp::Winhelp, Testen den Parameter nCmd, um festzustellen, ob Sie HELP_CONTEXT. Wenn er, es könnte sein, F1-Hilfe, oder "What's dieser Hilfe". Wenn Sie diese Arten von behandeln möchten Hilfe die gleiche Weise, und Sie nicht die wissen müssen. Wenn Sie den Typ der Hilfe ändern, die für jeden der Befehle angezeigt werden möchten, müssen Sie bestimmen der Typ der Hilfe aufgerufen wird. Eine Möglichkeit dazu, den Befehl CMainFrame::OnContextHelp zu überschreiben. Wenn der Cursor ? Direkthilfe eingeben im Rahmenfenster geklickt wird, ruft das Framework diese Routine. Überschreiben Sie diese Funktion auf ein Kennzeichen an, dass ? eingeben Direkthilfe festlegen Hilfe wurde aufgerufen. Wenn der Benutzer dann auf ein Steuerelement klickt, wird die Funktion CWinApp::Winhelp aufgerufen. In Ihrer Funktion CWinApp::Winhelp Wenn HELP_CONTEXT der empfangene Befehl handelt, überprüft das Flag. Der folgt ein Beispiel der CMainFrame::OnContextHelp-Methode und die CWinApp::WinHelp-Methode:
      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. "Direkthilfe" Hilfe für eine Ansicht, z. B. eine Ansicht eines Formulars als für das Rahmenfenster den gleichen Befehlspfad folgt. Steuerelement wechselt auf den CFrameWindow::OnContextHelp und dann auf CWinApp::Winhelp. Es ist notwendig Abfangen des Frameworks zwischen diese beiden Funktionen zum entsprechenden Steuerelement-ID festlegen Sie können dies manuell tun (Sie können nicht den Klasse-Assistenten verwenden) durch Überschreiben der OnHelpHitTest-Methode.

      Dies umfasst drei Schritte:

      1. Zunächst fügen Sie die OnHelpHitTest-Methode hinzu die Meldungszuordnung der Ansichtsklasse:
        BEGIN_MESSAGE_MAP(MyFormView, CFormView)
        	//{{AFX_MSG_MAP(MyFormView)
        	//}}AFX_MSG_MAP
        	ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest)
        END_MESSAGE_MAP()
      2. Als Nächstes fügen den Prototyp für OnHelpHitTest zur Ansicht Includedatei:
        LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam);
      3. Abschließend fügen Sie die OnHelpHitTest-Methode zur Ansichtsklasse. Die übergebene lParam enthält die Mausposition des Cursors. Zur Bestimmung der Steuerelement-ID überprüfen Sie, wenn die Maus auf ein Steuerelement befindet. Wenn dies der Fall ist, können Sie die Steuerelement-ID zurückgeben. Das Framework rufen Sie dann CWinApp::CWinHelp mit der Steuerelement-ID Oder Sie können anzeigen, das Text-Popup aus OnHelpHitTest und ein Kennzeichen so WinHelp Behandlung der Meldung erneut festlegen. Die folgenden ist ein Beispiel des erstere:
        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
        } 
        									

Implementieren mithilfe einer Struktur für HH_POPUP Text Windows Popup

Eine HH_POPUP-Struktur ist in der Datei Htmlhelp.h als definiert:
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;
				
gibt es zwei verschiedene Möglichkeiten, diese Struktur mit kontextbezogene Hilfe zu verwenden: Sie können im Popupfenster im IdString-Parameter anzuzeigende Text übergeben, oder Sie können eine Zeichenfolge Ressourcen-ID im IdString-Parameter übergeben.

Das folgende Beispiel veranschaulicht die erste Methode von die Zeichenfolge in der IdString-Parameter übergeben.
// 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;
   }
}
				

Der andere Ansatz ist ähnlich wie im vorherigen Beispiel Sie myPopup.pszText auf NULL festgelegt, und legen Sie myPopup.idString auf die ID der Zeichenfolgenressource.

Eigenschaften

Artikel-ID: 241218 - Geändert am: Donnerstag, 1. Juli 2004 - Version: 1.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft HTML Help 1.22
Keywords: 
kbmt kbapi kbhowto KB241218 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 241218
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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