我想在我的 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/