摘要 windows桌面应用程序都有标准的标题栏和边框,大部分程序也默认使用这些样式,一些对视觉效果要求较高的程序,如QQ, MSN,迅雷等聊天工具的样式则与传统的windows程序大不相同,其中迅雷还将他们的BOLT界面引擎开放,使得大家也可以创建类似迅雷一样的界面.那么这些软件的界面是怎样实现的呢,使用C#是否也可以实现类似界面? 重绘方式 常见的自定义标题栏和边框的方式有两种,一种是隐藏标题栏和边框(称为非客户区),然后在客户区(可以放置控件的空间)使用一些常用的控件和图片来表示边框,这种…
核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写WM_ERASEBKGND消息的效率更高一些,所以还是推荐使用这种方法. (2)声明重绘背景消息响应函数 void fastcall OnWMEraseBkgnd(TWMEraseBkgnd& Msg);  (3)添加消息映射 BEGIN_MESSAGE_MAP //拦截重画背景的事件 MESSAGE…
本文转载自:http://www.cnblogs.com/encoding/p/5603080.html 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还要来个序 其实,很多年没写过Winform了,前端时间在重构我们公司自己的呼叫中心系统,突然就觉得客户端好丑好丑,对于我这种强迫症晚期患者来说,界面不好看都不知道怎么写代码的,简直就是种折磨,还是满清十大酷刑级别那种. 很多人推荐WPF,不过个人对WPF没啥感觉,而且据说也无法支持2.0,还是采用W…
技术:Windows 系统+Visual studio 2008   概述 应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现.对用户而言,界面就是应用程序,界面设计的好坏,会直接影响应用程序的可用性,从而影响用户的体验. 在软件开发过程中,对界面的设计椅子都是一项很重要的技术,如今的应用软件界面可谓是“丰富多彩.美丽绝伦”,如大家熟悉的360安全卫士.腾讯QQ聊天软件.Visual C++ 编程词典软件等,都是非常不同于普通的对话框…
当编写一个典型的Windows 窗体程序时,窗体和控件的绘制.效果等操作是不需要特别加以考虑的.这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件相关联的代码然后在IDE中按F5,一个完完全全的窗体程序就诞生了!所有控件都将自己绘制自己,窗体或者控件的大小和缩放都调整自如.在这里经常会用到的,且需要引起一点注意的就是控件效果.游戏,自定义图表控件以及屏幕保护程序的编写会需要程序员额外撰写用于响应 Paint 事件的代码. 本文针对那些Wind…
一个常规的windows窗体一般都是一些一样的构造.你假设想要更改一些个性化的设置,你能够在这个一般的模板伤添砖加瓦.构造自己比較喜欢的类型.下边就分析一下一般的windows窗体的一般模板. 一. 首先看一下一般的windows窗体都包括什么框架(NO picture you say a J8.....上图上图)例如以下(罗云斌win32汇编书中92页的一张图): 该图简单的描写叙述了一个主要的窗体的框架. 下图是我们分析的第一个窗体的执行演示样例截图: 这个窗体较为简单.可是包括了窗体的基本…
之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望这篇文章可以帮你解惑. 1.Windows窗体原理 首先,如果看过Win32 SDK编程的都知道Windows的三大核心系统:负责窗口对象产生和消息分发的USER模块,负责图像显示绘制的GDI模块,负责内存.进程.IO管理的KERNEL模块.试想象一下如何在一个像素阵列上产生窗口对象,其实就是使用G…
c#winform自定义窗体,重绘标题栏 虽然现在都在说winform窗体太丑了,但是我也能尽量让桌面应用程序漂亮那么一点点话不多说,先上图 重绘标题栏先将原生窗体设置成无边框,FormBoderStyle设置成None然后添加一个panpel控件设置成窗体的的标题栏 然后添加四个Label控件充当标题和最小化最大化关闭按钮.此时界面的原型就出来了. 完善窗体当然原型出来了,肯定会让其它窗体继承这个窗体,难点就在于怎么让子窗体标题实时更新标题,我是这样做的重写(override)j基类窗体的Te…
据说得有楔子 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧).                   还要来个序 其实,很多年没写过Winform了,前端时间在重构我们公司自己的呼叫中心系统,突然就觉得客户端好丑好丑,对于我这种强迫症晚期患者来说,界面不好看都不知道怎么写代码的,简直就是种折磨,还是满清十大酷刑级别那种. 很多人推荐WPF,不过个人对WPF没啥感觉,而且据说也无法支持2.0,还是采用Winform技术来搞吧. 终于第一节 做Winform皮…
/// <summary> /// 可显示Gif 的窗体 /// </summary> public class WinGif : Form { private Image _img = null; public Image Img { get { return _img; } set { _img = value; } } private EventHandler evtHandler = null; public WinGif(Image img) { //初始化设置 evtH…
原文:在WPF窗体中重绘   写这篇主要是为了验证任何元素自身都具备绘图功能. 在默认Window中重写OnRender方法 protected override void OnRender(DrawingContext drawingContext) { drawingContext.DrawRectangle(Brushes.White, null, new Rect(0, 0, this.ActualWidth, ActualHeight)); drawingContext.DrawRec…
很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下来,从模块设计开始吧,winform自带控件和DevExpress控件用起来布局实在太难看了.算了,从低做起吧.接着6-7年前的玩转控件系列开始,工欲善其事必先利其器!利器备好,框架搭建完毕,模块设计就是拖控件而已! Talk is Cheap,Show me the Code! 首先,项目中新建一个窗体(用…
先来看提示框,可以看到框其实是一个去掉最大化.最小化按钮后的窗体,窗体的内容就是我们想要提示的内容,重绘提示框其实就是重绘窗体以及中间部分的内容. 首先重绘窗体,消息提示框的窗体不是XtraForm而是XtraMessageBoxForm,重写CreateFormBorderPainter()方法. internal class MessageBoxForm : XtraMessageBoxForm { protected override FormPainter CreateFormBorde…
最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是标题,不是工作区域.) 最开始用到TabControl的时候,我的每个选项卡是写死的,而后由于项目需求又动态添加了TabControl并生成各个选项卡,而两次我都要重绘其标题,因此在这里把我当时两种情形下重绘的方法通过一个例子一起分享出来. 首先先在窗体拖个Tabcontrol控件,然后更改了其Al…
在上一篇随笔中,添加关闭按钮是可以实现 ,但细心一点就会发现,每次关闭一个选项卡,tableControl都会自动跳到第一个页面,显然 这不是我们想要的,为此,我修改了部分的代码.除此之外,我还添加了一些两个新的方法,用于创建新的tablePage.以下是我实现 的类 #region 重绘tablecontrol的类(添加关闭页面功能),ablepage的创建,以及窗体的附加 public class DrawTabControl { TabControl tabControl1 = null;…
C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param name="tabcontrol">TacControl控件</param> /// <param name="fo">主程序this.Font</param> DrawTabControl dtc=new DrawTabCont…
本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 封面图片为野比原创,请勿未经允许私自引用 #1-1 嗯,各位,又是我,生物钟颠倒的家伙. 今天我要山寨的是大名鼎鼎的Apple,传说中的「被山寨之王」. 没错,都被我山寨好几次了. 说起Apple,相信大家对他家的各种产品,不管他软还是硬,都有相当的好感. 最近Apple把自家的Web浏览器Safa…
本文系转载学习. 对于关注对 Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说,事件引发的顺序特别重要.当某种情况需要小心处理事件时(如重绘窗体的某些部分时),必须知道事件在运行时的确切引发顺序.本文提供了一些有关在应用程序和控件的生命周期中的几个重要阶段中的事件顺序的详细信息. 对于验证这些事件的激发顺序有一个很简单的方法,就是创建这些事件的处理函数,即使什么事情都不做.然后在每个函数的入口处设置断点,对程序进行调试运行,看到达断点顺序就可以了. 当 Windows 窗…
一.概述 µC/GUI的窗口重绘是学习者理解窗口工作原理和应用窗口操作的重点.µC/GUI的窗口重绘引入了回调机制,回调机制可以实现图形系统调用用户的代码,由于图形系统使用了剪切算法,使得屏幕重绘的效率和重绘的操作都大大提高.本文主要分析µC/GUI重绘窗口的过程,使学习者理解窗口的回调机制,为进一步的应用窗口操作打下一个好的基础. 回调机制后面的哲学 µC/GUI 为窗口和窗口对象(控件)提供的回调机制实质是一个事件驱动系统.正如在大多数视窗系统中一样,原则是控制流程不只是从用户程序到图形系统…
Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后, 通知所有视图作相应的改变, 和重画毫无关系. Invalidate()是使窗口无效,使系统向其发WM_PAINT消息,使的程序的OnPaint被调用重画客户区. 而UpdateAllViews()是文档与视之间的联系,调用从它会使程序与此文档相关的所有视的UpdateView被调用至于是否重画以…
来自:https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/order-of-events-in-windows-forms 对于依次处理其中每个事件的开发人员,Windows 窗体应用程序中引发事件的顺序非常具有吸引力. 当出现需要谨慎处理事件的情况时(例如,在重绘窗体的某些部件时),有必要了解运行时引发事件的确切顺序. 本主题提供了应用程序和控件的生存期中几个重要阶段中的事件顺序的详细信息. 有关鼠标输入事件的顺序的特定详细信息…
#include <windows.h> #include <mmsystem.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //声名消息处理函数(处理windows和接收windows消息) //hInstance:系统为窗口分配的实例号,2和3忘了.4是显示方式 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCm…
// ====================Windows重绘消息与函数========================== 得到桌面窗口的句柄,然后再绘图HWND GetDesktopWindow(VOID); 当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息对窗口进行重新绘制. Invalidate()是强制系统进行重画,但是不一定就马上进行重画.因为Invalidate()只是通知系统,此 时的窗口已经变为无效.强制系统调用WM_PAINT,而这个消息只是Post就…
c可以编译#include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInstance, LPSTR lpCommandLine, int cmdShow) { CHAR* cln = "…
C#重绘TabControl的Tabpage标签,添加图片及关闭按钮 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;…
Windows窗口消息大全,全不全自己撸 通用窗口消息 WM_NULL:--------->空消息,可检测程序是否有响应等 WM_CREATE:--------->新建一个窗口 WM_DESTROY:--------->销毁一个窗口 WM_MOVE:--------->移动一个窗口 WM_SIZE:--------->改变一个窗口的大小 WM_ACTIVATE:--------->一个窗口被激活或失去激活状态 WM_SETFOCUS:--------->将焦点转向…
重绘目的: 1. 满足非默认主题下的标题栏样式 2. 在保留停靠功能的同时进行重绘. 代码如下: public partial class FormEx: Form { public FormEx() { InitializeComponent(); TitleBar.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(TitleBar, tru…
GitHub 谁方便谁拍,谁重要拍谁.在这个砖头满天飞的时代,一个好的生态显得尤为重要.  红颜小头发,要的很简单. 也许成绝唱,只因鱼断肠. 姚贝福娃的离去,除感叹人生无常外,活着做点有意义的事情,就显得更为重要. 数年前为学习人工智能,写了围棋程序,却发现其难度超出了我的想象.特将其放到 GitHub 上,希望有人斧正.注意,是斧正,而非小修小改. 调整重绘 窗口大小改变时,棋盘也要作相应的重绘.这个比较简单,我的方法是把 BoardBase 类中的 m_sbSteps 字段改成 publi…
同样是,重绘边框事件,win7系统显示正常,而xp系统却不显示,这是什么原因造成的呢? 于是,小编开始百度,不停的查找原因,通过一番查找,小编也意外的收获了一些内容: 例如:窗口的拖动,放大,缩小,等,都会重新触发paint重绘事件.那么,什么原因会影响重绘的不显示呢? 最后发现,页面上重写的CreateParams方法(原本是为了解决窗体闪烁的问题),影响了重绘边框的显示.…
TListView 的 Header 部分默认 BtnFace 颜色,高度也不能改变.我们可以通过编写一些代码来实现这些功能: 获得TListView 的Header 的句柄: TListView的Header其实是一个 HeaderContorl 控件.要获得他的句柄需要调用下面的代码 //--------------------------------------------------------------------------- #include <vcl.h> #pragma h…