我创建了一个单文档MFC程序, 然后我在上面加了一个动态按钮  
具体过程是 
1:新建按钮类 class CBmpBtn : public CButton 
2:重载Create函数
3:重载DrawItem函数
这些都没有问题,动态按钮也都正常显示了。
然后我在CBmpBtn类中添加了鼠标左键按下的消息响应函数OnLButtonDown()可是我发现程序运行之后,除了点击最上面的标题栏,点其他任何地方都回进入这个按钮类的OnLButtonDown ,然后我试了在程序的视图类C***view类中添加OnLButtonDown()也是一样的情况,请大家解释下!谢谢了。消息机制我不是很懂

解决方案 »

  1.   

    响应按钮的OnLButtonDown 时,会不会也响应View的OnLButtonDown ?
    想看看你的代码。
      

  2.   

    按钮是在覆盖在VIEW上面的,  
    刚才试验了一下!响应按钮的OnLButtonDown 时,不响应View的OnLButtonDown了。 太奇怪了。 代码不多 但是分散,不好贴啊 兄弟 
      

  3.   

    发到我邮箱,行不?
    [email protected]
      

  4.   

    因为里面用的图片涉及公司的,~其实代码没什么。我把图片去掉发给你吧。就5张BMP图片 是用来给动态加载的按钮上色的。 我发给你 帮我看看尽快回复我哦谢谢了!
      

  5.   

    消息的处理应该是从CBmpBtn -> CView.你需要了解一下Subclass 和superclass。http://hi.baidu.com/buckayro/blog/item/56fff059aa000e86810a1821.html希望对你有用。
      

  6.   

    谢谢上面的 
    我还有个问题 
    LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类
    switch(message)
    {
    case WM_ACTIVATE:

    { }
    哪些情况会引起WM_ACTIVATE这个消息到来,是不是只要是主框架上面的窗口空间被激活或者失活都会引发?  是不是主框架可以接收MFC的所有消息?
      

  7.   

    还有一个问题 mainframe 是 view 的父类 
     单文档中mainframe 包括 view, 工具兰,menu,状态栏 这些吗?
      

  8.   

    continue !!!  please   thanks everyone answer my question
      

  9.   

    问题 
    LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

    // TODO: 在此添加专用代码和/或调用基类 
    switch(message) 

    case WM_ACTIVATE: { } 
    哪些情况会引起WM_ACTIVATE这个消息到来,是不是只要是主框架上面的窗口控件(比如view,btn等)被激活或者失活都会引发WM_ACTIVATE这个消息?  是不是主框架可以接收MFC的(包括主框架上面的view,bar,menu等等)所有消息?
      

  10.   

    点击、 alt+tab 、 alt+esc等可以引发wm_activate激活顶层窗体。
    楼主上面说的消息基本在框架都可以接收到