现在的位置: 首页 > 综合 > 正文

关于MFC控件变量错误的处理

2012年12月17日 ⁄ 综合 ⁄ 共 1205字 ⁄ 字号 评论关闭

MFC 常常会莫名地出现一些奇怪的问题。例如,在一个基于对话框的程序中,往对话框面板拖了几个Static文本控件,并为这几个控件 添加Static变量,然后派生一个Static类(CDrawStatic),手动将静态文本控件变量类型改为CDrawStatic并将旧的信息注释掉,代码如下:

//{{AFX_DATA(CLearnBetterPlayDlg)  enum { IDD = IDD_LEARNBETTERPLAY_DIALOG };  /*CStatic m_ctrDrawRectangle;  CStatic m_ctrPptNo;  CStatic m_ctrPptName;  CStatic m_ctrAnswerThemeTimer;*/  CDrawStatic m_ctrDrawRectangle;  CDrawStatic m_ctrPptNo;  CDrawStatic m_ctrPptName;  CDrawStatic m_ctrAnswerThemeTimer;  //}}AFX_DATA

当按Ctrl+W时却弹出一个错误警告对话框,显示如下信息: “Parsing error: Expected end-of-line Input line:"CStatic m_ctrlAnswerThemeTimer;*/" 紧接着还有一个"无法添成员"的对话框。 再打开 View->ClassWizard,发现又弹出一个错误对话框,显示的内容跟第一个错误对话框的内容一样。 按照网上流行的方法,把 .clw 文件和 .ncb 文件删除,然后重新生成,可是发现问题依旧。 出现这种情况多半是由于破坏了 MFC 自动生成的代码。MFC 自动生成的代码里,不仅那些蓝的、灰的语句有价值,连某些绿色的注释也是不动产。这些奇奇怪怪的注释信息,是 MFC 进行类信息解析时要用到的,改变这些注释或者注释之间的内容可能会导致解析错误。 将注释/**/去掉换成//,代码如下:

// Dialog Data  //{{AFX_DATA(CLearnBetterPlayDlg)  enum { IDD = IDD_LEARNBETTERPLAY_DIALOG };  //CStatic m_ctrDrawRectangle;  //CStatic m_ctrPptNo;  //CStatic m_ctrPptName;  //CStatic m_ctrAnswerThemeTimer;  CDrawStatic m_ctrDrawRectangle;  CDrawStatic m_ctrPptNo;  CDrawStatic m_ctrPptName;  CDrawStatic m_ctrAnswerThemeTimer;  CWebBrowser2 m_ctrIE;  //Web控件  //}}AFX_DATA

问题解决了。

 

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn

 

抱歉!评论已关闭.