如何将GDI+状态转换为字符串?

4

实际上,主题是关于如何将GDI+的Status(GDI+方法返回的错误状态)转换为字符串的标准方法。类似于FormatMessage()


GDI+ 状态是一个枚举类型,其本质上是整数值。因此您基本上是在询问将整数转换为字符串还是将枚举中的标签转换为字符串? - Nawaz
2个回答

2

如果你想把GDI+状态中的标签转换为字符串,那么你可以做的最简单的事情就是这样:

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

由于状态枚举中仅有22个标签,按照上述方式创建StatusMsgMap不会太困难,我认为5分钟足够了!


我猜那应该是一个编译时静态常量数组,而不是 STL 映射。状态值从 0 开始。 - Sebastian
@Sebastian:哎呀……我刚刚做了那个。 :-) - Nawaz
5分钟? :) 这些常量并不是太容易理解,所以我必须猜测它们的良好描述。据我所知,没有标准的方法来获取这些描述,对吧? - Andriy Tylychko
1
@Andy:这个描述是来自于MSDN官方文档,你不需要去“猜测”任何东西。每个枚举值都有特定的含义和消息;请参考这里:http://msdn.microsoft.com/en-us/library/ms534175(v=vs.85).aspx - Nawaz

2

这是我写的一些使用硬编码数值的内容。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接