- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在报告模式下有一个 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/
我发布了 this question以前和现在都加载了本地化字符串(我们使用 LoadString() 获得的字符串),但我还需要从卫星 DLL 加载所有其他资源。 MFC 具有 AfxSetReso
当从 WTL sample 中的主机菜单中单击读取或清除剪贴板时用vs2013编译 CHAIN_COMMANDS_MEMBER(m_wndFormatList) 将消息从主机传递到成员列表控件,但消息
我有一个 SDI 应用程序。框架类是: class CMainFrame : public CFrameWindowImpl, public CMessageFilter, publ
我想创建一个带有自定义图像按钮的工具栏,我有 .ico 格式的图像,如何将它们添加到 WTL 的工具栏中?我正在尝试编辑工具栏列表中的图片,但质量很差,如何添加质量更好的图片? 最佳答案 如果您有一个
我正在开发窗口应用程序,因为我在左侧和右侧有 2 个子窗口。我想分别处理两个窗口的输入事件。如何实现? 我的代码: class EditorWindow : public DxWindow { pub
我已经用 WTL 中的复选框创建了我自己的自定义绘制列表,我现在想让它可以滚动,问题是我正在继承我绘制的静态文本控件。我不知道静态控件是否支持任何滚动办法.. 无论如何,我的问题是如何使我的自定义控件
这个问题问懂WTL的人!请告诉我,如何使用 WTL 拒绝窗口更改自己的大小?或者如何使用 WTL 创建固定大小的窗口? 这是我在 MainFrm.cpp 中的一部分代码,如果我没记错的话,它会创建窗口
我已经在这里阅读了一些有关如何实现该目标的主题。我尝试了几个答案,但到目前为止都没有用。我只是想获取编辑控件的内容,在 WTL 中作为 CEdit 给出,并将其保存到一个最好的 std::wstrin
我是 C++ WTL 的新手。我想在我的项目中添加一个新对话框。我不确定 WTL 是否有向导或其他东西。请指导我创建一个新对话框。 看来我的问题还不清楚。 我需要有关如何在 WTL 项目中添加对话框的
我有一个小型应用程序,它有一个仅用于后台处理的消息 WTL 窗口。但在某些情况下,我想显示一个应该表现为模态的窗口,也就是说,只有在用户单击按钮后,消息处理窗口的消息处理程序才会返回。 我在想我可以这
我已经使用 WTL 编写了一个简单的 GUI: 就设置窗口而言,我已经弄清楚了一切,还连接了菜单等以调用我想要的任何内容。但是我需要知道,例如,有人在 ListView 中选中了一个复选框,或者有人点
我想知 Prop 有更多 WTL 知识的人如何创建这样的东西: 可调整大小的对话框 (-> WS_THICKFRAME),包含两个“区域”。调整大小时,一个区域会在 y 方向增长,并且包含一些组件,这
在 MainDlg 函数中 LRESULT CMainDlg::OnDo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
WTL 应用程序已经非常小了。但是,对于 Win32 配置,使用 VS 2005 和 WTL 9.10 的静态链接应用程序的重量为 136 kB(139,264 字节)。 查看可执行文件时,我注意到
我正在尝试理解 WTL 的工作方式,而消息循环现在让我感到困惑。 例如这个代码片段:link 首先创建窗口,然后启动消息泵。它是如何工作的? CreateEx、UpdateWindow 等不应该发送它
我正在尝试学习WTL/Win32编程,我不太了解CIdleHandler mixin类的设计。 对于WTL 9.1,CMessageLoop代码如下(来自atlapp.h): for(;;)
我不得不将自定义文件对话框(派生自 MFC 的 CFileDialog)重写为 WTL 的 CFileDialog。当我无权访问对话框对象本身时,我在检索数据时遇到了一些问题。想象一下。 我有一个类(
我正在尝试将我在我的资源中创建的菜单栏添加到我的资源的对话框中,但我不太清楚如何操作。 我搜索了很多指南,但他们似乎都只适用于 _Module 根据 Does ATL/WTL still requir
我正在尝试使用 WTL::CHyperLink 以便在我的应用程序上显示可点击的链接。 根据 this article ,我需要将它附加到静态文本控件。 因此,在我的 GUI 中,我现在创建了一个 I
我在报告模式下有一个 Windows 模板库 CListViewCtrl(因此有一个包含 2 列的标题)和所有者数据集。此控件显示搜索结果。如果没有返回结果,我想在列表框区域显示一条消息,指示没有结果
我是一名优秀的程序员,十分优秀!