[问题点数:40分,结帖人stiff_neck]
等级
本版专家分:1283
结帖率 97.83%
想要在窗体右上角的最小键旁边添加一个按钮
没弄过,如何重绘?
谢谢。。X X
展开阅读全文
等级
本版专家分:5740
把原本得都隐藏起来、自己拖几个btn上去实现就行了
等级
本版专家分:3033
引用 1 楼vb763305825 的回复:把原本得都隐藏起来、自己拖几个btn上去实现就行了
这样没有问题.
等级
本版专家分:825
参考此帖
等级
本版专家分:1283
引用 1 楼vb763305825 的回复:把原本得都隐藏起来、自己拖几个btn上去实现就行了
隐藏按钮还是隐藏边框?
只是在自带的三个按钮旁边新增一个按钮,其他三个按钮应该不用变吧
在新增按钮的前提下,还要保持跟以前的窗体风格一致,该怎么做?
有没有具体一点的资料或代码,求帮忙
等级
本版专家分:1283
在线等。。。
等级
本版专家分:1283
在网上找到了一段窗体重绘代码,看不懂。。
谁能帮我解释一下,谢谢
DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
private const int WM_NCPAINT = 0x0085;
private const int WM_NCACTIVATE = 0x0086;
private const int WM_NCLBUTTONDOWN = 0x00A1;
protected override void WndProc(ref Message m)
br>base.WndProc(ref m);
Rectangle vRectangle = new Rectangle((Width - 75) / 2, 3, 75, 25);
switch (m.Msg)
br>case WM_NCPAINT:
case WM_NCACTIVATE:
IntPtr vHandle = GetWindowDC(m.HWnd);
Graphics vGraphics = Graphics.FromHdc(vHandle);
vGraphics.FillRectangle(new LinearGradientBrush(vRectangle,
Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal),
vRectangle);
StringFormat vStringFormat = new StringFormat();
vStringFormat.Alignment = StringAlignment.Center;
vStringFormat.LineAlignment = StringAlignment.Center;
vGraphics.DrawString("About", Font, Brushes.BlanchedAlmond,
vRectangle, vStringFormat);
vGraphics.Dispose();
ReleaseDC(m.HWnd, vHandle);
break;
case WM_NCLBUTTONDOWN:
Point vPoint = new Point((int)m.LParam);
vPoint.Offset(-Left, -Top);
if (vRectangle.Contains(vPoint))
MessageBox.Show(vPoint.ToString());
break;
br>br>
等级
本版专家分:5740
引用 6 楼stiff_neck 的回复:在网上找到了一段窗体重绘代码,看不懂。。
谁能帮我解释一下,谢谢
DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
private const int WM_NCPAINT = 0x0085;
private const int WM_NCACTIVATE = 0x0086;
private const int WM_NCLBUTTONDOWN = 0x00A1;
protected override void WndProc(ref Message m)
br>base.WndProc(ref m);
Rectangle vRectangle = new Rectangle((Width - 75) / 2, 3, 75, 25);
switch (m.Msg)
br>case WM_NCPAINT:
case WM_NCACTIVATE:
IntPtr vHandle = GetWindowDC(m.HWnd);
Graphics vGraphics = Graphics.FromHdc(vHandle);
vGraphics.FillRectangle(new LinearGradientBrush(vRectangle,
Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal),
vRectangle);
StringFormat vStringFormat = new StringFormat();
vStringFormat.Alignment = StringAlignment.Center;
vStringFormat.LineAlignment = StringAlignment.Center;
vGraphics.DrawString("About", Font, Brushes.BlanchedAlmond,
vRectangle, vStringFormat);
vGraphics.Dispose();
ReleaseDC(m.HWnd, vHandle);
break;
case WM_NCLBUTTONDOWN:
Point vPoint = new Point((int)m.LParam);
vPoint.Offset(-Left, -Top);
if (vRectangle.Contains(vPoint))
MessageBox.Show(vPoint.ToString());
break;
br>br>
重写WndProc、在绘制窗口的时候在顶层再画一个按钮、后面是根据拿到已经画好按钮的坐标、在坐标内触发click事件
这方法不是挺好的么,就用这个
等级
本版专家分:0
勋章
签到新秀累计签到获取,不积跬步,无以至千里,继续坚持!
匿名用户不能发表回复!