私は、コントロールをサブクラス化し、このようの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を呼び出し、メッセージはヘッダーの下中央に表示されます。それが私が望んだことです。私はコントロールをサブクラス化する初心者のようなので、これが最善の解決策かどうかはわかりません。
これは素晴らしいコードプロジェクトの記事になります。 – Rob
ウィンドウのサイズを変更するとき、これはどのように機能しますか? –
サイズ変更時に機能するかどうかわかりません。固定サイズのダイアログウィンドウで使用していました。 – Skrymsli