Как преобразовать GDI + Status в строку? - PullRequest
4 голосов
/ 08 февраля 2011

Собственно, предмет.Я не нашел никакого стандартного способа преобразования GDI + Status (состояние ошибки, возвращаемого методами GDI +) в строку, что-то вроде FormatMessage()

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Если вы хотите преобразовать метки в GDI + Status в строку, то самое простое, что вы можете сделать, это:

const char* StatusMsgMap[] = 
{
    "Ok",               //StatusMsgMap[Ok] = "Ok";
    "GenericError",     //StatusMsgMap[GenericError] = "GenericError";
    "InvalidParameter", //StatusMsgMap[InvalidParameter] = "InvalidParameter";
    "OutOfMemory",      //StatusMsgMap[OutOfMemory] = "OutOfMemory";
    //so on
};

//Usage:
 std::string error = StatusMsgMap[status]; // where status is Status type!

Или, если вы хотите более описательное сообщение, то это:

const char* StatusMsgMap[] =
{
    "the method call was successful",
    "there was an error on the method call, which is identified as something other than those defined by the other elements of this enumeration",
    "one of the arguments passed to the method was not valid",
    //so on
};

Поскольку в перечислении Status всего 22 метки, создание StatusMsgMap указанным выше способом, по моему мнению, не будет большой задачей. 5 минут более чем достаточно!

1 голос
/ 31 октября 2015

Вот что я написал, используя жестко закодированные значения.

std::string statusString(const Gdiplus::Status status) {
    switch (status) {
        case Gdiplus::Ok: return "Ok";
        case Gdiplus::GenericError: return "GenericError";
        case Gdiplus::InvalidParameter: return "InvalidParameter";
        case Gdiplus::OutOfMemory: return "OutOfMemory";
        case Gdiplus::ObjectBusy: return "ObjectBusy";
        case Gdiplus::InsufficientBuffer: return "InsufficientBuffer";
        case Gdiplus::NotImplemented: return "NotImplemented";
        case Gdiplus::Win32Error: return "Win32Error";
        case Gdiplus::Aborted: return "Aborted";
        case Gdiplus::FileNotFound: return "FileNotFound";
        case Gdiplus::ValueOverflow: return "ValueOverflow";
        case Gdiplus::AccessDenied: return "AccessDenied";
        case Gdiplus::UnknownImageFormat: return "UnknownImageFormat";
        case Gdiplus::FontFamilyNotFound: return "FontFamilyNotFound";
        case Gdiplus::FontStyleNotFound: return "FontStyleNotFound";
        case Gdiplus::NotTrueTypeFont: return "NotTrueTypeFont";
        case Gdiplus::UnsupportedGdiplusVersion: return "UnsupportedGdiplusVersion";
        case Gdiplus::GdiplusNotInitialized: return "GdiplusNotInitialized";
        case Gdiplus::PropertyNotFound: return "PropertyNotFound";
        case Gdiplus::PropertyNotSupported: return "PropertyNotSupported";
        default: return "Status Type Not Found.";
    }
}

Используйте следующим образом:

const std::string statusMsg = statusString(theStatus);
//And then just output it.
std::cout << "Operation returned message: " << statusMsg << '\n';
...