2009-11-12 76 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,但您可以使用它來了解您需要調用什麼順序才能獲得所需的效果。