软件注册站
热情软件屋

 
如何绘制显示进度百分比的进度条
编号: QA000833    
建立日期: 1999年4月20日 最后修改日期: 2000年6月30日
所属类别: C/C++ - Windows 9x控件

Visual Basic - Windows 9x控件
   
    BC5.02(Win32API)
    Win98
    我做了一个用(WinApi)画矩形,在矩形中间显示进度百分比的函数,就象InstallShied制作的安装程序中的“Setup”对话框中的进度条。但我不知道如何随进度底色的移动,动态的改变百分比字体的颜色(甚至是半个字)?(semble)
   
    你这个问题使我想起了几年前我对这个问题的研究,当时我也对字体颜色改变感到困惑,但后来我还是想了一个简单的办法。实际上这要利用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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio