LPTEXTOUTPROC

Lorsque l’utilisateur exécute une opération de contrôle de code source à partir de l’environnement de développement intégré (IDE), le plug-in de contrôle de code source peut souhaiter transmettre des messages d’erreur ou d’état relatifs à l’opération. Le plug-in peut afficher ses propres boîtes de message à cet effet. Toutefois, pour une intégration plus transparente, le plug-in peut passer des chaînes à l’IDE, qui les affiche ensuite de manière native pour afficher les informations d’état. Le mécanisme pour cela est le LPTEXTOUTPROC pointeur de fonction. L’IDE implémente cette fonction (décrite plus en détail ci-dessous) pour afficher l’erreur et l’état.

L’IDE passe au plug-in de contrôle de code source un pointeur de fonction vers cette fonction, en tant que lpTextOutProc paramètre, lors de l’appel de SccOpenProject. Pendant une opération SCC, par exemple, au milieu d’un appel à SccGet impliquant de nombreux fichiers, le plug-in peut appeler la LPTEXTOUTPROC fonction, en passant régulièrement des chaînes à afficher. L’IDE peut afficher ces chaînes dans une barre d’état, dans une fenêtre de sortie ou dans une zone de message distincte, le cas échéant. Si vous le souhaitez, l’IDE peut être en mesure d’afficher certains messages avec un bouton Annuler . Cela permet à l’utilisateur d’annuler l’opération et lui donne la possibilité de transmettre ces informations au plug-in.

Signature

La fonction de sortie de l’IDE a la signature suivante :

typedef LONG (*LPTEXTOUTPROC) (
   LPSTR display_string,
   LONG mesg_type
);

Paramètres

display_string

Chaîne de texte à afficher. Cette chaîne ne doit pas être arrêtée avec un retour chariot ou un flux de ligne.

mesg_type

Type de message. Le tableau suivant répertorie les valeurs prises en charge pour ce paramètre.

Valeur Description
SCC_MSG_INFO, SCC_MSG_WARNING, SCC_MSG_ERROR Le message est considéré comme Des informations, un avertissement ou une erreur.
SCC_MSG_STATUS Le message affiche l’état et peut être affiché dans la barre d’état.
SCC_MSG_DOCANCEL Envoyé sans chaîne de message.
SCC_MSG_STARTCANCEL Commence à afficher un bouton Annuler .
SCC_MSG_STOPCANCEL Arrête d’afficher un bouton Annuler .
SCC_MSG_BACKGROUND_IS_CANCELLED Demande à l’IDE si l’opération en arrière-plan doit être annulée : l’IDE retourne SCC_MSG_RTN_CANCEL si l’opération a été annulée ; sinon, retourne SCC_MSG_RTN_OK. Le display_string paramètre est casté en tant que structure SccMsgDataIsCancelled , fournie par le plug-in de contrôle de code source.
SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE Indique à l’IDE qu’un fichier est récupéré à partir du contrôle de version. Le display_string paramètre est casté en tant que structure SccMsgDataOnBeforeGetFile , fournie par le plug-in de contrôle de code source.
SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE Indique à l’IDE qu’un fichier a été récupéré à partir du contrôle de version. Le display_string paramètre est casté en tant que structure SccMsgDataOnAfterGetFile , fournie par le plug-in de contrôle de code source.
SCC_MSG_BACKGROUND_ON_MESSAGE Indique à l’IDE l’état actuel d’une opération en arrière-plan. Le display_string paramètre est casté en tant que structure SccMsgDataOnMessage , fournie par le plug-in de contrôle de code source.

Valeur retournée

Valeur Description
SCC_MSG_RTN_OK La chaîne a été affichée ou l’opération a été effectuée avec succès.
SCC_MSG_RTN_CANCEL L’utilisateur souhaite annuler l’opération.

Exemple

Supposons que l’IDE appelle SccGet avec vingt noms de fichiers. Le plug-in de contrôle de code source souhaite empêcher l’annulation de l’opération au milieu d’une obtention de fichier. Après avoir obtenu chaque fichier, il appelle lpTextOutProc, en lui transmettant les informations d’état sur chaque fichier et envoie un SCC_MSG_DOCANCEL message s’il n’a pas d’état à signaler. Si, à tout moment, le plug-in reçoit une valeur de retour de SCC_MSG_RTN_CANCEL l’IDE, il annule immédiatement l’opération d’obtention, afin qu’aucun autre fichier ne soit récupéré.

Structures

SccMsgDataIsCancelled

typedef struct {
   DWORD dwBackgroundOperationID;
} SccMsgDataIsCancelled;

Cette structure est envoyée avec le SCC_MSG_BACKGROUND_IS_CANCELLED message. Il est utilisé pour communiquer l’ID de l’opération en arrière-plan qui a été annulée.

SccMsgDataOnBeforeGetFile

typedef struct {
   DWORD dwBackgroundOperationID;
   PCSTR szFile;
} SccMsgDataOnBeforeGetFile;

Cette structure est envoyée avec le SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE message. Il est utilisé pour communiquer le nom du fichier sur le point d’être récupéré et l’ID de l’opération en arrière-plan qui effectue la récupération.

SccMsgDataOnAfterGetFile

typedef struct {
   DWORD dwBackgroundOperationID;
   PCSTR szFile;
   SCCRTN sResult;
} SccMsgDataOnAfterGetFile;

Cette structure est envoyée avec le SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE message. Il est utilisé pour communiquer le résultat de la récupération du fichier spécifié ainsi que l’ID de l’opération d’arrière-plan qui a effectué la récupération. Consultez les valeurs de retour du SccGet pour ce qui peut être donné en conséquence.

SccMsgDataOnMessage

typedef struct {
   DWORD dwBackgroundOperationID;
   PCSTR szMessage;
   BOOL bIsError;
} SccMsgDataOnMessage;

Cette structure est envoyée avec le SCC_MSG_BACKGROUND_ON_MESSAGE message. Il est utilisé pour communiquer l’état actuel d’une opération en arrière-plan. L’état est exprimé sous la forme d’une chaîne à afficher par l’IDE et bIsError indique la gravité du message (TRUE pour un message d’erreur ; FALSE pour un avertissement ou pour un message d’information). L’ID de l’opération en arrière-plan envoyant l’état est également donné.

Exemple de code

Voici un bref exemple d’appel LPTEXTOUTPROC pour envoyer le SCC_MSG_BACKGROUND_ON_MESSAGE message, montrant comment convertir la structure de l’appel.

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

Voir aussi