【问题标题】:How to notify the parent dialog of a button down message如何通知父对话框按钮按下消息
【发布时间】:2015-07-29 15:17:38
【问题描述】:

我想继承一个 CButton 来处理 ON_WM_LBUTTONDOWN 消息。

DownButton.cpp:

#include "stdafx.h" 
#include "DownButton.h" 

//CDownButton 

IMPLEMENT_DYNAMIC(CDownButton, CButton) 

CDownButton::CDownButton() 
{ 
} 

CDownButton::~CDownButton() 
{ 
} 


BEGIN_MESSAGE_MAP(CDownButton, CButton) 
    ON_WM_LBUTTONDOWN() 
END_MESSAGE_MAP() 



// CDownButton message handlers 

void CDownButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
}

DownButton.h

#pragma once 


// CDownButton 

class CDownButton : public CButton 
{ 
    DECLARE_DYNAMIC(CDownButton) 

public: 
    CDownButton(); 
    virtual ~CDownButton(); 

protected: 
    DECLARE_MESSAGE_MAP() 
public: 
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
}; 

但是如何通知包含此按钮的对话框发生这种情况?它似乎唯一能收到的消息是 ON_BN_CLICKED。

【问题讨论】:

  • 我多年没有使用MFC,但我认为父窗口可以直接在其子窗口中接收事件通知

标签: c++ mfc subclassing


【解决方案1】:

您需要在 OnLButtonDown - 事件中将消息重新发送给父级:

void CDownButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
   // do what you want to do ...

   GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID() | WM_LBUTTONDOWN << 16, (LONG) GetSafeHwnd());
}

【讨论】:

  • 我知道我应该在对话框的BEGIN_MESSAGE_MAP 中添加ON_COMMAND(ID_BUTTON, &amp;Dialog::function),但是如何使用 WM_LBUTTONDOWN 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2012-07-31
  • 2020-04-12
  • 1970-01-01
  • 2021-03-06
相关资源
最近更新 更多