返回首页

简介
本文介绍了如何使一个Vista风格与C#酷CPUInfo控制。这种控制可以得到当前的Windows系统的CPU和内存的百分比。背景
微软在Vista系统提供了一个漂亮的侧栏,所以我想用C#相同的控制。到GDI,你可以发现,这是很容易做到。使用代码
的主类是VistaCPUInfo类,它是从UserControl类继承:

//

// Main Class

//

public partial class VistaCPUInfo : UserControl

{

    ...

}

要得到CPU的百分比,使用下面的代码:{C}
要获得物理内存的百分比,使用下面的代码:
//Memory Structure

[StructLayout(LayoutKind.Sequential)]

public struct MEMORY_INFO

{

    public uint dwLength;

    public uint dwMemoryLoad;

    public uint dwTotalPhys;

    public uint dwAvailPhys;

    public uint dwTotalPageFile;

    public uint dwAvailPageFile;

    public uint dwTotalVirtual;

    public uint dwAvailVirtual;

}

...

MEMORY_INFO MemInfo;

MemInfo = new MEMORY_INFO();

GlobalMemoryStatus(ref  MemInfo);

mem = (float)MemInfo.dwMemoryLoad;    //This is the aim value!

然后,使用GDI方法得出的结果:
void VistaCPUInfo_Paint(object sender, PaintEventArgs e)

{

    e.Graphics.TextRenderingHint = 

        System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

    //Background

    e.Graphics.DrawImage

        (Image, (int)positionRect.X, (int)positionRect.Y, 198, 159);

    //Point

    e.Graphics.ResetTransform();

    e.Graphics.TranslateTransform

        (positionRect.X + 68f, positionRect.Y + 82f);

    e.Graphics.RotateTransform(cpuCurAngle);

    e.Graphics.DrawImage(ImageDial, -5, -49, 10, 98);

    e.Graphics.ResetTransform();

    e.Graphics.TranslateTransform

        (positionRect.X + 143f, positionRect.Y + 50f);

    e.Graphics.RotateTransform(memCurAngle);

    e.Graphics.DrawImage(ImageDialSmall, -5, -35, 10, 70);

    e.Graphics.ResetTransform();

    //Cover

    e.Graphics.DrawImage

        (ImageDialDot, (int)positionRect.X, (int)positionRect.Y, 198, 150);

    //Text

    RectangleF rect = new RectangleF((int)positionRect.X + 53, 

                        (int)positionRect.Y + 107, 35, 15);

    e.Graphics.DrawString(((int)percentOfCPU).ToString() + 

                    "%", textFont, textBrush, rect, format);

    rect = new RectangleF((int)positionRect.X + 127, 

                (int)positionRect.Y + 66, 35, 13);

    e.Graphics.DrawString(((int)percentOfMemory).ToString() + 

                    "%", textFont, textBrush, rect, format);

    //GlassEffect

    e.Graphics.DrawImage

        (ImageGlass, (int)positionRect.X, (int)positionRect.Y, 198, 159);

}
兴趣点GDI和C#开发是一个非常有趣的事情!PNG格式的图片绘制阿尔法PICS是非常好!对于更多的代码示例,请访问{A}。历史 2008年1月8日:第一,关于2008年5月9日:修改Davidwu:禁用designtime模式的动画。 (感谢约翰尼研究!)

回答

评论会员:BillWoodruff 时间:2011/12/15
您好,

为此做出的贡献表示感谢。

是否有您的网站上的英文版本文档,介绍了在非Vista系统的alpha透明度你的技术吗?

最好的,条例草案的伍德拉夫

"大人们之间的社会和文化的距离,更神奇的光,春天从他们的联系。"米兰昆德拉在旧约Trahis
评论会员:Davidwu 时间:2011/12/15
有关于Alpha高科技的一些文章,但在中国的书面they'r。对不起,我没有足够的时间把它们翻译为英文。也许你可以使用谷歌翻译工具。

修改,2008年5月9日,星期五上午11:43
评论会员:Win32nipuh 时间:2011/12/15
这是伟大的控制!

我在我的应用程序中使用它呢?

的问候,
奥列格。
评论会员:Davidwu 时间:2011/12/15
当然,你可以!我很高兴
评论会员:Win32nipuh 时间:2011/12/15

是有可能没有一倍的控制,但只有一个吗?例如,我想使用它显示磁盘上的自由空间。

的问候,
奥列格。
评论会员:Davidwu 时间:2011/12/15
当然,你可以使用任何你喜欢的方式吧!它的所有自由
评论会员:!黄邵Voon 时间:2011/12/15
,但我知道CPU利用率不增加或减少增量,但波动了很多,突然。所以最终,我放弃了,这样做控制。

漂亮的UI和图形!保持良好的工作!
评论会员:Davidwu 时间:2011/12/15
!〜
评论会员:Davidwu 时间:2011/12/15
您可以使用

(this.DesignMode == FALSE)
{
/ /做动画
}

检查是否控制在designtime或运行模式。没有任何理由designtime模式控制动画。我个人觉得它刺激性,控制动画,而我做我的形式设计 - 不知道其他开发商,尽管...

否则:很好的工作!我给你一个4

欢呼声,
约翰尼J.
评论会员:Davidwu 时间:2011/12/15
感谢您的建议!
评论会员:DaveyM69 时间:2011/12/15
好文章,简单的源,大量的资源。
感谢分享这非常好5 GDI文章Davidwu,。

Dr.Luiji

信托,你会被信任。
评论会员:Davidwu 时间:2011/12/15

评论会员:标记Nischalke 时间:2011/12/15
很酷 - 只是一个很小的事情,很容易纠正。当您选择不同的皮肤,一切顺利,除了检查项目预计在上下文菜单中保持不变,实际上并不检查选定的项目。

这修复它:
private void mnuClassic_Click(object sender, EventArgs e)

        {

            this.style = VistaCPUInfoStyle.Classic;

            // inserted

            mnuClassic.Checked = true;

            mnuCoolBlack.Checked = false;

            //

            this.Invalidate();

        }

 

        private void mnuCoolBlack_Click(object sender, EventArgs e)

        {

            this.style = VistaCPUInfoStyle.CoolBlack;

            //inserted

            mnuClassic.Checked = false;

            mnuCoolBlack.Checked = true;

            //

            this.Invalidate();

        }
否则,一个很好的例子。
评论会员:Davidwu 时间:2011/12/15
! zip文件更新
评论会员:赫伯特Sauro 时间:2011/12/15
是真的有必要在标题中包含你的网址吗?对我来说意味的自我宣传和自我。你拥有了它在页面上至少两次了。

只有两个字母,离一个资产