首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有状态文本的WTL CListViewCtrl

带有状态文本的WTL CListViewCtrl
EN

Stack Overflow用户
提问于 2009-06-01 21:54:54
回答 3查看 2.5K关注 0票数 2

我在报告模式下有一个Windows Template Library CListViewCtrl (因此有一个包含2列的标题),其中包含所有者数据集。此控件显示搜索结果。如果没有返回结果,我想在列表框区域显示一条消息,指示没有结果。有什么简单的方法可以做到这一点吗?你知道任何现有的控件/示例代码(我找不到任何东西)。

否则,如果我子类化控件来提供此功能,那么什么是一个好的方法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-02 00:28:29

我最终对控件进行了子类化,并像这样处理OnPaint:

代码语言:javascript
复制
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,消息显示在标题的中央。这就是我想要的。我在控件的子类化方面是个新手,所以我不确定这是不是最好的解决方案。

票数 5
EN

Stack Overflow用户

发布于 2009-06-12 08:38:42

如果您使用的是Vista或更高版本,请处理LVN_GETEMPTYMARKUP通知。对于pre-Vista,您需要自己绘制消息。

票数 2
EN

Stack Overflow用户

发布于 2009-06-02 02:20:33

另一个想法是有另一个控件,具有与列表控件相同的大小和位置,但处于隐藏状态。可以是编辑控件、静态文本、浏览器控件等。

然后,当您没有任何搜索结果时,您可以将消息放入此控件中,并取消隐藏它。当用户执行另一次返回结果的搜索时,您可以隐藏此控件并正常地在列表视图中显示结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/936997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档