1. 程式人生 > >VC在對話方塊中畫圖

VC在對話方塊中畫圖

        如果我們只想在某個空間視窗內繪圖的話,則應避免重複繪製對話方塊元素。如果只想顯示一些文字,我們可以利用對話方塊編輯器來建立一個具有特殊ID的空靜態控制元件,然後在對話方塊的成員函式中呼叫CWnd::SetDlgItemText函式,以便在該控制元件中顯示文字。

        如果想顯示圖形的話,必須利用ClassWizard相對話方塊中加入OnPaint成員函式,該函式必須將靜態控制元件的ID轉換CWnd指標,然後在得到他的裝置環境。這裡的一個技巧就在於我們既要在控制元件視窗繪圖,又要防止Windows對他進行重複繪製。我們可以通過利用Invalidate/UpdateWindow這一呼叫序列來達到這一效果。

例:

void CMyDialog::OnPaint()
{
     CWnd * pWnd = GetDlgItem(IDC_STATIC1);   //IDC_STATIC1 specified in the dialog editor
     CDC * pControlDC = pWnd->GetDC();
     pWnd->Invalidate();
     pWnd->UpdateWindow();
     pControlDC->SelectStockObject(BLACK_BRUSH);
     pControlDC->Rectangle(0,0,10,10);
     pWnd->ReleaseDC(pControlDC);
}

我們可以利用以下語句在對話方塊的其他成員函式中強行呼叫OnPaint函式

Invalidate();

也可以:

響應WM_PAINT訊息
在OnPaint函式裡面定義CPaintDC dc(this);
然後用這個dc進行繪圖就是了,跟在檢視類中繪圖中一樣。

或者:

我現在是在對話方塊內放了一個靜態文字,
用   CWnd   pwnd=GetDlgItem(IDC_STATIC);
        CDC       *pDC=GetDc();
再在pDC繪圖,現在遇到的問題是,在靜態文字內繪圖,它是以畫素為基本單位的,和實際有些區別,比如說我要畫的是一個半徑為1的圓,如果以一個畫素為基本單位,根本就是一個很小的點,
問題二,就是我畫點是以Rectangle(250,150,252,152)實際上是一個長度為2畫素的矩形,想問問有沒有畫點更好的方法。


 // 設定視窗大小

 SetWindowPos(0,   0,   0,   500,   500,   SWP_NOMOVE);