Welcome

首页 / 软件开发 / C++ / VC自绘对话框

VC自绘对话框2010-07-01 VC知识库 Alon闲来无事,写了一个简单的对话框界面,希望给需要的朋友有所帮助。

界面如下:

界面很单调,我只是想说明一下如何实现界面的自绘。如果有需要,也可以绘制更复杂漂亮的界面。

程序的实现也不复杂,接下来就跟着我一步一步做。

首先,创建一个基于对话框的应用程序。

接下来,在CTestDlg类中添加两个成员函数:

// In CTestDlg.h
public:
void DrawView();
HBITMAP CreateGradientBMP(HDC hDC,COLORREF cl1,COLORREF cl2,int nWidth,int nHeight,int nDir,int nNumColors);

函数的具体内容如下:

// In CtestDlg.cpp
void CTestDlg::DrawView()
{
CPaintDC dc(this);
CRect rect;
CString strText="TEST. HEllo WoRLD! 你好,VCKBASE!"; //文本内容
GetClientRect(rect);
rect.right=27; //自绘区域宽度
COLORREF m_clrSideBarStart; //自绘区域起始处颜色
COLORREF m_clrSideBarEnd; //自绘区域结束处颜色

m_clrSideBarStart=RGB(205,205,205); //灰色
m_clrSideBarEnd=RGB(100,0,0); //褐色
//创建图及绘制区域
HBITMAP bmpBar = CreateGradientBMP(
dc.m_hDC, m_clrSideBarStart, m_clrSideBarEnd,
rect.Width(), rect.Height(),
0, 256);
if (bmpBar)
{
CDC memDC;
memDC.CreateCompatibleDC(&dc);
HBITMAP hOldBmp = (HBITMAP)::SelectObject(memDC.m_hDC, bmpBar);
dc.BitBlt(rect.left, rect.top,
rect.Width(), rect.Height(),
&memDC, 0, 0, SRCCOPY);
::SelectObject(memDC, hOldBmp);
::DeleteObject(bmpBar);
}
//绘制文本
CFont vertFont;
//字体
vertFont.CreateFont(16, 0, 900, 900, FW_BOLD,
0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, "Arial");
CFont *pOldFont = dc.SelectObject(&vertFont);
COLORREF oldColor = dc.GetTextColor();
dc.SetTextColor(RGB(255, 255, 255)); //文本颜色
dc.SetBkMode(TRANSPARENT);
dc.TextOut(rect.left+2, rect.bottom-4, strText); //文本起始位置
dc.SetTextColor(oldColor);
dc.SelectObject(pOldFont);
vertFont.DeleteObject();
}