enum { IDD = IDD_ABOUTBOX } 这句话什么作用?

ewwddee 2015-04-24 02:24:37
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
}

以上代码中:

1、enum { IDD = IDD_ABOUTBOX } 这句话什么作用?注:IDD_ABOUTBOX 是一窗体的资源ID

2、 //{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
这个
//{{AFX_DATA(CAboutDlg)
//}}AFX_DATA
又起什么作用?
...全文
1137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2017-07-17
  • 打赏
  • 举报
回复
IDD在创建的时候,被传入基类的构造函数,你不需要去关心 CxIocpDlg::CxIocpDlg(CWnd* pParent /*=NULL*/) : CDialog(CxIocpDlg::IDD, pParent)//在构造的时候传入基类 { }
Lonyfish 2017-07-17
  • 打赏
  • 举报
回复
8楼说的对。。。10楼给出了详细解答。。。其实楼主也可以去看一下《effective c++》的条款二
ewwddee 2015-04-25
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
正是因为 MFC 不支持这样写(.h): static const int IDD = IDD_ABOUTBOX; 所以才 用 enum 的
请问以下代码 的作用 //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA 是将窗口资源 指定给 类 CAboutDlg 吗
lx624909677 2015-04-25
  • 打赏
  • 举报
回复
理解成简单的类和资源对话框关联就可以了,原因就是楼上说的
schlafenhamster 2015-04-25
  • 打赏
  • 举报
回复
Thinking in C++, 2nd ed. Volume 1 ©2000 by Bruce Eckel 8: Constants "The “enum hack” in old code In older versions of C++, static const was not supported inside classes. This meant that const was useless for constant expressions inside classes. However, people still wanted to do this so a typical solution (usually referred to as the “enum hack”) was to use an untagged enum with no instances. An enumeration must have all its values established at compile time, it’s local to the class, and its values are available for constant expressions. Thus, you will commonly see: //: C08:EnumHack.cpp #include <iostream> using namespace std; class Bunch { enum { size = 1000 }; int i[size]; }; int main() { cout << "sizeof(Bunch) = " << sizeof(Bunch) << ", sizeof(i[1000]) = " << sizeof(int[1000]) << endl; } ///:~ The use of enum here is guaranteed to occupy no storage in the object, and the enumerators are all evaluated at compile time. You can also explicitly establish the values of the enumerators: enum { one = 1, two = 2, three }; With integral enum types, the compiler will continue counting from the last value, so the enumerator three will get the value 3. In the StringStack.cpp example above, the line: static const int size = 100; would be instead: enum { size = 100 }; Although you’ll often see the enum technique in legacy code, the static const feature was added to the language to solve just this problem. However, there is no overwhelming reason that you must choose static const over the enum hack, and in this book the enum hack is used because it is supported by more compilers at the time this book was written. "
schlafenhamster 2015-04-24
  • 打赏
  • 举报
回复
正是因为 MFC 不支持这样写(.h): static const int IDD = IDD_ABOUTBOX; 所以才 用 enum 的
mfmfmmf1 2015-04-24
  • 打赏
  • 举报
回复
比如 #define STUDENT_0 0 #define STUDENT_1 1 #define STUDENT_2 2 #define STUDENT_3 3 #define STUDENT_4 4 #define STUDENT_5 5 很麻烦的 用enum就很简单 enum{STUDNET_0,STUDNET_1,STUDNET_2,STUDNET_3,STUDNET_4,STUDNET_5,}; 这6个元素的值会自动被赋值0,1,2,3,4,5 求给分,我分不够用了...
mfmfmmf1 2015-04-24
  • 打赏
  • 举报
回复
从功能上讲,枚举和#define是一样的 但是枚举方便,每个名字所代表的值都是自动递加的
Sping 2015-04-24
  • 打赏
  • 举报
回复
引用 4 楼 ewwddee 的回复:
非常感谢, (1)请问枚举有什么用? (2)为什么 enum { IDD = IDD_ABOUTBOX } 不直接写成 IDD = IDD_ABOUTBOX 不就赋个值 吗?
1:枚举简单说就是一堆已经命名好的常量。你写一堆const int x其实也是同样的效果,但是枚举看起来代码简单方便点不是么? 2:你非要标新立异的话有很多方法: 比如.h文件类里面:static const int iIDD = IDD_ABOUTBOX; .cpp里面相对应的更改为:CDialog(iIDD,pParent); 或者你弄个全局变量 int g_iIDD = IDD_ABOUTBOX; CDialog(g_iIDD,pParent);都行,绝对的,我可以打包票! 关键是为什么要这么干?不过就是定义一个常量IDD_ABOUTBOX而已,IDD_ABOUTBOX就是一个int的常量值!其他屁都不是!微软写程序也得遵循C++语法来对不!
ewwddee 2015-04-24
  • 打赏
  • 举报
回复
引用 1 楼 pingshell 的回复:
//{{AFX_DATA(CAboutDlg) //}}AFX_DATA 这些是MFC管理的代码,你最好不要自己改 enum { IDD = IDD_ABOUTBOX } 这是枚举对话框的资源ID
非常感谢, (1)请问枚举有什么用? (2)为什么 enum { IDD = IDD_ABOUTBOX } 不直接写成 IDD = IDD_ABOUTBOX 不就赋个值 吗?
oyljerry 2015-04-24
  • 打赏
  • 举报
回复
你可以看你的工程资源中的对话框ID,它对应的ABOUT对话框
mic1233 2015-04-24
  • 打赏
  • 举报
回复
反正是about dialogue的,放那里就好了。。。就是说明各种资源的呗。。。
pingshell 2015-04-24
  • 打赏
  • 举报
回复
//{{AFX_DATA(CAboutDlg) //}}AFX_DATA 这些是MFC管理的代码,你最好不要自己改 enum { IDD = IDD_ABOUTBOX } 这是枚举对话框的资源ID
vc++利用ADOX创建数据库 // ADOXCreateDatabaseDlg.cpp : implementation file // #include "stdafx.h" #include "ADOXCreateDatabase.h" #include "ADOXCreateDatabaseDlg.h" #include "Shlwapi.h" #pragma comment(lib,"shlwapi.lib") // Download by http://www.codefans.net #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CADOXCreateDatabaseDlg dialog CADOXCreateDatabaseDlg::CADOXCreateDatabaseDlg(CWnd* pParent /*=NULL*/) : CDialog(CADOXCreateDatabaseDlg::IDD, pParent) { //{{AFX_DATA_INIT(CADOXCreateDatabaseDlg) m_dbName = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CADOXCreateDatabaseDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CADOXCreateDatabaseDlg) DDX_Text(pDX, IDC_DBNAME, m_dbName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CADOXCreateDatabaseDlg, CDialog) //{{AFX_MSG_MAP(CADOXCreateDatabaseDlg) ON_WM_SYSCOMM

16,501

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧