1、用ClassWizard添加消息处理函数时,不仅增加函数,还要在程序文件的消息映射宏中增加一个相关的项,从而使得程序执行过程中,实例能找到该消息的回调地址。
2、不清楚。仔细检查你的那四个BITMAP ID是否符合约定,如果都符合,再看OnInitDialog()中AutoLoad()的执行情况。重要的是跟踪,只有跟踪进MFC的源程序,才能知道返回的错误,并针对它进行改进。

解决方案 »

  1.   

    to Kenny:
    谢谢
    有关1能否说详细一点
    DialogBar和标准对话框不同,没有OnInitDialog()消息啊谢谢
      

  2.   

    先说1:在窗口类实现的源程序中,有一段如下代码:
    BEGIN_MESSAGE_MAP(CMenuBar, CControlBar)
    //{{AFX_MSG_MAP(CMenuBar)
    ON_WM_CREATE()
    ON_WM_WINDOWPOSCHANGED()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    在头文件中有:
    //{{AFX_MSG(CMenuBar)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    当然在.cpp文件中还有:
    int CMenuBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {...}
    void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
    {
    ...
    }这是消息函数的完整声明。如果只在头文件中有原型,在源程序中有函数,消息发来的时候,窗口是不会找到函数的。这是因为,真正找到消息函数的地址并调用函数是在
    BEGIN_MESSAGE_MAP(CMenuBar, CControlBar)
    //{{AFX_MSG_MAP(CMenuBar)
    ON_WM_CREATE()
    ON_WM_WINDOWPOSCHANGED()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    中完成的。因此如果你要处理classwizard中没有列出的消息,第一须知道窗口本身会不会产生此消息,第二要按这两个消息的样子在需要的地方手工填加代码。
    注意,有可能需要写成这样:ON_COMMAND(ID_YOURCOMMANDID, yourcmdfunction)
    或ON_MESSAGE(ID_YOURCOMMANDID, yourcmdfunction)等,多种格式,但每种格式又有不同的规定,需看帮助,然后正确使用。
    至于第2个问题,在CFrameWnd创建之后,将给所有子窗口发送WM_INITDIALOG消息,CControlBar是可以收到的,CToolBar也可以收到,我想CDialogBar也可以收到。不过我没有试过,我以前既使使用实际意义是的DialogBar,为了Dock的方便实现(我是实现了一个与VC++界面中的Workspace及Output完全一样的Bar),还是使用了CControlBar作为父类。
      

  3.   

    把你的Picture控件的属性中Styles的Notify选中就行了.
      

  4.   

    在下通过邮件从另一位朋友那里得到了1的答案,其实很简单,在Bitmap控件风格中选中Notify选项即可,为此这位朋友花费了1个多小时时间尝试了多种方法,又不愿以来此领取积分,在下只好通过这里向其深表感谢。to Kenny:
    我觉得你说的是自定义消息的处理方法,和ClassWizard中已有的CStatic类的BN_CLICKED消息处理不同。不过仍然非常感谢阁下的帮助。
    30分不是全部,请原谅,希望交个朋友,在下EmailAddress是[email protected]
      

  5.   

    呵呵,cooger,我在等你回信那