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

C++ 如何在Win32 C+;中将数据类型传递给资源(.rc)文件+;?,c++,winapi,resources,dialog,constants,C++,Winapi,Resources,Dialog,Constants,我想在Win32应用程序中居中显示一个对话框,但在将常量传递到我的resource.rc文件时遇到问题。我在resource.h中声明如下: const int SCREENX = GetSystemMetrics(SM_CXSCREEN); 但是,当我在.rc文件(如下)和构建中将100替换为SCREENX时,我得到:错误RC2108:预期的数值对话框常量 #include <windows.h> #include "resource.h" #include "afxres.h"

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

const int SCREENX = GetSystemMetrics(SM_CXSCREEN);
但是,当我在.rc文件(如下)和构建中将100替换为SCREENX时,我得到:错误RC2108:预期的数值对话框常量

#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
#包括
#包括“resource.h”
#包括“afxres.h”
//我想将“100”替换为“GetSystemMetrics(SM\U CXSCREEN)”
ID_关于对话框可丢弃100,0,237,87
样式DS|U MODALFRAME | WS|U弹出窗口| WS|U标题| WS|U系统菜单
标题“关于”
字体10,“MS无衬线”
开始
分组框“联系人”,IDC_联系人,7,43,98,39,WS_儿童| WS|u可见
LTEXT“我的信息”,IDC_联系人,16、53、85、25,WS_CHILD|WS|u可见
结束
我也不能在所需位置直接使用GetSystemMetrics(SM\U CXSCREEN)(相同错误)


我认为将数据类型传递给.rc将是一项常规工作,因此我肯定缺少一些基本的内容。(资源文件让我头疼不已。)谢谢

要使对话框在屏幕上居中,只需将DS_center样式设置为对话框的其他窗口样式即可

如果要使用GetSystemMetrics,请在WM_INITDIALOG中执行此操作,并将对话框放置在那里


资源文件只是一个脚本。

要在屏幕上居中显示对话框,只需将DS\U center样式转换为对话框的其他窗口样式即可

如果要使用GetSystemMetrics,请在WM_INITDIALOG中执行此操作,并将对话框放置在那里


资源文件只是一个脚本。

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

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

GetSystemMetrics(SM\u CXSCREEN)
不是一个常数。它在运行时计算为当前屏幕宽度(以像素为单位)


正如另一个答案所说,要使对话框居中,请使用
DS\u center
样式或句柄
WM\u INITDIALOG

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

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

GetSystemMetrics(SM\u CXSCREEN)
不是一个常数。它在运行时计算为当前屏幕宽度(以像素为单位)


正如另一个答案所说,要在对话框中使用“代码”> DSyCenter 代码> WMIInTalue以扩展您的“资源文件只是脚本”。它是一个脚本,它不能访问C或C++源中定义的任何变量,这是OP不能在资源文件中使用<代码> StuxX >代码的原因。@ JoachimPileborg:谢谢,这有很大帮助。扩展你的“资源文件只是一个脚本”。它是一个脚本,它不能访问C或C++源中定义的任何变量。这就是OP不能在资源文件中使用SCREENX的原因。@JoachimPileborg:谢谢,这很有帮助。