`

用 Win API 实现自绘按钮类

阅读更多

本文示例源代码或素材下载

  俗话说佛要金装、人要衣装,作软件的当然得要个好界面啦^_^。网上提供的控件自绘基本上是MFC或WTL封装好的类,对于不想用MFC的人来说是一无是处的,我可是WIN32API的坚决拥护者。因为MFC等也是用WIN32API封装起来的,学好了WIN32API,可以深入的了解WINDOWS内部的机制,编写出来的程序才能得到更好的优化。

  下面分析一下自绘按钮的原理,用过MFC自绘按钮的人都知道,是通过重载了父窗口WM_DRAWITEM的响应消息实现的。同时也要子类化按钮来得到按钮的其他有用的消息,比如WM_MOUSEMOVE、WM_KEYDOWN等消息。因为MFC的消息循环都是封装好的,所以只要派生一下基本控件类就可以了。当是用WIN32API做的话就需要自己来子类化按钮窗口的消息循环了,相信经常编程的朋友都知道,子类化控件要用到SetWindowLong来改变窗口的回调过程,然后在回调窗口内添上自己需要处理的消息即可。因为我们要实现自绘按钮所以最好把子类化的过程做成一个类,然后传给它要自绘的按钮句柄就行了。因为要在类里面实现消息回调函数,但是类里面的消息回调函数只能是静态的,所以不能对应每个实例的消息回调。在我实现的按钮子类化类里,我用到Thunk技术或SetProp函数来实现的,具体请网上查找。

  下面我来谈谈自绘按钮里最重要的部分,就是响应按钮消息函数里的WM_PAINT消息,我们所有的自绘动作都在这里进行的。WM_PAINT里的绘图操作与普通窗口的操作一样,但是为了跟踪按钮的当前状态,我们还要响应按钮窗口的WM_MOUSEMOVE、WM_SETFOCUS、WM_KILLFOCUS、WM_LBUTTONDOWN、WM_ENABLE等消息来得到当前按钮的状态。从而在WM_PAINT里面绘出不同的状态,能实现的东西很多可以说你想多少基本就能实现多少^_^,看个人喜好了,我提供源代码大家可以自行修改。我也是参看了ButtonST里面自绘的代码,我自己添加了右键拖动功能,鼠标掠过发生功能大家有兴趣可以自己添加,锻炼一下自己的编程能力^_^。

分享到:
评论

相关推荐

    VC中利用Win API实现自绘按钮类

    在本文中,我们将探讨如何使用Windows API在VC++中实现自绘按钮类,而不依赖MFC(Microsoft Foundation Classes)或其他高级库如WTL(Windows Template Library)。 首先,自绘按钮的核心是通过子类化窗口过程来...

    商业编程-源码-用 Win API 实现自绘按钮类.zip

    商业编程-源码-用 Win API 实现自绘按钮类.zip

    WINSHOW.rar_win_win32 控件_回调函数_子类化_按钮类

    用 Win API 实现自绘按钮类 用过MFC自绘按钮的人都知道,是通过重载了父窗口WM_DRAWITEM的响应消息实现的。同时也要子类化按钮来得到按钮的其他有用的消息,比如WM_MOUSEMOVE、WM_KEYDOWN等消息。因为MFC的消息循环...

    WINSHOW.rar_API_WIN API_winshow_按钮_按钮类

    在本例中,"WINSHOW.rar"包含了一个名为"API_WIN API_winshow_按钮_按钮类"的项目,这显然与自定义和增强Windows按钮的显示效果有关。 按钮在GUI(图形用户界面)中扮演着至关重要的角色,它们通常用于响应用户的...

    win32 API制作美观按钮 按钮效果(win32编程).zip

    使用win32 API制作美观按钮,当鼠标移入/移出按钮时改变按钮背景颜色,类似HTML网页中的效果,告别win32 API编程中默认的灰色按钮,效果图见下面动图和视频。详细说明见...

    win32环境下的按钮重绘

    "win32环境下的按钮重绘"是指利用Win32 API(应用程序接口)来改变默认按钮的显示样式,实现独特的视觉效果。本文将深入探讨如何在Win32环境下实现按钮的自定义重绘。 首先,理解Win32 API的基本概念至关重要。它是...

    Windows CE下自绘位图按钮(6410实践可用完整工程)

    要深入理解和应用自绘按钮技术,你需要熟悉Windows CE的API,如GDI(Graphics Device Interface)绘图函数,以及窗口和消息处理的基本概念。此外,了解TINY6410的硬件特性以及如何与之交互也是必要的。 总结,自绘...

    C语言 Windows程序设计,使用GDI自绘按钮、编辑框、贴图小练习

    C语言 Windows程序设计,使用GDI自绘按钮,编辑框,贴图小练习。 这些雕虫小技,在VB里面不知道有多少的简单。 在这里用C语言来写,是这么麻烦,这么麻烦。 真不知道有什么好处? 正事不干,专们喜欢干这种鸟事,...

    基于WIN api 的窗口及按钮控制实例

    至于“纯API自绘按钮”,这意味着开发者不依赖Windows提供的默认控件绘制机制,而是手动实现按钮的绘制和行为。这通常涉及到`WM_PAINT`消息的处理,以及使用`BeginPaint`、`EndPaint`、`FillRect`等函数进行画布填充...

    XP-Button.rar_按钮_自绘按钮

    "XP-Button.rar_按钮_自绘按钮"的压缩包内容可能包含了一个实现这一特性的C++类库,可能是作者针对原有的自绘按钮类进行了一些改进,以提高性能、兼容性或添加新的功能。 自绘按钮的核心在于重写窗口的消息处理函数...

    MFC自绘按钮(Button)的dll加源码,也可以直接调用此dll创建自己的自定义按钮

    自绘按钮的关键在于使用CDC(设备上下文)类来控制绘图操作,包括设置颜色、线条样式、文本属性等,通过DrawText()、MoveTo()、LineTo()等函数进行绘制。 在这个压缩包中,"自绘按钮动态库加源代码"可能包含了以下...

    Win32——创建美观的按钮控件

    本资源包含源代码以及位图资源 创建位图按钮、MFC样式的按钮 主要用于博文的资源下载,博文地址: http://blog.csdn.net/crocodile__/article/details/10237943

    WIN32API功能150个(屏幕篇).rar

    实际上,WIN32API涉及的内容远不止这些,还包括窗口类的定义、消息处理、系统资源管理、内存管理等多个方面。对于想要深入学习Windows桌面应用程序开发的程序员来说,理解和掌握WIN32API是至关重要的一步。通过这个...

    XP 风格 的 自绘 按钮 (VC++)

    在VC++环境下,开发者可以利用Microsoft Visual C++的MFC(Microsoft Foundation Classes)库或者Win32 API来实现自定义绘制这种风格的按钮。 首先,我们要理解MFC中的CButton类。这个类是MFC为标准Windows控件按钮...

    WIN32 api 实现音乐播放器

    使用C++和WIN32 API,我们可以创建窗口、按钮、滑块等控件来构建播放器的界面。`CreateWindowEx()`函数用于创建窗口,而`CreateWindow()`用于创建控件。例如,创建播放/暂停按钮,我们需要定义按钮的类、ID,然后在...

    win32字母按钮 菱形按钮

    在Win32 API中,可以通过创建一个带有指定文本的`CreateWindowEx`函数来实现这样的按钮,并通过`SetWindowText`函数设置按钮上的文字。 接下来,我们讨论如何实现“菱形按钮”。在标准的Win32 API中,按钮默认为...

    win32 api的方式 直接绘制按钮。(不是MFC)

    具体实现时,首先需要定义一个窗口类,设置窗口过程,然后在窗口过程里处理WM_PAINT消息,使用前面提到的API绘制按钮的背景、边框和文字。在处理WM_ERASEBKGND时返回TRUE,表明已处理背景,避免系统默认的清除操作。...

    Win32 api实现多用户聊天室(链表管理)

    7. **用户界面(UI)设计**: 使用Win32 API创建用户界面,包括聊天窗口、输入框、按钮等元素。UI设计需要考虑到易用性和响应性,确保用户可以方便地输入和查看聊天内容。 8. **安全性与错误处理**: 任何网络应用都...

Global site tag (gtag.js) - Google Analytics