VC++界面编程之--自定义标签控件(CStatic)皮肤

时间:2022-09-07 22:52:31

IPhone聊天泡泡是个很不错的控件,因为它能很友好的给用户一些简短的提示信息,而不失美观。

VC++界面编程之--自定义标签控件(CStatic)皮肤

我也想将这个泡泡,加到我的界面上,用做一些小提示:)

用什么控件做好呢?当然是CStatic控件啦,我就是喜欢CStatic的简单,易扩展性强。只要你有一个好的GDI描绘创意,就能将其效果弄得千变万化。


废话不多说,直接上使用步骤:

1. 设置父窗口,用于获取父窗口的背景画刷:

void SetThemeParent(const HWND hWnd)
{
ATLASSERT(::IsWindow(hWnd));
m_wndParent = hWnd;
}


2. 设置背景图片,背景图片推荐PNG格式的,因为其支持透明色,而不会像BMP那么大。

void SetBackgroundImage(const int nImageID)
{
ATLASSERT(nImageID > 0);
m_imgBack.Load_Image(nImageID, _T("PNG"));
DrawLabel();
}

3. 设置文本对其方式,我这里用的是GDI+文本对其方式:

// Set text format.
void SetTextAlign(const StringAlignment align)
{
m_TextAlign = align;
DrawLabel();
}

4. 调整文本位置,因为有些图片与文字之间的位置,需要做些许移动,才能对称:

// Adjust text position.
void AdjustTextPos(const int nTop, const int nLeft)
{
m_nTextTop = nTop;
m_nTextLeft = nLeft;
DrawLabel();
}

5. 设置字体,这里使用CStatic默认的函数。但须注意:一旦设置字体时,需要捕获WM_SETFONT消息,获取新设置的字体,以刷新为最新的字体:

LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
m_Font.DeleteOldFont();
CPaintDC dc(m_hWnd);
m_Font.m_Font = new Font(dc, (HFONT) wParam);
DrawLabel();

bHandled = FALSE;
return 0;
}

本文工程代码免费下载链接:http://download.csdn.net/detail/renstarone/6239655