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大小的图标
问题: m_hIcon指代什么图标,两者是怎样联系起来的?
在CMyDlg::CMyDlg()中,使用m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
IDR_MAINFRAME是图标的ID
OnInitDialog() 与 OnCreate()在上篇中已提到过,这两个函数虽然简单,但有着关建性的区别
在对话框进行操作时就必须放在OnInitDialog()中
OnCreate()是指正在产生窗口但对话框还没有形成(当然窗口还没有显示),如果现在想对其中的一个对话框操作,取得的只是个空指针,呵呵!
OnInitDialog()是指在在产生对话框后,窗口还没有显示时的过程函数
所以在上篇中对对话框的操作应该在OnInitDialog()中进行........