C++编译器错误 - RC2108:预期的数值对话框常量

问题描述:

我正在使用VS2005来定位WinCE设备,目前正在构建MFC GUI。 我越来越能排C++编译器错误 - RC2108:预期的数值对话框常量

CTEXT IDC_PG,168,183,63,63

相关的错误说

my_app.rc(95):错误RC2108:预期数值对话框不断

我相信那CTEXT线是有问题的(错误指向这条线之后的线,我已经将CTEX线从块的中间移动到了末尾,在CTEXT之后,当它在中间时也出现错误),但是我有不知道这里可能不正确。

这是代码满块:

BEGIN 
    LTEXT   "Static",IDC_SEL,337,122,63,61,SS_NOTIFY 
    LTEXT   "Static",IDC_ESC,337,183,62,63,SS_NOTIFY 
    LTEXT   "Static",IDC_RETURN,337,122,63,123,SS_NOTIFY 
    LTEXT   "Static",IDC_RB,337,45,63,61,SS_NOTIFY 
    LTEXT   "Static",IDC_LB,337,0,63,61,SS_NOTIFY 
    LTEXT   "Static",IDC_DN,337,61,63,61,SS_NOTIFY 
    LTEXT   "Static",IDC_UP,337,0,63,61,SS_NOTIFY 
    LTEXT   "Static",IDC_SET,274,183,63,63,SS_NOTIFY 
    LTEXT   "Static",IDC_VYPLN,0,183,211,63,SS_NOTIFY 
    LISTBOX   IDC_LF,1,1,338,182,LBS_NOINTEGRALHEIGHT | NOT WS_BORDER | WS_TABSTOP 
    CTEXT   "Static",IDC_PHOTO,0,0,337,245 
    CTEXT   "Static",IDC_BG,0,0,400,245 
    LTEXT   "Static",IDC_ESC2,202,182,62,63,SS_NOTIFY 
    CTEXT   IDC_PG,168,183,63,63 //PagingWidget 
END 

预先感谢在此脱落的一些光。

+1

'IDC_PG'是如何定义的以及你从哪里得到id'168'? – Stefan

+0

在头文件中定义 - #define IDC_PG 1017 手动计算数字 – dram

+1

您是否曾尝试将字符串放在前面? 'CTEXT“测试”,IDC_PG,168,183,63,63'? https://msdn.microsoft.com/en-us/library/windows/desktop/aa380915(v=vs.85).aspx – Stefan

你在这一句话解释你的问题:“我不想让‘静’,作为即时通讯计划使用该控件来显示当前页”

在你的项目已编译的资源是resource.h中,所有* .rc和* rc2文件只能包含与您的应用程序链接的静态数据。所有资源项目必须有一个ID(从应用程序代码中看到的UINT,但是是OS的STRING),它在编译时是不变的和定义的。

如果您需要动态创建控件,则必须在代码中执行此操作。您可以通过将它们作为对话框类的成员来管理它们,或者在指针向量中的动态内存中管理它们(CWnd's不能被复制)。 MFC提供的CObArray为动态分配的CWnd *提供了一些基本的RAII。

如果您确实需要在对话框中引用矩形以放置动态控件,请使用编辑器在对话框中插入一些虚拟的,不可见的静态控件。或者,如果您已经知道您需要的小部件的最大数量,请将它们作为静态项目放置在对话框资源上,并在对话框的OnInitDialog()成员函数中显示/隐藏项目。

对不起,为了给你带来坏消息......我希望你有一个很好的备份。

+0

非常有见地,谢谢 – dram

+0

@dram:我不确定你真正想要什么,所以下面还有一个更加乐观的版本。 –

另一方面,如果您只希望能够在运行时访问小部件并更改其内容,请右键单击对话框 - >创建类,确保类型为CDialog。然后,您可以通过右键单击它们来创建控件(小部件)的变量 - >创建变量。

控制变量的经验法则是创建控制用于在对话期间更改内容的动态控件的变量。

对于简单的对话框来说,它只能从用户中展开和收集数据,最好给我们使用通用类型的变量,这些变量会自动填充入口的控件,并将数据收集到一个成功的出口。

推荐阅读:https://msdn.microsoft.com/en-us/library/0khz1cy9(v=vs.90).aspx

希望这是你想要做什么。您需要有一个工作资源文件才能使用MFC的代码生成功能。