回 帖 发 新 帖 刷新版面

主题:请教:Visual C++对话框编程的问题

以前在大学学过C++和VB,现在打算学一点VC++。用的参考书是《Inside Visual C++》,翻译特差劲,好像是用的翻译软件直接翻的,文字半通不通的……汗……

    前几章都算过去了,到第7章编写非模式对话框程序时出问题了……把原文抄上来:

    [color=800000]5、使用ClassWizard添加一个OnInitDialog消息处理函数。
    正如在一会儿将看到的那样,ClassWizard生成初始对话框控件的代码。然而,这个DDX(对话框数据交换)代码将不初始化列表框选择,所以必须重载CDialog::OnInitDialog函数。尽管OnInitDialog是一个虚拟成员函数,但是如果在派生的对话框类中映射WM_INITDIALOG消息,那么ClassWizard就生成原型和框架。要做到这一点,在Object IDs列表框中单击OnInitDialog,然后在Message列表框中单击WM_INITDIALOG消息。在MFC ClassWizard对话框中单击Edit Code按钮来编辑OnInitDialog函数。键入如下所示黑体的代码,代替已有的代码:

BOOL CEx06aDialog::OnInitDialog()
{
    CListBox* pLB=(CListBox*)GetDlgItem(IDC_DEPT);
    pLB->InsertString(-1,"Documentation");
    pLB->InsertString(-1,"Accouting");
    pLB->InsertString(-1,"Human Relations");
    pLB->InsertString(-1,"Security");

    return CDialog::OnInitDialog()
}[/color]

    问题是:我在Object IDs对话框中根本找不到OnInitDialog对象,当然在Message对话框里也没有WM_INITDIALOG消息可选!按我的理解,ClassWizard的工作对象是当前工作区的类也就是CEx06aDialog,而它的基类是CDialog,那么ClassWizard当然不会把基类的对象给列出来了!但要自己手工编写原型和消息处理的话,我又没这个本事……这几天为这个问题快抓狂了,希望高手指教我该如何处理!

回复列表 (共3个回复)

沙发

对不起,以为没发上来多点了几次,请斑竹删掉多余的帖只留一个就好了!SORRY!

板凳

OnInitDialog不是Object ID,是消息处理函数。当然选不了啦
在CEx06aDialog类上直接添加WM_INITDIALOG消息响应就好了

有机会还是自己手工写下消息处理,别过分依赖classwizard。
推荐看看《深入浅出MFC》,刨析的很透彻。

3 楼

初学的话《VC++深入详解》是本不错的入门书
《Inside vc》和《MFC程序设计》是一个级别的,呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册