api - 如何使用visual c++在win32 API中创建圆形/圆形按钮

标签 api visual-c++ winapi

我在 Visual C++ 中有一个 Window (win32 API) 应用程序。我没有使用 MFC。我必须用位图图像创建一个圆形/圆形按钮。我的应用程序有一个皮肤 View 。任何人都可以帮助我完成这项任务。提前致谢。

最佳答案

按钮是窗口。您可以使用 CreateWindow 或 CreateWindowEx 调用创建按钮:

-http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

创建按钮窗口时,请确保传递 BS_OWNDERDRAW 样式:

-http://msdn.microsoft.com/en-us/library/bb775951(VS.85).aspx

这将告诉按钮向按钮的 WNDPROC 发送 WM_DRAWITEM 消息:

-http://msdn.microsoft.com/en-us/library/bb775923(v=VS.85).aspx

在按钮的 WNDPROC 中,您将处理 WM_DRAWITEM 消息并根据在 lParam 中作为指针接收的 DRAWITEMSTRUCT 中的信息绘制按钮。

要将位图渲染为除矩形之外的任何内容,您需要提供与您希望为按钮渲染的位图大小相同的 1 位位掩码位图。位掩码设置了您希望在屏幕上设置按钮位图中像素的位。按钮位图中不显示的像素必须是黑色的。使用 AND 运算符将您的位掩码位图 Bitblt 到屏幕,然后 OR 您的按钮位图。当然,您需要考虑各种按钮状态(通常一个按钮只有两种状态。)

我可能在上面的解释中混合了黑/白或设置/未设置位,但 AND/OR 按位 (SRCAND/SRCPAINT) 光栅操作是您想要实现的正确操作。

-http://msdn.microsoft.com/en-us/library/aa930997.aspx

希望有帮助。

关于api - 如何使用visual c++在win32 API中创建圆形/圆形按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1722750/

相关文章:

java - 如何使用twitter4j在java中获取1个json对象?

android - 在 Android 上获取相机信息的 API

android - YouTube iframe 不适用于三星 S2 I9100G

c++ - 如何使用非平凡构造函数初始化静态类成员?

c++ - 删除参数中包含字符串的文件

c++ - WinAPI 函数 Hook 以捕获网络

api - 对实体/资源进行 RESTful API 授权?

c++ - 是否可以在保持 RTTI 启用的情况下从可执行文件中删除类型名称?

c++ - BSTR 中是否有 Unicode 符号?

c++ - 在 C++ 中使用 IFileDialog 以编程方式预选择