2012-11-07 59 views
1

我正在創建一個win32應用程序。在主窗口上有5個按鈕。每個按鈕前面都有一個小圓圈。 (使用GDI工具,如果是WM_PAINT)。現在當我按下一個按鈕時,它前面的圓圈應該以紅色着色。我怎樣才能做到這一點。在命令上創建或刪除GDI形狀

如果我們隨時創建一個編輯框,我們可以使用SendMessege來更改它上面的文本。像這樣可以改變之前繪製的形狀的顏色。

請有人給我一個建議。

case WM_PAINT: 
    { 
    PAINTSTRUCT ps; 
    HDC hDC; 
    HBRUSH brusha; 

    hDC=BeginPaint(hWnd,&ps);  
    brusha=CreateSolidBrush(RGB(0,255,0)); 
    SelectObject(hDC,brusha); 
    Ellipse(hDC, 20, 20, 50, 50); 
    DeleteObject(brusha); 
    EndPaint(hWnd, &ps); 
    } 

case WM_COMMAND: 
     switch(LOWORD(wParam)) 
     { 
      case BUTTON: 
      { 
      //here I need to change the above drawn corcle to be red. 
      } 
     } 
+0

很多方法可以做到這一點。你使用C++的語言是什麼? –

+0

@TonyHopkinson YES即時通訊使用C++。 –

+0

@TonyHopkinson所以請給我一個關於如何做這種事情的建議。 –

回答

1

您無法更改已繪製圖像的顏色,但可以重繪它。使用Windows功能InvalidateRect告訴控件它需要重畫,並且你會得到另一個電話給你的WM_PAINT處理程序。在繪製您的圓圈之前,在處理程序中選擇所需的顏色。

+0

我在上面添加了我的代碼。可以ü請教我如何將此代碼添加到上述代碼 –

+0

@LakshanPerera中,使變量包含當前顏色。將顏色初始化爲綠色。在'WM_COMMAND'處理程序中設置變量爲紅色,然後調用'InvalidateRect'。 –

+0

@MarkRanson在上面的代碼中,我添加了這行'brusha = CreateSolidBrush(RGB(255,0,0)); InvalidateRect(hWnd,NULL,false);'編譯時沒有錯誤。但是當按鈕點擊時沒有任何反應。 –