1

Win32アプリケーションのダイアログボックスを中央に配置したいのですが、resource.rcファイルに定数を渡すのに問題があります。resource.hで次の宣言を行います。

const int SCREENX = GetSystemMetrics(SM_CXSCREEN);

ただし、.rcファイル(以下)で100SCREENXに置き換えてビルドすると、エラー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

GetSystemMetrics(SM_CXSCREEN)を目的の場所で直接使用することもできません(同じエラー)。

データ型を.rcに渡すのは日常的なことだと思うので、ここでは基本的なものが欠けているに違いありません。(リソースファイルは私に頭痛の種を終わらせません。)ありがとう!

4

2 に答える 2

4

リソースファイルは、実行可能ファイルに保存されている一連の静的データにコンパイルされます。たとえば、ダイアログリソースをDLGTEMPLATE構造にコンパイルすることができます。

つまり、コンパイルされたリソース内のすべてが定数です。

GetSystemMetrics(SM_CXSCREEN)定数ではありません。実行時に現在の画面幅(ピクセル単位)に評価されます。

他の答えが言うように、ダイアログを中央に配置するには、DS_CENTERスタイルまたはハンドルを使用しますWM_INITDIALOG

于 2012-06-29T08:18:37.527 に答える
1

ダイアログを画面の中央に配置するには、DS_CENTERスタイルをダイアログの他のウィンドウスタイルにORするだけです。

GetSystemMetricsを使用する場合は、WM_INITDIALOGでこれを実行し、そこにダイアログを配置します。

リソースファイルは単なるスクリプトです。

于 2012-06-29T01:59:34.900 に答える