2012-11-01 47 views
0

我對win32api編程非常陌生。我有3個問題。在父窗口中更改背景顏色

如何更改父窗口中的背景顏色。我做它作爲folows但它不工作

wClass.hbrBackground=(HBRUSH)(RGB(255,255,255)); 

第二個問題是,我用來在窗口中添加文本如下。該文本是粗體字和背景顏色。我希望文字處於正常狀態並且沒有背景顏色。

PAINTSTRUCT ps; 
    HDC hDC; 
    char szBuffer[]="Hello, World!"; 
    hDC=BeginPaint(hWnd,&ps); 
    TextOut(hDC,10,10,szBuffer,strlen(szBuffer)); 

第三個問題是如何在父窗口中添加組框。我在互聯網上搜索它,但這是描述如何使用資源在對話框中添加組框。 請有人幫助我與這些isue ...

+0

你的背景圖應該在繪圖時完成。 – chris

+0

@chris我在定義windows類時添加了代碼。它沒有工作。我添加它在WM_PAINT它也沒有工作。你能清楚地解釋我應該在哪裏添加代碼和正確的語法 – lakshitha

+0

啊,我以爲你在創建該類之後改變了它的成員。你可以使用(IIRC)'wClass.hbrBackground = reinterpret_cast (COLOR_WINDOW + 1);'白色。 – chris

回答

0
  1. > wClass.hbrBackground =(HBRUSH)(RGB(255,255,255));

我想這個類的結構要求刷柄,而不是顏色值本身(但我不知道)。事情是這樣的:

wClass.hbrBackground=(HBRUSH)(CreateSolidBrush(RGB(255,255,255))); 
  1. 要使文本背景透明使用特殊WinAPI的功能,SetBkMode(TRANSPARENT); (哦,花點時間記住它的名字:))。

  2. 在大多數任務中,創建對話框資源並將其用作普通窗口(繪製平滑窗口,放置簡單窗口等等)比使用普通窗口並嘗試添加它要好得多對話框控件。從WinForms和WPF開始,這已經成爲一種常見的做法 - 它們中的每個窗口都是一個「表單」,您可以在其中添加控件,在其中繪製等等。

+0

很好的答案......謝謝。這個答案回覆了我不得不面對的所有問題。再次感謝.. :) – lakshitha

+0

對不起,但不會導致內存泄漏?據我所知,'CreateSolidBrush()'總是需要一個DeleteObject()調用來清理它。你能向我解釋一下嗎? – 2013-01-20 20:26:52

0

我想記住,如果微軟把代碼清除客戶區。我知道至少,你可以得到客戶端矩陣,然後使用它將drawRect()命令建立到整個客戶區。您也可能不得不捕捉命令以清除背景

+0

我認爲應該有一種方法給背景添加顏色。如果我繪製一個矩形,可以在矩形上繪製其他的矩形,我會嘗試。 enyway謝謝 – lakshitha

+0

當然!元素按照代碼中的順序繪製。 Windows窗口的客戶區基本上是一個位圖對象。您將永久替換每個像素處的顏色。因此,繪製另一個對象只是將這些位置上的像素更改爲另一種顏色 –

+1

course of ...這是做的伎倆......謝謝。 – lakshitha