demo : 用宏简化大型switch/case - LoadStringW
发布日期:2021-06-30 22:04:16 浏览次数:2 分类:技术文章

本文共 2057 字,大约阅读时间需要 6 分钟。

/// @file       macro20131117.cpp/// @brief      <
>/// 场景: 工程中做国际化的时候, 需要将.rc中定义的资源ID转成字符串/// 使用了 ATL::CString::LoadStringW/// 资源串很多, 如果手工写, 心情太差了/// 维护性也不好, 眼睛会看花吧~/// 整了一个小宏, 来做这件事, 简化了大型switch/case的输入#include "stdafx.h"#include
#include
#include
///< maybe need WTL 8.1, i not sure#include "resource.h"#define RC_ID_STRING(x) g_str##x #define DEFINE_RC_ID_STRING(x) static std::wstring (RC_ID_STRING(##x)) = L""; #define CASE_RC_ID(x) \ case x: \ { \ if (RC_ID_STRING(##x).empty()) \ { \ GetStringFromId(RC_ID_STRING(##x), x); \ } \ \ return (WCHAR *)RC_ID_STRING(##x).c_str(); \ } \ break;/// 定义静态的std::wstring. // static std::wstring g_strIDS_HELLO = L""; DEFINE_RC_ID_STRING(IDS_HELLO) DEFINE_RC_ID_STRING(IDS_TASK_BEGIN) DEFINE_RC_ID_STRING(IDS_TASK_END) DEFINE_RC_ID_STRING(IDS_BYE)WCHAR * GetStringFromId(UINT uRcStrId);BOOL GetStringFromId(std::wstring & strRc, UINT uRcStrId);int _tmain(int argc, _TCHAR* argv[]){ _tprintf(L"%s = %s\r\n", RC_ID_STRING(IDS_HELLO).c_str(), GetStringFromId(IDS_HELLO)); /** run results Hello = Hello */ getwchar(); return 0;}BOOL GetStringFromId(std::wstring & strRc, UINT uRcStrId){ BOOL bRc = FALSE; ATL::CString csRc; bRc = csRc.LoadStringW(uRcStrId); _ASSERT(bRc); strRc = csRc.GetBuffer(); csRc.ReleaseBuffer(); return bRc;}WCHAR * GetStringFromId(UINT uRcStrId){ switch (uRcStrId) { CASE_RC_ID(IDS_HELLO);// case IDS_HELLO:// {// if (RC_ID_STRING(IDS_HELLO).empty())// {// GetStringFromId(g_strIDS_HELLO, IDS_HELLO);// }// return (WCHAR *)g_strIDS_HELLO.c_str();// }// break; CASE_RC_ID(IDS_TASK_BEGIN); CASE_RC_ID(IDS_TASK_END); CASE_RC_ID(IDS_BYE); default: _ASSERT(FALSE); break; } return NULL;}

转载地址:https://lostspeed.blog.csdn.net/article/details/16369759 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:note : InternetGetConnectedState
下一篇:note : GetExitCodeProcess

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 13时35分13秒