2009-11-12 110 views
4

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

+2

较新的一个被关闭为精确重复。这一个应该不应该因为欺骗原因而关闭。 – 2009-11-12 15:51:39

+0

Ravi,你是说你的主窗口是皮肤窗户吗?这与如何绘制圆形按钮有关? – AlanKley 2010-09-25 02:04:01

回答

0

你可以谷歌找到BitBlting图像技术使用内存DC和各种ROP2设置来实现掩蔽效果。表示按钮的圆形图像将使用特定的颜色来表示透明度。我手边没有特定的代码,但它不是微不足道的。

2

按钮是窗口。你可以创建一个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/l (v = VS.85).aspx

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

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

我可能在上面的解释中混合了黑/白或置位/置位位,但AND/OR按位(SRCAND/SRCPAINT)光栅操作对于您尝试达到的操作而言是正确的操作。

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

希望有所帮助。

0

您需要知道的关键api电话是SetWindowRgn。这就是你所说的告诉窗口,窗口不是矩形而是不规则的区域。如果你周围的谷歌,你会发现很多示例代码。

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