LPTEXTOUTPROC
Когда пользователь выполняет операцию управления версиями из интегрированной среды разработки (IDE), подключаемый модуль управления версиями может потребовать передачи сообщений об ошибках или состояниях, связанных с операцией. Подключаемый модуль может отображать собственные поля сообщений для этой цели. Однако для более простой интеграции подключаемый модуль может передавать строки в интегрированную среду разработки, которая затем отображает их в собственном способе отображения сведений о состоянии. Механизм для этого является указателем LPTEXTOUTPROC
функции. Интегрированная среда разработки реализует эту функцию (описано более подробно ниже) для отображения ошибок и состояния.
Интегрированная среда разработки передает подключаемый модуль управления версиями указатель функции на эту функцию в качестве параметра при вызове lpTextOutProc
SccOpenProject. Например, во время операции SCC в середине вызова SccGet с участием многих файлов подключаемый модуль может вызывать LPTEXTOUTPROC
функцию, периодически передавая строки для отображения. Интегрированная среда разработки может отображать эти строки в строке состояния, в окне вывода или в отдельном окне сообщения в соответствии с соответствующими параметрами. При необходимости интегрированная среда разработки может отображать определенные сообщения с помощью кнопки "Отмена ". Это позволяет пользователю отменить операцию, и она дает интегрированной среде разработки возможность передавать эти сведения обратно в подключаемый модуль.
Подпись
Выходная функция интегрированной среды разработки имеет следующую сигнатуру:
typedef LONG (*LPTEXTOUTPROC) (
LPSTR display_string,
LONG mesg_type
);
Параметры
display_string
Текстовая строка для отображения. Эта строка не должна быть завершена с возвратом каретки или каналом строки.
mesg_type
Тип сообщения. В следующей таблице перечислены поддерживаемые значения этого параметра.
значение | Описание |
---|---|
SCC_MSG_INFO, SCC_MSG_WARNING, SCC_MSG_ERROR |
Это сообщение считается сведениями, предупреждениями или ошибками. |
SCC_MSG_STATUS |
Сообщение отображает состояние и может отображаться в строке состояния. |
SCC_MSG_DOCANCEL |
Отправлен без строки сообщения. |
SCC_MSG_STARTCANCEL |
Начинается отображение кнопки "Отмена ". |
SCC_MSG_STOPCANCEL |
Останавливает отображение кнопки "Отмена ". |
SCC_MSG_BACKGROUND_IS_CANCELLED |
Запрашивает интегрированную среду разработки, если фоновая операция должна быть отменена: интегрированная среда разработки возвращает SCC_MSG_RTN_CANCEL , если операция отменена; в противном случае возвращается SCC_MSG_RTN_OK . Параметр display_string создается как структура SccMsgDataIsCancelled , которая предоставляется подключаемым модулем управления версиями. |
SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE |
Сообщает интегрированной среде разработки о файле перед получением из элемента управления версиями. Параметр display_string создается как структура SccMsgDataOnBeforeGetFile , которая предоставляется подключаемым модулем управления версиями. |
SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE |
Сообщает интегрированной среде разработки о файле после получения из элемента управления версиями. Параметр display_string создается как структура SccMsgDataOnAfterGetFile , которая предоставляется подключаемым модулем управления версиями. |
SCC_MSG_BACKGROUND_ON_MESSAGE |
Сообщает интегрированной среде разработки текущее состояние фоновой операции. Параметр display_string создается как структура SccMsgDataOnMessage , которая предоставляется подключаемым модулем управления версиями. |
Возвращаемое значение
значение | Описание |
---|---|
SCC_MSG_RTN_OK | Строка была отображена или операция успешно завершена. |
SCC_MSG_RTN_CANCEL | Пользователь хочет отменить операцию. |
Пример
Предположим, что интегрированная среда разработки вызывает SccGet с двадцатью именами файлов. Подключаемый модуль управления версиями хочет предотвратить отмену операции в середине файла. После получения каждого файла он вызывает lpTextOutProc
, передает сведения о состоянии каждого файла и отправляет SCC_MSG_DOCANCEL
сообщение, если оно не имеет состояния в отчет. Если подключаемый модуль в любое время получает возвращаемое значение SCC_MSG_RTN_CANCEL
из интегрированной среды разработки, он немедленно отменяет операцию получения, чтобы больше файлов не извлекалось.
Структуры
SccMsgDataIsCancelled
typedef struct {
DWORD dwBackgroundOperationID;
} SccMsgDataIsCancelled;
Эта структура отправляется с сообщением SCC_MSG_BACKGROUND_IS_CANCELLED
. Он используется для передачи идентификатора фоновой операции, отмененной.
SccMsgDataOnBeforeGetFile
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szFile;
} SccMsgDataOnBeforeGetFile;
Эта структура отправляется с сообщением SCC_MSG_BACKGROUND_ON_BEFORE_GET_FILE
. Он используется для передачи имени извлекаемого файла и идентификатора фоновой операции, выполняющей извлечение.
SccMsgDataOnAfterGetFile
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szFile;
SCCRTN sResult;
} SccMsgDataOnAfterGetFile;
Эта структура отправляется с сообщением SCC_MSG_BACKGROUND_ON_AFTER_GET_FILE
. Он используется для обмена данными о результате извлечения указанного файла, а также идентификатора фоновой операции, которая сделала извлечение. Просмотрите возвращаемые значения для SccGet, чтобы узнать, что можно получить в результате.
SccMsgDataOnMessage
typedef struct {
DWORD dwBackgroundOperationID;
PCSTR szMessage;
BOOL bIsError;
} SccMsgDataOnMessage;
Эта структура отправляется с сообщением SCC_MSG_BACKGROUND_ON_MESSAGE
. Он используется для передачи текущего состояния фоновой операции. Состояние выражается как строка для отображения интегрированной среды разработки и bIsError
указывает серьезность сообщения (TRUE
для сообщения об ошибке; FALSE
для предупреждения или информационного сообщения). Идентификатор фоновой операции отправки состояния также предоставляется.
Пример кода
Ниже приведен краткий пример вызова LPTEXTOUTPROC
для отправки SCC_MSG_BACKGROUND_ON_MESSAGE
сообщения, в котором показано, как привести структуру для вызова.
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;
}