我有一个 CListCtrl 类,当用户选择其中一个子项时,我在子项上显示一个 CComboBox,然后用户可以从中进行选择。
但是我有一个问题。当用户做出选择时,我需要组合框消失(即拦截 CBN_SELCHANGE)。问题是我需要使 CComboBox 成为 CListCtrl 的子项(否则即使我将组合框设置为最顶部,我也会在组合框上绘制列表时遇到奇怪的问题)。所以 CBN_SELCHANGE 消息被发送到列表视图,可以理解的是,忽略它。如何让列表视图将该消息传递给父窗口。
我真的需要派生自己的 CListCtrl 类来简单地拦截 CBN_SELCHANGE 消息并将其传递给父窗口吗?有没有比创建 OnWndMsg 处理程序更好的方法呢?
谢谢你的帮助!
编辑:此代码有效
class CPassThroughListCtrl : public CListCtrl
{
protected:
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if ( message == WM_COMMAND )
{
GetParent()->SendMessage( message, wParam, lParam );
}
return CListCtrl::OnWndMsg( message, wParam, lParam, pResult );
}
public:
CPassThroughListCtrl()
{
};
};
但我真的很想知道是否有更好的方法来做到这一点。