晕在GUI

loverP 2003-12-13 01:13:47
我晕!怎么我在WinXP下用VS.NET中的窗体设计器设计的GUI中的标准按钮(Button控件)都是2000/9x的外观,而不是WinXP中标准按钮的样式(那种圆乎乎的)?
...全文
18 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
loverP 2004-01-06
up
  • 打赏
  • 举报
回复
loverP 2004-01-02
非常感谢 cocosoft(pengyun) 大虾!!
其实我只希望我的程序能像一般的应用程序那样,在2000里有2000的界面,在XP里有XP的界面就行了。
不过我想顺便了解一下,我怎样才能在程序中判断操作系统的版本,并依照不同版本绘制不同的自定义界面呢?
  • 打赏
  • 举报
回复
甴曱 2004-01-01
如果在XP下面,你要在Main过程中添加Application.EnableVisualStyles();
在按钮的属性里面设置FlatStyle为System
如果不在XP下面运行,你的按钮就要求进行重绘才能实现你想要的功能了。具体按钮重绘的代码为:
using System;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;

namespace ControlSet
{
/// <summary>
/// 自绘按钮
/// </summary>
public class MyButton : System.Windows.Forms.Button
{
private bool mouseDown=false;
private bool mouseHover=false;
public MyButton()
{
SetStyle(ControlStyles.UserPaint,true);
MouseDown+=new MouseEventHandler(OnMouseDown);
MouseUp+=new MouseEventHandler(OnMouseUp);
MouseEnter+=new EventHandler(OnMouseEnter);
MouseLeave+=new EventHandler(OnMouseLeave);
Height=23;
Width=75;
}

protected override void OnPaint(PaintEventArgs pe)
{
pe.Graphics.FillRectangle(new SolidBrush(Parent.BackColor),
pe.ClipRectangle);
if (Enabled == false)
{
DrawDisableButton(pe.Graphics);
}
else if (mouseDown)
{
DrawMouseDownButton(pe.Graphics);
}
else if (mouseHover)
{
DrawMouseHoverButton(pe.Graphics);
}
else if (Focused)
{
DrawContainFocusButton(pe.Graphics);
}
else
{
DrawNormalButton(pe.Graphics);
}
WriteText(pe.Graphics);
}
private void OnMouseDown(object sender,MouseEventArgs e)
{
mouseDown=true;
}

private void OnMouseUp(object sender,MouseEventArgs e)
{
mouseDown=false;
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}

private void OnMouseEnter(object sender,EventArgs e)
{
mouseHover=true;
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}

private void OnMouseLeave(object sender,EventArgs e)
{
mouseHover=false;
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}

private void DrawBorder(Graphics g,int state)
{
if (state==1)
{
Pen p = new Pen(SystemColors.ControlLightLight,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==2)
{
Pen p = new Pen(Color.Yellow,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==3)
{
Pen p = new Pen(SystemColors.ControlDark,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==4)
{
Pen p = new Pen(SystemColors.ControlLight,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==5)
{
Pen p = new Pen(Color.SkyBlue,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
if (state==4)
{
Pen p = new Pen(Color.FromArgb(161,161,146),1);
g.DrawLine(p,0,2,0,Height-3);
g.DrawLine(p,2,0,Width-3,0);
g.DrawLine(p,Width-1,2,Width-1,Height-3);
g.DrawLine(p,2,Height-1,Width-3,Height-1);
g.DrawLine(p,0,2,2,0);
g.DrawLine(p,0,Height-3,2,Height-1);
g.DrawLine(p,Width-3,0,Width-1,2);
g.DrawLine(p,Width-3,Height-1,Width-1,Height-3);
}
else
{
g.DrawLine(Pens.Black,0,2,0,Height-3);
g.DrawLine(Pens.Black,2,0,Width-3,0);
g.DrawLine(Pens.Black,Width-1,2,Width-1,Height-3);
g.DrawLine(Pens.Black,2,Height-1,Width-3,Height-1);
g.DrawLine(Pens.Black,0,2,2,0);
g.DrawLine(Pens.Black,0,Height-3,2,Height-1);
g.DrawLine(Pens.Black,Width-3,0,Width-1,2);
g.DrawLine(Pens.Black,Width-3,Height-1,
Width-1,Height-3);
}
}

private void DrawNormalButton(Graphics g)
{
DrawBorder(g,1);
PaintBack(g,SystemColors.ControlLightLight);
}

private void DrawMouseHoverButton(Graphics g)
{
DrawBorder(g,2);
PaintBack(g,SystemColors.ControlLightLight);
}

private void DrawMouseDownButton(Graphics g)
{
DrawBorder(g,3);
PaintBack(g,SystemColors.ControlLight);
}

private void DrawDisableButton(Graphics g)
{
DrawBorder(g,4);
PaintBack(g,SystemColors.ControlLight);
}

private void DrawContainFocusButton(Graphics g)
{
DrawBorder(g,5);
PaintBack(g,SystemColors.ControlLightLight);
}

private void PaintBack(Graphics g,Color c)
{
g.FillRectangle(new SolidBrush(c),3,3,
Width-6,Height-6);
}

private void WriteText(Graphics g)
{
int x=0,y=0;
Size s = g.MeasureString(Text,Font).ToSize();
x=(Width-s.Width)/2;
y=(Height-s.Height)/2;
if (Enabled)
g.DrawString(Text,Font,Brushes.Black,x,y);
else
g.DrawString(Text,Font,Brushes.Gray,x,y);
}
}
}
  • 打赏
  • 举报
回复
xzguyufeng 2004-01-01
在VS.Net2003中,构造函数调用
Application.EnableVisualStyles () ;
方法,然后将按钮的FlatStyle改为System就可以了.
但如果使用的2002就需要外加一个manifest文件,才能启动XP样式.
  • 打赏
  • 举报
回复
loverP 2004-01-01
up
  • 打赏
  • 举报
回复
loverP 2003-12-28
up
  • 打赏
  • 举报
回复
meixiaofeng 2003-12-26
FlatStyle
  • 打赏
  • 举报
回复
loverP 2003-12-26
是FlatStyle属性么?改成System的了,还是没用~~~~~
能具体讲讲么?还有,怎么给专家分?一定给!!!多谢帮忙!
  • 打赏
  • 举报
回复
loverP 2003-12-26
可我试了试,还是不行呀!会不会是因为我用了D版的WinXP和VS?
  • 打赏
  • 举报
回复
LongBow007 2003-12-25
把你的button的样式改成system的 呵呵 别忘了给点专家分阿
  • 打赏
  • 举报
回复
loverP 2003-12-25
可我的系统没问题呀!我都重装了一遍了~~~~555555555555
  • 打赏
  • 举报
回复
zhoujian2003 2003-12-22
同意核桃
  • 打赏
  • 举报
回复
loverP 2003-12-22
up
  • 打赏
  • 举报
回复
loverP 2003-12-14
能将具体点么?一定要自己实现么?
  • 打赏
  • 举报
回复
erictang2003 2003-12-13
XP 的WINNT 下有一个DLL,调用改变XP外观,而WIN2K/98 没有此DLL.
>>你可以用图标模拟XP风格.
  • 打赏
  • 举报
回复
loverP 2003-12-13
我用的确实是XP呀,按钮也是工具箱里的标准按钮,我想没必要自己绘制吧?
  • 打赏
  • 举报
回复
xamcsdn2 2003-12-13
用资源文件,网上有相关,XP风格的实现的文章的
  • 打赏
  • 举报
回复
wubike 2003-12-13
不会吧,我以前装过XP,运行后都是XP风格的按钮。。
  • 打赏
  • 举报
回复
xueyhfeng 2003-12-13
这个应该是与系统相关的,你编译出来的程序在XP下运行,就是XP的外观,在2K下运行,就是经典样式的外观,
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.7w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
申请成为版主
帖子事件
创建了帖子
2003-12-13 01:13
社区公告

让您成为最强悍的C#开发者