1、用ClassWizard添加消息处理函数时,不仅增加函数,还要在程序文件的消息映射宏中增加一个相关的项,从而使得程序执行过程中,实例能找到该消息的回调地址。
2、不清楚。仔细检查你的那四个BITMAP ID是否符合约定,如果都符合,再看OnInitDialog()中AutoLoad()的执行情况。重要的是跟踪,只有跟踪进MFC的源程序,才能知道返回的错误,并针对它进行改进。
2、不清楚。仔细检查你的那四个BITMAP ID是否符合约定,如果都符合,再看OnInitDialog()中AutoLoad()的执行情况。重要的是跟踪,只有跟踪进MFC的源程序,才能知道返回的错误,并针对它进行改进。
解决方案 »
- GetMsgProc()如何区分不同的自定消息 关于钩子的问题(不吝啬分数)
- 求一个遍历文件夹中txt文件的例子(子文件夹里也有,也要遍历)
- 如何使MDI子对话框自适应大小
- 我在单文档中嵌入了一个对话框,能不能让此对话框的大小随着客户区大小的变化而变化,再者能不能限制这个客户区最小显示范围
- 装了Visual Studio .net 2003,问题来了!
- _ variant_t 转换成 char * 的方法 !
- 怎样在MDI启动子窗体实现子窗体最大化,在线等待,马上给分!
- 关于软件在线更新的问题~
- vs2010如何方便地查看MFC的源代码????
- 请问:<<windows网络编程>>(机械工业出版社出版)这本书南京有卖吗?
- 怎样编写自己的脚本解释程序
- VB高手请出手相助!!100分啊!!
谢谢
有关1能否说详细一点
DialogBar和标准对话框不同,没有OnInitDialog()消息啊谢谢
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作为父类。
我觉得你说的是自定义消息的处理方法,和ClassWizard中已有的CStatic类的BN_CLICKED消息处理不同。不过仍然非常感谢阁下的帮助。
30分不是全部,请原谅,希望交个朋友,在下EmailAddress是[email protected]