怎样用C#制作XP风格的窗体

xfxxx 2003-08-23 11:13:25
我先将窗体的边框去掉,然后使用重写Form的OnPaint事件时虽然重画了窗体的外观,包括窗体的Caption,MinBox,MaxBox等都是自己画上去的,但是当我向窗体中加入菜单时,菜单竟然跑到窗体的上方!
谁能给出XP风格窗体的正规解决方案,最好是写一个XPForm类,在使用时将所有的窗体从此类继承即可
还有一种使用方法是在类中给出一个方法,在FormLoad中调用这个方法,就可以将窗体外观转换过来.
还有其他的简便方法也可.
...全文
137 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
csharplove 2003-09-06
  • 打赏
  • 举报
回复
我把源代码发到你邮箱里去了,请接受
xuchi 2003-09-02
  • 打赏
  • 举报
回复
同意weifenluo(weifenluo)的观点!


xamcsdn2 2003-09-02
  • 打赏
  • 举报
回复
http://www.ccw.com.cn/htm/center/prog/02_2_27_4.asp
weifenluo 2003-09-01
  • 打赏
  • 举报
回复
>>>重载WndProc,然后处理有关WM_NCXXX的消息,是怎么做的
>>>没有哪位大侠能给出代码吗?

你可以参考我做的DockManager控件:
http://www.codeproject.com/useritems/DockManager.asp

在TabWindow.cs中,你可以找到一些代码.TabWindow类是从Panel派生的,它有一个BorderWidth的属性.在WndProc中,处理了WM_NCCALCSIZE和WM_NCPAINT消息,来画边框.
xfxxx 2003-08-30
  • 打赏
  • 举报
回复
还是不好使
xfxxx 2003-08-28
  • 打赏
  • 举报
回复
重载WndProc,然后处理有关WM_NCXXX的消息,是怎么做的
没有哪位大侠能给出代码吗?
zhbname 2003-08-28
  • 打赏
  • 举报
回复
关注
wangjs720 2003-08-28
  • 打赏
  • 举报
回复
用你的方法,你不要把标题栏去掉,只去掉SystemMenu就行了,
xamcsdn2 2003-08-28
  • 打赏
  • 举报
回复
http://www.ccw.com.cn/htm/center/prog/02_2_27_4.asp
vikey 2003-08-28
  • 打赏
  • 举报
回复
http://www.codeproject.com/cs/miscctrl/CollapsiblePanelBar.asp
http://www.codeproject.com/cs/miscctrl/XP-Style_Button.asp
virginsoldier 2003-08-25
  • 打赏
  • 举报
回复
正规解决方案看看MSDN中的Visual Styles Reference就知道了。 那是微软制作xptheme的方法。
plife 2003-08-25
  • 打赏
  • 举报
回复
up
SolidSanke 2003-08-25
  • 打赏
  • 举报
回复
重载WndProc,然后处理有关WM_NCXXX的消息,最好在MSDN上查看一下具体的信息。顺便说一句:C#的效率明显不如VB,VC高。试了就知道了
xfxxx 2003-08-24
  • 打赏
  • 举报
回复
首先感谢各位的回复,但是那些都不是我想要的
1.我不要那种在XP环境下通过修改装配件来是VS.net恢复成XP风格
2.我不要XP风格的控件,那些我已经搞通

我要的是在任何的超作系统下,使用XP风格的窗体,扩充一点说就是自己绘制窗体
但是只能改变窗体的外观,但是其原有的非窗体区域我控制不了,尤其是在其中加入一些特殊的控件如MainMenu,StatusBar等,他们都跑到边上去了!

希望有高手给出完美的解决方案,谢谢.
甴曱 2003-08-24
  • 打赏
  • 举报
回复
you look:
http://www.codeproject.com/cs/miscctrl/CollapsiblePanelBar.asp
http://www.codeproject.com/cs/miscctrl/XP-Style_Button.asp
and:
http://www.codeproject.com/csharp/dotnetvisualstyles.asp
spiketang 2003-08-24
  • 打赏
  • 举报
回复
主要是增加一些pictureBox然后对它们的又击事件进行编码!
private void changeWinState()
{
if(!ismax)
{
this.WindowState = FormWindowState.Maximized;
ismax=true;
this.TitleLabel.Text = "最大化!";
}
else
{
this.WindowState = FormWindowState.Normal;
ismax=false;
this.TitleLabel .Text = "默认大小!";
}
}

private void picBox_DoubleClick(object sender, System.EventArgs e)
{
changeWinState();
}

private void TitleLabel_DoubleClick(object sender, System.EventArgs e)
{
changeWinState();
}

private void picBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_pOffset = new Point(-e.X, -e.Y);
}

private void picBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(m_pOffset.X, m_pOffset.Y);
Location = mousePos;
}
}

private void button1_Click(object sender, System.EventArgs e)
{
Application.Exit ();
}

private void pictureBox4_MouseEnter(object sender, System.EventArgs e)
{
this.pictureBox4 .Image = System.Drawing.Bitmap.FromFile("close2.bmp");
}

private void pictureBox4_MouseLeave(object sender, System.EventArgs e)
{
this.pictureBox4 .Image = System.Drawing.Bitmap.FromFile("close1.bmp");
}

private void pictureBox4_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.pictureBox4 .Image = System.Drawing.Bitmap.FromFile("close3.bmp");
}

private void pictureBox4_Click(object sender, System.EventArgs e)
{
Application.Exit ();
}
}
weifenluo 2003-08-24
  • 打赏
  • 举报
回复
重载OnPaint只能画用户区.你应该重载WndProc,然后处理WM_NCCALCSIZE和WM_NCPAINT来重画非用户区.

注意: WM_NCCALCSIZE和WM_NCPAINT的处理是一个非常痛苦的过程.有时候我怀疑MS是不是故意把它弄得这么难
雪狼1234567 2003-08-23
  • 打赏
  • 举报
回复
这儿还有一个源代码,和样子示例:
http://www.c-sharpcorner.com/Code/2002/June/DevelopXPStyleApps.asp
greenhill1 2003-08-23
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2093/2093334.xml?temp=.1318781
雪狼1234567 2003-08-23
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/Read_Article.asp?Id=15086

http://www.ccw.com.cn/htm/center/prog/02_2_27_4.asp
加载更多回复(1)

110,524

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧