有時(shí)為了對(duì)采集數(shù)據(jù)進(jìn)行顯示, 需要在界面中顯示直角坐標(biāo), 主要操作均在OnPaint函數(shù)中完成, 下面就簡(jiǎn)單的講解下如何實(shí)現(xiàn):
1. 添加static靜態(tài)文本框到對(duì)話框上, 并修改其ID為IDC_MYSTATIC;
2. 在對(duì)話框的申明文件即CXXXDlg.h文件中定義變量;
CWnd *pWnd; //獲取控件窗口類指針
3. 在其cpp實(shí)現(xiàn)文件中的OnInitDialog()函數(shù)中獲取:
pWnd = GetDlgItem(IDC_MYSTATIC);
4. 在OnPaint()中的代碼如下:
void CXXXDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CString str;
int i, j;
int x, y;
//強(qiáng)制更新繪圖, 不可少, 否則繪圖會(huì)出錯(cuò)
pWnd->Invalidate(); //使static控件的區(qū)域無(wú)效
pWnd->UpdateWindow();//更新窗口, 此時(shí)才真正向系統(tǒng)發(fā)送重繪消息
CDC *pDC = pWnd->GetDC(); //獲取控件的CDC指針
pDC->Rectangle(0, 0, 380, 390); //畫(huà)一個(gè)矩形框
CPen *pPenRed = new CPen(); //創(chuàng)建畫(huà)筆對(duì)象
pPenRed ->CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //紅色畫(huà)筆
CPen *pPen = NULL;
//選中當(dāng)前紅色畫(huà)筆,并保存以前的畫(huà)筆
CGdiObject *pOldPen = pDC ->SelectObject(pPenRed);
pDC ->MoveTo(20, 20); //繪制坐標(biāo)軸
pDC ->LineTo(20, 360); //豎起軸
pDC ->LineTo(360, 360); //水平軸
//寫(xiě)X軸刻度值
for(i = 0; i <= 10; i ++)
{
str.Format("%d", i);
pDC ->TextOut(17 + 30 * i, 365, str);
//繪制X軸刻度
pDC ->MoveTo(i * 30 + 20, 360);
pDC ->LineTo(i * 30 + 20, 355);
}
//寫(xiě)Y軸刻度值
for(i = 1; i <= 10; i ++)
{
str.Format("%d", i);
pDC ->TextOut(2, 360 - 30 * i - 5, str);
//繪制Y軸刻度
pDC ->MoveTo(25, 360 - 30 * i);
pDC ->LineTo(20, 360 - 30 * i);
}
//繪制X箭頭
pDC ->MoveTo(350, 357);
pDC ->LineTo(360, 360);
pDC ->LineTo(350, 363);
//繪制Y箭頭
pDC ->MoveTo(17, 30);
pDC ->LineTo(20, 20); //繪制左邊箭頭
pDC ->LineTo(23, 30); //繪制右邊箭頭
//恢復(fù)以前的畫(huà)筆
pDC ->SelectObject(pOldPen);
delete pPenRed;
if(pPen != NULL)
delete pPen;
ReleaseDC(pDC);
}
效果見(jiàn)下圖(因?yàn)橐郧白鲞^(guò)相關(guān)的東西, 就直接貼出來(lái)了, 并沒(méi)有單獨(dú)的圖片, 看下效果就可以):