c++ - 如何将数据类型传递给 Win32 C++ 中的资源 (.rc) 文件?

标签 c++ winapi resources dialog constants

我想在我的 Win32 应用程序中居中放置一个对话框,但在将常量传递到我的 resource.rc 文件时遇到了问题。我在 resource.h 中做出以下声明:

const int SCREENX = GetSystemMetrics(SM_CXSCREEN);

但是,当我在我的 .rc 文件(如下)中用 SCREENX 替换 100 并构建时,我得到:error RC2108: expected numerical dialog constant.

#include <windows.h>
#include "resource.h"
#include "afxres.h"

// I'd like to replace "100" with "GetSystemMetrics(SM_CXSCREEN)"
ID_ABOUT DIALOG DISCARDABLE  100, 0, 237, 87
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 10, "MS Sans Serif"

BEGIN
    GROUPBOX "Contact", IDC_CONTACT, 7, 43, 98, 39, WS_CHILD | WS_VISIBLE
    LTEXT    "My info", IDC_CONTACT, 16, 53, 85, 25, WS_CHILD | WS_VISIBLE
END

我也不能在所需位置直接使用 GetSystemMetrics(SM_CXSCREEN)(同样的错误)。

我认为将数据类型传递给 .rc 是例行公事,所以我一定在这里遗漏了一些基本的东西。 (资源文件让我头疼不已。)谢谢!

最佳答案

资源文件被编译成一堆静态数据,存储在您的可执行文件中。例如,对话框资源可能会编译成 DLGTEMPLATE结构。

换句话说,编译资源中的所有内容都是常量。

GetSystemMetrics(SM_CXSCREEN) 不是常量。它在运行时评估当前屏幕宽度(以像素为单位)。

正如其他答案所说,要使对话框居中,请使用 DS_CENTER 样式或处理 WM_INITDIALOG

关于c++ - 如何将数据类型传递给 Win32 C++ 中的资源 (.rc) 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255133/

相关文章:

c++ - 暂停时编辑轨迹栏值

c++ - Lua 和 C++ 中的有限状态机

php - 本地化的州/省数据

Spring 4 基于注解的静态资源映射等效项

java - 如何组织Java程序的源文件?

c++ - 为多个 COM 操作初始化 COM

c++ - 关于第二指针的问题

使用 Http Post 的 C Wininet 文件上传

c++ - 无法写入注册表

在 WINAPI 中计算时钟周期给出非常不同的结果