 |
你这个问题使我想起了几年前我对这个问题的研究,当时我也对字体颜色改变感到困惑,但后来我还是想了一个简单的办法。实际上这要利用API的一个函数ExtTextOut。这个函数允许输出文字时指定文字的坐标和一个矩形。这个矩形用来剪裁文字,超出矩形的文字将不会被显示出来。所以绘制百分比分两次矩形,每次文字都在中央输出,但一次为白色,一次为黑色。两次的矩形是不同的,一个是左边的蓝色进度条,另一次是右边的白色部分。由于ExtTextOut的剪裁作用,就出现了半个字的效果。具体程序如下:
// nImageWidth, nImageHeight为图形区域宽度和高度
// nWidth, nHeight为百分比字符串的宽度和高度
SetTextColor(hDC, WHITE);
hBrush = CreateSolidBrush(BLUE);
hBrushOld = SelectObject(hBrush);
rect.Left = 0;
rect.Right = nImageWidth * Value / 100;
rect.Top = 0;
rect.Bottom = nImageHeight;
ExtTextOut(hDC,
(nImageWidth -nWidth) / 2,
(nImageHeight -nHeight) / 2,
ETO_CLIPPED | ETO_OPAQUE,
&rect,
sString,
sString,
NULL);
rect.Left = rect.Right;
rect.Right = nImageWidth;
SetTextColor(hDC, BLACK);
SelectObject(hBrushOld);
DeleteObject(hBrush);
hBrush = CreateSolidBrush(WHITE);
hBrushOld = SelectObject(hBrush);
ExtTextOut(hDC,
(nImageWidth -nWidth) / 2,
(nImageHeight -nHeight) / 2,
ETO_CLIPPED | ETO_OPAQUE,
&rect,
sString,
sString,
NULL);
SelectObject(hBrushOld);
DeleteObject(hBrush);
另外,你可以在http://china.zealsoft.com/cn/progbar/下载用VB实现的源程序。
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Visual Basic, VB, Windows 9x控件, listview, treeview, monthview, progress bar。
|