gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:26:03 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com