小编j_s*_*ltz的帖子

static const vs. c ++中的#define - 可执行文件大小的差异

我的基本情况:我有一个类似的包含文件#define foo (Flag1 | Flags2 | Flag3),所以它是一个预定义的位标志组合.为了类型安全,我想用静态consts替换这些#defines,即static const int foo = (Flag1 | Flag2 | Flag3)(或类似).这个包含文件包含在程序的许多地方.

现在当我在启用所有相关优化选项的发布版本时(使用VS2010的C++编译器),替换#defines似乎会将可执行文件增加几个KiB,具体取决于我替换了多少常量.

为什么会这样?据我所知,整数常量应该被"内联"到尽可能产生的ASM代码中,我不知道使用static constvs #define会如何在这里产生影响.很明显,变量没有内联,因为反汇编显示:

#define:
01325041  or          eax,0FFD87FE0h
static int:
011E5451  or          eax,dword ptr [CMainFrame::s_TemplateModulePaths+38h (151F008h)]
Run Code Online (Sandbox Code Playgroud)

所以最后一个问题是:我如何避免#define但仍然依赖于直接插入到生成的程序集中的变量?

c++ constants

9
推荐指数
1
解决办法
2011
查看次数

MFC工具栏:如何设置下拉按钮宽度

我正在使用Visual Studio 2010开发基于MFC的C++应用程序.CToolBarCtrl图标旁边有一些下拉按钮.

运行Windows 8的用户报告他们无法看到此工具栏中的某个图标.他们提供了一个截图,显示他们以150%的UI缩放运行Windows 8.我的应用程序目前设置为不支持DPI,所以这实际上应该没有区别.(编辑:显然它确实有所作为 - 毕竟 - 当切换到96 DPI时它们不再有问题.)

从下面的屏幕截图中可以看出,工具栏下拉按钮在Windows安装上要比它们应该要宽得多.因此,左侧工具栏中的图标之间的间距非常大,以至于无法再看到最后一个图标.屏幕截图中的右侧工具栏(没有任何下拉按钮)按预期显示.

我(应该是):

我看到它的工具栏

他们的(下拉按钮太宽):

他们看到的工具栏

我的应用程序已经设置了图标(16x16)和按钮(27x24)大小,但这显然不会影响下拉按钮大小.

所以我的问题是:为什么下拉按钮可能比我的默认Windows安装更宽,如何将它们更改为默认大小,以便所有图标都适合工具栏?我没有找到任何可以实际设置工具栏下拉按钮宽度的API.

我的类中的Init代码派生自CToolBarCtrl:

SetButtonStructSize(sizeof(TBBUTTON));
SetBitmapSize(CSize(16, 16));
SetButtonSize(CSize(27, 24));

SetImageList(&icons);
SetDisabledImageList(&disabledIcons);

LONG lStyleOld = GetWindowLong(m_hWnd, GWL_STYLE);
lStyleOld |= CCS_NORESIZE | CCS_NOPARENTALIGN | CCS_NODIVIDER | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT;
SetWindowLong(m_hWnd, GWL_STYLE, lStyleOld);
Run Code Online (Sandbox Code Playgroud)

c++ winapi mfc

6
推荐指数
0
解决办法
664
查看次数

标签 统计

c++ ×2

constants ×1

mfc ×1

winapi ×1