十万火急!!!Bitmap控件对鼠标点击消息的响应 & 关于CDialogBar中的自绘按钮!!!

seaskyfox 2000-05-29 01:29:00
六月交付,难题困扰,十万火急,搬请救兵!!!

1. ClassWizard 中 Bitmap 控件仅有一个 BN_CLICKED 消息,但是 Add Function 添加消息处理过程到程序中,运行时 Bitmap 却没有响应鼠标 left button clicked 消息,究竟是消息根本没发出,还是没能截获,怎样使其响应消息,望各位指点迷津。

2. 本人通过 CReBar.Create 和 AddBar 创建了一个 CDialogBar 类,在对话模板中包含自绘按钮控件,但是用 CBitmapButton.AutoLoad 调用位图,却不能使其显示出来;而用同样 CBitmapButton.AutoLoad 方式在一标准对话框中却能使自绘按钮正常画出,怎么会这样?

本人用的是 VC++6.0,窗口为单文档窗口,没有系统菜单、主菜单和工具栏。
...全文
221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
seaskyfox 2000-05-29
  • 打赏
  • 举报
回复
呵呵,cooger,我在等你回信那
seaskyfox 2000-05-29
  • 打赏
  • 举报
回复
在下通过邮件从另一位朋友那里得到了1的答案,其实很简单,在Bitmap控件风格中选中Notify选项即可,为此这位朋友花费了1个多小时时间尝试了多种方法,又不愿以来此领取积分,在下只好通过这里向其深表感谢。

to Kenny:
我觉得你说的是自定义消息的处理方法,和ClassWizard中已有的CStatic类的BN_CLICKED消息处理不同。不过仍然非常感谢阁下的帮助。
30分不是全部,请原谅,希望交个朋友,在下EmailAddress是s.fox@371.net
弹键作歌 2000-05-29
  • 打赏
  • 举报
回复
把你的Picture控件的属性中Styles的Notify选中就行了.
Kenny 2000-05-29
  • 打赏
  • 举报
回复
先说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作为父类。


seaskyfox 2000-05-29
  • 打赏
  • 举报
回复
to Kenny:
谢谢
有关1能否说详细一点
DialogBar和标准对话框不同,没有OnInitDialog()消息啊

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

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧