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

时间:2009-11-12 14:53:26

标签: api visual-c++ winapi

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

3 个答案:

答案 0 :(得分:3)

按钮是窗户。您可以使用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

这将告诉按钮将WM_DRAWITEM消息发送到按钮'WNDPROC:

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

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

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

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

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

希望有所帮助。

答案 1 :(得分:0)

您可以谷歌使用内存DC和各种ROP2设置查找BitBlting图像的技术,以实现屏蔽效果。表示按钮的圆形图像将使用特定颜色来表示透明度。我手边没有具体的代码,但这并非易事。

答案 2 :(得分:0)

您需要知道的关键API呼叫是SetWindowRgn。这就是你打电话告诉窗户窗口不是矩形而是不规则区域。如果你四处搜索,你会发现很多示例代码。

一个有希望的例子是this project。它确实依赖于MFC,但您可以使用它来了解您需要以什么顺序调用以获得所需效果。