In questo articolo viene descritto come implementare le finestre popup di testo della Guida HTML. Si presume familiarità con Guida HTML e Microsoft Foundation Classes (MFC). Per ulteriori informazioni sulla preparazione di un'applicazione MFC per useHTML Guida, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
Configurazione di Visual c ++ per l'utilizzo dell'API della Guida HTML
Per ulteriori informazioni sulla conversione di un'applicazione MFC che utilizza WinHelp per utilizzare la Guida HTML, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
Testo popup sono piccole finestre contenenti solo testo. Nella maggior parte dei casi vengono utilizzati con della"Guida rapida" in cui l'utente fa clic sul punto interrogativo "della Guida rapida" e quindi fa clic su un controllo.
Esistono due metodi diversi, che è possibile utilizzare per implementare finestre popup di testo utilizzando l'API della Guida HTML.
Il primo metodo consente di passare una matrice di ID Guida e l'ID di un controllo all'API di Guida HTML. Guida HTML determina quale argomento da visualizzare, utilizzando l'handle di finestra del controllo per ottenere l'ID di controllo. L'ID del controllo viene quindi utilizzata per trovare l'ID di Guida in linea, che corrisponde al testo in un file di testo. Il file di testo viene compilato in file chm della Guida HTML.
Il secondo metodo richiede la sottoporre l'indirizzo di una struttura HH_POPUP contenente informazioni sulla finestra popup API della Guida HTML. Il tipo di informazioni passate alla matrice è i colori di primo piano e di sfondo, la dimensione di casella di testo, il tipo di carattere e l'ID di risorsa della stringa da visualizzare o la stringa effettiva.
In questo articolo vengono illustrati entrambi metodi di implementazione di finestre popup di testo utilizzando l'API della Guida HTML: utilizzando una matrice di ID di Guida e utilizzando una struttura HH_POPUP.
Implementazione di finestre popup di testo utilizzando una matrice di ID Guida
Utilizzando un editor di testo, creare un file txt nel seguente formato:
.topic help-id
text to be displayed
il seguente, denominato "Popups.txt", è un esempio:
.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
Includere il file di testo popup nella sezione [testo popup] del file di progetto della Guida HTML. A tale scopo, fare clic sul pulsante HTML Help API informazioni quindi popup di testo e File di testo per aggiungere il file di testo. Salvare il progetto.
Gli ID di fatto riferimento nel file testo, ad esempio HID_FILE_SAVE e HID_FILE_NEW nel passaggio precedente, devono essere definiti in un file di inclusione, quali questo denominato "Context.h:"
Il file "Context.h" deve essere compilato nel progetto della Guida HTML. Per effettuare questa operazione, fare clic sul pulsante HTML Help API informazioni quindi popup di testo e File di intestazione per aggiungere il file di intestazione. Dopo questo passaggio, la sezione [testo popup] necessario due file. Dovrebbe avere il file di testo testo popup dell'e il file di inclusione, ad esempio:
[TEXT POPUPS]
popups.txt
context.h
Salva il progetto e compilarlo.
I passaggi successivi implicano la modifica dell'applicazione MFC, quindi chiudere HTML Help Workshop e aprire l'applicazione in Visual Studio.
Dichiarare una matrice in qualsiasi modulo utilizza l'API per visualizzare finestre popup di testo (vedere il passaggio 7 per ulteriori informazioni su dove dovrebbe essere). La matrice contiene coppie di ID dei controlli e i relativi ID Guida corrispondente. La matrice deve terminare con uno 0. Seguito è riportato un esempio:
//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
Includere il file di intestazione per l'ID di Guida. In questo esempio sarebbe la seguente:
#include "context.h"
Esistono diverse posizioni in cui "della Guida rapida" nella Guida può essere implementato. Questo passaggio vengono descritti metodi per aggiungere una tale Guida in tre punti:
Per aggiungere della ? quali ? Guida a una finestra di dialogo, assicurarsi che l'opzione Guida sensibile al contesto sia selezionata nella casella proprietà Stili estesi nell'editor delle risorse. Quindi eseguire l'override del metodo di OnHelpInfo() mediante la creazione guidata classe. Seguito è riportato un esempio:
Per aggiungere "della Guida rapida" Guida per la finestra principale di, eseguire l'override CWinApp::Winhelp, verificare il parametro nCmd per verificare se è HELP_CONTEXT. Se è, potrebbe essere F1 o "Qual questa Guida". Se si desidera gestire questi tipi di Guida in linea nello stesso modo, quindi non è necessario conoscere quali uno è. Se si desidera modificare il tipo di Guida che verrà visualizzata per ciascuno dei comandi, è necessario determinare il tipo di Guida in linea viene richiamato. Un modo per ignorare il comando CMainFrame::OnContextHelp. Quando il cursore della ? quali ? si fa clic sulla finestra cornice, il framework chiama questa routine. Eseguire l'override questa funzione per impostare un flag per indicare che ? della Guida rapida ? Guida è stata richiamata. Quando l'utente fa quindi clic su un controllo, viene richiamata la funzione CWinApp::Winhelp. Nella funzione CWinApp::Winhelp, se HELP_CONTEXT è il comando ricevuto, controllare il flag. Seguito è riportato un esempio del metodo CMainFrame::OnContextHelp e il metodo 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;
}
}
"Guida rapida" Guida per una visualizzazione, ad esempio una visualizzazione form segue lo stesso percorso comando come per la finestra cornice. Il controllo passi la CFrameWindow::OnContextHelp quindi a CWinApp::Winhelp. È necessario intercettare il framework tra queste due funzioni per impostare l'ID del controllo appropriato. È possibile eseguire questa operazione manualmente (è Impossibile utilizzare la creazione guidata classe) eseguendo l'override del metodo OnHelpHitTest.
Questo comprende tre passaggi:
In primo luogo, aggiungere il metodo OnHelpHitTest la mappa messaggi della classe di visualizzazione:
Infine, aggiungere il metodo OnHelpHitTest la classe di visualizzazione. il lParam passato contiene la posizione di mouse del cursore. Per determinare l'ID del controllo, verificare se il mouse si trova su un controllo. Se si tratta di, è possibile restituire l'ID del controllo. Il framework chiamerà quindi CWinApp::CWinHelp con tale ID di controllo. In alternativa, è possibile visualizzare il messaggio di testo popup da OnHelpHitTest e impostare un flag per impedire che guida la gestione del messaggio nuovamente. Seguito è riportato un esempio di quest'ultimo:
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
}
Implementazione di finestre popup di testo mediante una struttura HH_POPUP
Una struttura HH_POPUP è definita nel file Htmlhelp.h come:
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;
sono disponibili due modi diversi per utilizzare questa struttura con Guida sensibile al contesto: È possibile passare il testo da visualizzare nel popup nel parametro idString oppure è possibile passare il parametro idString un ID di risorsa stringa.
Nell'esempio riportato di seguito viene illustrato il primo metodo di passando la stringa nel parametro 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(&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;
}
}
L'altro approccio è simile all'esempio precedente, ad eccezione impostato myPopup.pszText su NULL e di impostare myPopup.idString sull'ID della risorsa di stringa.
Identificativo articolo: 241218 - Ultima modifica: giovedì 1 luglio 2004 - Revisione: 1.1
Le informazioni in questo articolo si applicano a:
Microsoft HTML Help 1.22
Chiavi:
kbmt kbapi kbhowto KB241218 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 241218
(http://support.microsoft.com/kb/241218/en-us/
)
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilità per articoli della Microsoft Knowledge Base su prodotti non più supportati
Questo articolo è stato scritto sui prodotti per cui Microsoft non offre più supporto. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Grazie. I commenti e suggerimenti forniti verranno utilizzati per migliorare la qualità dei contenuti di supporto tecnico. Per ulteriori opzioni di assistenza, visitare la home page del Supporto Tecnico Microsoft.