我创建了一个自定义控件作为CWnd
从范围中选择子范围的派生类。为了进行测试,我在 Visual Studio 2010 中创建了一个 MFC 对话框应用程序,其中包含我的自定义类的成员实例和一些成员CEdit
实例,以显示自定义控件中当前选择的范围。
在自定义类中,我有:
BEGIN_MESSAGE_MAP(CRangeSelectorCtrl, CWnd)
...
ON_WM_LBUTTONDOWN()
...
END_MESSAGE_MAP()
...
void CRangeSelectorCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (leftScrollArrowRect().PtInRect(point))
{
d_range_selector.SlideBar(-1);
Invalidate();
}
else if (rightScrollArrowRect().PtInRect(point))
{
d_range_selector.SlideBar(1);
Invalidate();
}
CWnd::OnLButtonDown(nFlags, point);
}
在我的测试对话框应用程序中,我有:
BEGIN_MESSAGE_MAP(CTestRangeSelectorCtrlDlg, CDialogEx)
...
ON_WM_PARENTNOTIFY()
...
END_MESSAGE_MAP()
...
BOOL CTestRangeSelectorCtrlDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
...
m_range_selector_ctrl.ModifyStyleEx(WS_EX_NOPARENTNOTIFY, 0);
...
}
...
void CTestRangeSelectorCtrlDlg::OnParentNotify(UINT message, LPARAM lParam)
{
CDialogEx::OnParentNotify(message, lParam);
if (message == WM_LBUTTONDOWN)
{
updateEditBoxes();
}
}
这几乎可行,但问题是对话框的OnParentNotify
get 是在子级响应左键单击更新之前调用的,因此所有值都在一次单击之后。
在孩子完成后,如何OnParentNotify
在父母中调用或调用其他方法OnLButtonDown
?还是有另一种方法来完成我想要的?
我尝试让父级响应WM_LBUTTONUP
消息,但是当我在子级中添加消息处理程序WM_LBUTTONUP
并检查它们时,它们在子级中被调用OnParentNotify()
但从不传播给父级(即使我注释掉.CWnd::OnLButtonDown
CWnd::OnLButtonDown(nFlags, point)