VC :在對話框中的控件中繪圖


 如果我們只想在某個空間窗口內繪圖的話,則應避免重復繪制對話框元素。如果只想顯示一些文本,我們可以利用對話框編輯器來創建一個具有特殊ID的空靜態控件,然后在對話框的成員函數中調用CWnd::SetDlgItemText函數,以便在該控件中顯示文本。

        如果想顯示圖形的話,必須利用ClassWizard相對話框中加入OnPaint成員函數,該函數必須將靜態控件的ID轉換CWnd指針,然后在得到他的設備環境。這里的一個技巧就在於我們既要在控件窗口繪圖,又要防止Windows對他進行重復繪制。我們可以通過利用Invalidate/UpdateWindow這一調用序列來達到這一效果。

例: CWnd * pWnd = GetDlgItem(IDC_STATIC);   //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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM