OnInitDialog()的原理

来源:互联网 发布:怎样躲避公司网络监控 编辑:程序博客网 时间:2024/05/22 00:40

BOOL CMyDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   // Add "About..." menu item to system menu.

   // IDM_ABOUTBOX must be in the system command range.
   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
   ASSERT(IDM_ABOUTBOX < 0xF000);

   CMenu* pSysMenu = GetSystemMenu(FALSE);
   if (pSysMenu != NULL)
   {
      CString strAboutMenu;
      strAboutMenu.LoadString(IDS_ABOUTBOX);
      if (!strAboutMenu.IsEmpty())
      {
         pSysMenu->AppendMenu(MF_SEPARATOR);
         pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
   }

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);   // Set big icon
   SetIcon(m_hIcon, FALSE);  // Set small icon
  
   return TRUE;  // Return TRUE unless you set the focus to a control
}

这是由MFC AppWizard自动生成的对话框初始化代码。其步骤如下:

首先,添加菜单选项。所有已有的选项的ID值大于0xF000,添加的ID值小于0xF000.本程序将添加ID值为IDM_ABOUTBOX的选项到菜单,使得用户点击选项后可以弹出about对话框。

CMenu* pSysMenu = GetSystemMenu(FALSE);  //用于获取当前的菜单,返回菜单的指针

pSysMenu->AppendMenu(MF_SEPARATOR);  //在当前菜单下添加一分隔符

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  //添加ID为
IDM_ABOUTBOX的菜单选项,显示的选项文字为strAboutMenu,

其次,设定about对话框的图标
SetIcon(m_hIcon, TRUE);    //m_hIcon在CDialog中定义,该语句设定32*32大小的图标

SetIcon(m_hIcon, FALSE);    //m_hIcon在CDialog中定义,该语句设定16*16大小的图标

问题:

1。m_hIcon指代什么图标,两者是怎样联系起来的?

    在CMyDlg::CMyDlg()中,使用m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

   IDR_MAINFRAME是图标的ID

OnInitDialog() 与 OnCreate()在上篇中已提到过,这两个函数虽然简单,但有着关建性的区别

在对话框进行操作时就必须放在OnInitDialog()中

OnCreate()是指正在产生窗口但对话框还没有形成(当然窗口还没有显示),如果现在想对其中的一个对话框操作,取得的只是个空指针,呵呵!

OnInitDialog()是指在在产生对话框后,窗口还没有显示时的过程函数

所以在上篇中对对话框的操作应该在OnInitDialog()中进行........

原创粉丝点击