1 创建一个窗体项目(本项目是在VS2015中进行创建)2 将窗体的FormBorderStyle属性设置为None,设置后窗体的标题栏将消失不显示3 添加2个panel空间,如下图布置,上面一个panel作为标题栏,下面一个panel作为窗体内容显示区4 添加3个pictureBox空间,作为最大化、最小化、关闭按钮的容器
本片博客主要讲的事最近总结的一些关于 窗体 自定义 : 1.首先创建一个BaseForm 窗体 ,通过设置属性FormBorderStyle=None为无边框 窗体 ,代码如下:  public partial class BaseForm : Form         // 图片名称         public const String IMG_MIN = "btn_min";
C# 移动无标题栏 窗体 的三种代码:第一种采用,需注意 窗体 上的控件是否把 窗体 覆盖了。。。MouseDown、MouseMove、MouseUp事件应该是鼠标所处位置最顶层的控件的事件 在 窗体 的类中声明两个变量 private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 创建该 窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) int xOffset; int yOffset; if (e.Button == MouseButtons.Left) xOffset = -e.X ; yOffset = -e.Y ; mouseOffset = new Point(xOffset, yOffset); isMouseDown = true; private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) if (isMouseDown) Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); Location = mousePos; private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动 窗体 if (e.Button == MouseButtons.Left) isMouseDown = false; 第二种调用API 未验证 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; private void Form1_MouseDown(object sender, MouseEventArgs e) ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); 第三种未验证 private bool isMouseDown = false; private Point FormLocation; //form的location private Point mouseOffset; //鼠标的按下位置 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息 private const int SC_MOVE = 0xF010;//移动信息 private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息 private const int WM_NCHITTEST = 0x84;//鼠标在 窗体 客户区(除了标题栏和边框以外的部分)时发送的消息 private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息 private const int SC_MAXIMIZE = 0xF030;// 最大化 信息 private const int SC_MINIMIZE = 0xF020;// 最小化 信息 protected override void WndProc(ref Message m) switch (m.Msg) case WM_SYSCOMMAND: if (m.WParam == (IntPtr)SC_MAXIMIZE) m.WParam = (IntPtr)SC_MINIMIZE; break; case WM_NCHITTEST: //如果鼠标移动或单击 base.WndProc(ref m);//调用基类的窗口过程——WndProc方法处理这个消息 if (m.Result == (IntPtr)HTCLIENT)//如果返回的是HTCLIENT m.Result = (IntPtr)HTCAPTION;//把它改为HTCAPTION return;//直接返回退出方法 break; base.WndProc(ref m);//如果不是鼠标移动或单击消息就调用基类的窗口过程进行处理 private void Form1_Load(object sender, EventArgs e) ------------------------------- 如何在 窗体 标题栏左边的控制菜单加入自己的菜单啊? 我们一般在窗口标题栏点右键 或 按Alt+空格 可以弹出那个菜单。 ------解决方案-------------------- using System.Runtime.InteropServices; [DllImport( "user32.dll ")] public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport( "user32.dll ")] public static extern bool InsertMenu(IntPtr hMenu, uint uPosition, uint uFlags, uint uIDNewItem, string lpNewItem); public const int MF_BYCOMMAND = 0; public const int MF_STRING = 0; public const int MF_BYPOSITION = 0x400; public const int MF_SEPARATOR = 0x800; private const uint SC_ABOUT = 0x0001; public const int WM_SYSCOMMAND = 0x0112; private void Form1_Load(object sender, EventArgs e) IntPtr vMenuHandle = GetSystemMenu(Handle, false); InsertMenu(vMenuHandle, 255, MF_STRING, SC_ABOUT, "About... "); protected override void WndProc(ref Message m) switch (m.Msg) case WM_SYSCOMMAND: if ((uint)m.WParam == SC_ABOUT) MessageBox.Show( "Zswang 路过! "); break; base.WndProc(ref m);
应用中会涉及到对 最大化 最小化 关闭 按钮 三种 按钮 的控制方法,下面一次说明对这三种 按钮 的控制方法. 最大化 :MaximizeBox, 最小化 :MinimizeBox。 如果设置一个为False 的时候会显示不可用,两个都设置为False 的时候,两个 按钮 同时消失。 关闭 按钮 没有设置不可用 但是它有一个ControlBox属性,设置为False 的时候 最小化 最大化 关闭 按钮 都会消失。 设置对窗口大小不能调整 找到【FormBorderStyle】选项,在选项列表中选择【FixedDialog】,这样就可以固
要实现 窗体 化动态UI,可以采用以下步骤: 1. 创建一个Windows 窗体 应用程序,打开 Visual Studio 并选择“新建项目”,选择“Windows 窗体 应用程序”。 2. 在 窗体 上添加控件,例如文本框、 按钮 和标签,并设置其属性。 3. 为 窗体 和控件添加事件处理程序,例如单击 按钮 时执行的代码。 4. 创建动态UI的动画效果。可以使用.NET框架中的System.Drawing和System.Windows.Forms命名空间提供的类来实现。 5. 在 窗体 加载时启动动画效果,并在需要时停止动画效果。 6. 调整UI控件的布局和样式,以使其符合预期的设计要求。 7. 最后,运行应用程序并测试动态UI的效果。 下面是一个简单的例子,演示了如何实现一个动态图标的动画效果: ```csharp using System.Drawing; using System.Windows.Forms; namespace DynamicUIExample public partial class MainForm : Form private Timer timer; private int angle = 0; public MainForm() InitializeComponent(); timer = new Timer(); timer.Interval = 100; timer.Tick += Timer_Tick; private void Timer_Tick(object sender, System.EventArgs e) angle += 10; pictureBox1.Image = RotateImage(Properties.Resources.icon, angle); private Image RotateImage(Image image, float angle) Bitmap rotatedImage = new Bitmap(image.Width, image.Height); rotatedImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); Graphics graphics = Graphics.FromImage(rotatedImage); graphics.TranslateTransform(image.Width / 2, image.Height / 2); graphics.RotateTransform(angle); graphics.TranslateTransform(-image.Width / 2, -image.Height / 2); graphics.DrawImage(image, new Point(0, 0)); return rotatedImage; private void MainForm_Load(object sender, System.EventArgs e) timer.Start(); private void btnStop_Click(object sender, System.EventArgs e) timer.Stop(); private void btnStart_Click(object sender, System.EventArgs e) timer.Start(); 在上面的代码中,我们创建了一个Windows 窗体 应用程序,添加了一个PictureBox控件和两个 按钮 。在 窗体 加载时,我们启动了一个计时器,定期更新图标的旋转角度,并使用RotateImage方法来旋转实际的图标。当单击“停止” 按钮 时,我们停止计时器。当单击“开始” 按钮 时,我们重新启动计时器。
RealTimePlot = new QCustomPlot; RealTimeLay = new QVBoxLayout; RealTimer = new QTimer(this); RTBtn = new QPushButton("Button"); connect(RTBtn, SIGNAL(clicked()), this, SLOT(on_RTBtn())); connect(RealTimer, SIGNAL(timeout()), this, SLOT(RealTimeout())); RealTimeLay->addWidget(RTBtn); RealTimeLay->addWidget(RealTimePlot); ui->tab->setLayout(RealTimeLay); LoadRealTimeChart(); RealTimer->start(50); void Widget::RealTimeout() static int i = 0; double xData, yData; xData = i; yData = 5 * cos(i); if(i >= 100) RealTimePlot->xAxis->setRange(i - 100, i); RealTimePlot->graph(0)->addData(xData, yData); RealTimePlot->replot(); qDebug() << QDateTime::currentDateTime().toString("yyyy-mm-dd hh:mm:ss.zzz"); [/code] Qt使用QCustomPlot绘制实时曲线 初896: 链接打不开了 这个范围是在定时器的槽函数中进行更新的那个范围嘛 Qt使用QCustomPlot绘制实时曲线 ALONE_WORK: 这个范围应该不是固定的,可以先看看源码 Qt使用QCustomPlot绘制实时曲线 初896: 我这块 设置的customPlot->xAxis->setRange(0,1000) 这个范围都没有效果