我有一个使用Visual C++编写的Window(Win32 API)应用程序,没有使用MFC。 我需要创建一个带有位图图像的圆形按钮。我的应用程序具有皮肤视图。 有人可以帮我完成这个任务吗?
我有一个使用Visual C++编写的Window(Win32 API)应用程序,没有使用MFC。 我需要创建一个带有位图图像的圆形按钮。我的应用程序具有皮肤视图。 有人可以帮我完成这个任务吗?
-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运算符将您的掩码位图位块传输到屏幕上,然后将OR应用于按钮位图。当然,您需要考虑各种按钮状态(通常推按钮只有两种状态)。
我可能混淆了解释中的黑/白或设置/未设置位,但AND / OR按位(SRCAND / SRCPAINT)光栅操作是您要实现的正确操作。
-http://msdn.microsoft.com/en-us/library/aa930997.aspx
希望这可以帮助您。
您可以通过谷歌搜索使用内存DC和各种ROP2设置的BitBlting图像技术来实现遮罩效果。代表按钮的圆形图像将使用特定颜色表示透明度。我手头没有具体的代码,但这并不是一件简单的事情。
你需要知道的关键API调用是SetWindowRgn
。这是告诉Windows窗口不是矩形而是不规则区域的调用。如果你在谷歌上搜索,你会发现很多示例代码。
一个有前途的例子是this project。它确实依赖于MFC,但你可以使用它来学习你需要以什么顺序调用来获得所需效果。