LPTEXTOUTPROC
Quando l'utente esegue un'operazione di controllo del codice sorgente dall'interno dell'ambiente di sviluppo integrato (IDE), il plug-in del controllo del codice sorgente potrebbe voler trasmettere messaggi di errore o di stato relativi all'operazione. Il plug-in può visualizzare le proprie finestre di messaggio a questo scopo. Tuttavia, per un'integrazione più semplice, il plug-in può passare stringhe all'IDE, che quindi li visualizza nel modo nativo di visualizzare le informazioni sullo stato. Il meccanismo per questo è il puntatore a LPTEXTOUTPROC
funzione. L'IDE implementa questa funzione (descritta in modo più dettagliato di seguito) per la visualizzazione di errori e stato.
L'IDE passa al plug-in del controllo del codice sorgente un puntatore di funzione a questa funzione, come lpTextOutProc
parametro, quando si chiama SccOpenProject. Durante un'operazione SCC, ad esempio, al centro di una chiamata a SccGet che coinvolge molti file, il plug-in può chiamare la LPTEXTOUTPROC
funzione, passando periodicamente stringhe da visualizzare. L'IDE può visualizzare queste stringhe su una barra di stato, in una finestra di output o in una finestra di messaggio separata, in base alle esigenze. Facoltativamente, l'IDE potrebbe essere in grado di visualizzare determinati messaggi con un pulsante Annulla . In questo modo l'utente può annullare l'operazione e offre all'IDE la possibilità di passare di nuovo queste informazioni al plug-in.
Firma
La funzione di output dell'IDE ha la firma seguente:
typedef LONG (*LPTEXTOUTPROC) (
LPSTR display_string,
LONG mesg_type
);
Parametri
display_string
Stringa di testo da visualizzare. Questa stringa non deve essere terminata con un ritorno a capo o un avanzamento riga.
mesg_type
Tipo di messaggio. Nella tabella seguente sono elencati i valori supportati per questo parametro.
Valore | Descrizione |
---|---|
SCC_MSG_INFO, SCC_MSG_WARNING, SCC_MSG_ERROR |
Il messaggio è considerato informazioni, avviso o errore. |
SCC_MSG_STATUS |
Il messaggio mostra lo stato e può essere visualizzato nella barra di stato. |
SCC_MSG_DOCANCEL |
Inviato senza stringa di messaggio. |
SCC_MSG_STARTCANCEL |
Inizia a visualizzare un pulsante Annulla . |
SCC_MSG_STOPCANCEL |
Arresta la visualizzazione di un pulsante Annulla . |
SCC_MSG_BACKGROUND_IS_CANCELLED |
Chiede all'IDE se l'operazione in background deve essere annullata: l'IDE restituisce SCC_MSG_RTN_CANCEL se l'operazione è stata annullata; in caso contrario, restituisce SCC_MSG_RTN_OK . Il display_string parametro viene sottoposto a cast come struttura SccMsgDataIsCancelled , fornita dal plug-in del controllo del codice sorgente. |
SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE |
Indica all'IDE un file prima che venga recuperato dal controllo della versione. Il display_string parametro viene eseguito il cast come struttura SccMsgDataOnBeforeGetFile , fornito dal plug-in del controllo del codice sorgente. |
SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE |
Indica all'IDE un file dopo che è stato recuperato dal controllo della versione. Il display_string parametro viene eseguito il cast come struttura SccMsgDataOnAfterGetFile , fornito dal plug-in del controllo del codice sorgente. |
SCC_MSG_BACKGROUND_ON_MESSAGE |
Indica all'IDE lo stato corrente di un'operazione in background. Il display_string parametro viene eseguito come struttura SccMsgDataOnMessage , fornito dal plug-in del controllo del codice sorgente. |
Valore restituito
Valore | Descrizione |
---|---|
SCC_MSG_RTN_OK | La stringa è stata visualizzata o l'operazione è stata completata correttamente. |
SCC_MSG_RTN_CANCEL | L'utente vuole annullare l'operazione. |
Esempio
Si supponga che l'IDE chiami SccGet con venti nomi di file. Il plug-in del controllo del codice sorgente vuole impedire l'annullamento dell'operazione al centro di un recupero di file. Dopo aver ottenuto ogni file, chiama lpTextOutProc
, passando le informazioni sullo stato in ogni file e invia un SCC_MSG_DOCANCEL
messaggio se non ha stato da segnalare. Se in qualsiasi momento il plug-in riceve un valore restituito dell'IDE SCC_MSG_RTN_CANCEL
, annulla immediatamente l'operazione get, in modo che non vengano recuperati altri file.
Strutture
SccMsgDataIsCancelled
typedef struct {
DWORD dwBackgroundOperationID;
} SccMsgDataIsCancelled;
Questa struttura viene inviata con il SCC_MSG_BACKGROUND_IS_CANCELLED
messaggio. Viene usato per comunicare l'ID dell'operazione in background annullata.
SccMsgDataOnBeforeGetFile
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szFile;
} SccMsgDataOnBeforeGetFile;
Questa struttura viene inviata con il SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE
messaggio. Viene usato per comunicare il nome del file che sta per essere recuperato e l'ID dell'operazione in background che esegue il recupero.
SccMsgDataOnAfterGetFile
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szFile;
SCCRTN sResult;
} SccMsgDataOnAfterGetFile;
Questa struttura viene inviata con il SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE
messaggio. Viene usato per comunicare il risultato del recupero del file specificato e dell'ID dell'operazione in background che ha eseguito il recupero. Vedere i valori restituiti per SccGet per gli elementi che possono essere forniti di conseguenza.
SccMsgDataOnMessage
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szMessage;
BOOL bIsError;
} SccMsgDataOnMessage;
Questa struttura viene inviata con il SCC_MSG_BACKGROUND_ON_MESSAGE
messaggio. Viene usato per comunicare lo stato corrente di un'operazione in background. Lo stato viene espresso come stringa da visualizzare dall'IDE e bIsError
indica la gravità del messaggio (TRUE
per un messaggio di errore; FALSE
per un avviso o per un messaggio informativo). Viene inoltre assegnato l'ID dell'operazione in background che invia lo stato.
Esempio di codice
Di seguito è riportato un breve esempio di chiamata LPTEXTOUTPROC
per inviare il SCC_MSG_BACKGROUND_ON_MESSAGE
messaggio, che illustra come eseguire il cast della struttura per la chiamata.
LONG SendStatusMessage(
LPTEXTOUTPROC pTextOutProc,
DWORD dwBackgroundID,
LPCTSTR pStatusMsg,
BOOL bIsError)
{
SccMsgDataOnMessage msgData = { 0 };
LONG result = 0;
msgData.dwBackgroundOperationID = dwBackgroundID;
msgData.szMessage = pStatusMsg;
msgData.bIsError = bIsError;
result = pTextOutProc(reinterpret_cast<LPCTSTR>(&msgData), SCC_MSG_BACKGROUND_ON_MESSAGE);
return result;
}