资源ID管理插件:VS6/VS.NET
资源ID管理插件
https://www.codeproject.com/Articles/1244/Resource-ID-Organiser-Add-In-for-Visual-C-5-0-6-0
新版本:
https://www.riverblade.co/products/resorg/downloads/
资源ID管理插件
https://www.codeproject.com/Articles/1244/Resource-ID-Organiser-Add-In-for-Visual-C-5-0-6-0
新版本:
https://www.riverblade.co/products/resorg/downloads/
GTK For Windows下界面美化调优
1.安装相应的界面引擎:
mingw-w64-x86_64-gtk-engine-murrine
mingw-w64-x86_64-gtk-engines
mingw-w64-i686-gtk-engine-murrine
mingw-w64-i686-gtk-engines
2.安装一个Windows10的界面优化包,需要手工安装,下载地址:
https://github.com/B00merang-Project/Windows-10
将其中的gtk-2.0、gtk-3.0、gtk-3.20都拷贝到share/themes/Windows10目录下,Windows10目录需要自己建立
3.修改etc/gtk-2.0、etc/gtk-3.0,放入一个settings.ini文件,内容如下:
[Settings]gtk-theme-name=Windows10
gtk-font-name=Segoe UI 9
mingw-w64及w32均有etc,都需要放一份
再启动GTK的程序,就能够看到界面已经漂亮多了
VC的编译器下,有好几个OS子系统宏,分别是:
WIN32/_WIN32/WIN64/_WIN64
其中WIN32是在windows.h中定义的
WIN64/_WIN64宏通常是通过工程文件配置预定义宏开关完成
其中_WIN32这个宏最特殊,属于没有定义会被强制定义,所有32位系统、64位系统下均有此宏定义
比如64位工程,编译时指定了WIN64/_WIN64,其实编译时会有三个宏
_WIN32/WIN64/_WIN64
因此,在区分OS类别时,则通常应该如此定义:
#if (defined _WIN64 || defined WIN64 || defined _WIN32 || defined WIN32 || defined WINCE)
#elif (defined ANDROID)
#else
#endif
区分64位的WINDOWS与32位,只能如此定义:
#if (defined _WIN64 || defined WIN64)
#elif (defined _WIN32 || defined WIN32)
#else
#endif
极容易踩到这个坑,定义这样:
#if (defined _WIN32 || defined WIN32)
#elif (defined _WIN64 || defined WIN64)
#else
#endif
CMakeLists.txt中可以指定多个目标,比如编译两个库:
add_library(xxx SHARED ............
add_library(yyy SHARED ............
而希望分别指定不同的编译开关,应在之前保存好相应的编译开关参数,比如:
set(CMAKE_xxx_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DONLY_SDK -std=c++11")
set(CMAKE_yyy_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dyyy_SDK -DONLY_SDK -std=c++11")
然后在add_library之后,使用set_target_properties修改目标的编译参数
set_target_properties(xxx PROPERTIES COMPILE_FLAGS ${CMAKE_xxx_CXX_FLAGS})
set_target_properties(yyy PROPERTIES COMPILE_FLAGS ${CMAKE_yyy_CXX_FLAGS})
c++ 模板中,提供了根据类型输出类型的值域范围类模板,即
limits中的numeric_limits类模板函数max和min
使用时,需要注意,容易与C语言的宏定义min/max冲突
此时有几种解决办法:
1.先取消min/max的宏定义,使用完后恢复
如下:
#ifdef min#define __save_min #undef min #endif#ifdef max#define __save_max #undef max #endiftemplate<typename T = unsigned int> classXNumberLimit
{public:staticT get_min()
{return std::numeric_limits<T>::min();
}staticT get_max()
{return std::numeric_limits<T>::max();
}
};
#ifdef __save_min#define min(a, b) (((a) < (b)) ? (a) : (b)) #undef __save_min #endif#ifdef __save_max#define max(a, b) (((a) > (b)) ? (a) : (b)) #undef __save_max #endif
第二种办法,将min/max使用括号括起来,这样就可以绕开C语言的宏函数判断了
(std::numeric_limits<T>::min)();
(std::numeric_limits<T>::max)();