gpt4 book ai didi

c++ - 带有状态文本的 WTL CListViewCtrl

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:02 25 4
gpt4 key购买 nike

我在报告模式下有一个 Windows 模板库 CListViewCtrl(因此有一个包含 2 列的标题)和所有者数据集。此控件显示搜索结果。如果没有返回结果,我想在列表框区域显示一条消息,指示没有结果。是否有捷径可寻?你知道任何现有的控件/示例代码吗(我找不到任何东西)。

否则,如果我将控件子类化以提供此功能,什么是好的方法?

最佳答案

我最终将控件子类化并像这样处理 OnPaint:

class MsgListViewCtrl : public CWindowImpl< MsgListViewCtrl, WTL::CListViewCtrl >
{
std::wstring m_message;
public:
MsgListViewCtrl(void) {}

BEGIN_MSG_MAP(MsgListViewCtrl)
MSG_WM_PAINT( OnPaint )
END_MSG_MAP()

void Attach( HWND hwnd )
{
SubclassWindow( hwnd );
}

void SetStatusMessage( const std::wstring& msg )
{
m_message = msg;
}

void OnPaint( HDC hDc )
{
SetMsgHandled( FALSE );
if( GetItemCount() == 0 )
{
if( !m_message.empty() )
{
CRect cRect, hdrRect;
GetClientRect( &cRect );
this->GetHeader().GetClientRect( &hdrRect );
cRect.top += hdrRect.Height() + 5;

PAINTSTRUCT ps;
SIZE size;
WTL::CDCHandle handle = this->BeginPaint( &ps );
handle.SelectFont( this->GetFont() );
handle.GetTextExtent( m_message.c_str(), (int)m_message.length(), &size );
cRect.bottom = cRect.top + size.cy;
handle.DrawText( m_message.c_str(), -1, &cRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER );
this->EndPaint( &ps );
SetMsgHandled( TRUE );
}
}
}
};

搜索运行后,如果没有结果,我会调用 SetStatusMessage 并且消息显示在标题下方的中央。这就是我想要的。我是子类化控件方面的新手,所以我不确定这是否是最佳解决方案。

关于c++ - 带有状态文本的 WTL CListViewCtrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com