1

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

const int SCREENX = GetSystemMetrics(SM_CXSCREEN);

但是,当我在 .rc 文件(如下)中用SCREENX替换100并构建时,我得到:error RC2108: expected numeric 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是例行公事,所以我必须在这里遗漏一些基本的东西。(资源文件让我头疼不已。)谢谢!

4

2 回答 2

4

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

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

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

正如另一个答案所说,要使对话框居中,请使用DS_CENTERstyle 或 handle WM_INITDIALOG

于 2012-06-29T08:18:37.527 回答
1

要将对话框在屏幕上居中,只需将 DS_CENTER 样式或对话框的其他窗口样式即可。

如果您想使用 GetSystemMetrics,请在 WM_INITDIALOG 中执行此操作并将对话框定位在那里。

资源文件只是一个脚本。

于 2012-06-29T01:59:34.900 回答