mfc靜態文字控制元件裡實現畫圖
阿新 • • 發佈:2019-02-14
有時候,我們需要自繪一些圖形,這時候就可以使用靜態文字控制元件來實現繪圖功能。
具體實現效果如上,
要實現以上功能,首先我們需要獲取到控制元件視窗的控制代碼,並且設定繪製的範圍
然後在實現畫X,Y軸,刻度標尺等功能。
具體程式碼如下
void CMFCApplication5Dlg::OnBnClickedButton1()
{
// TODO: 在此新增控制元件通知處理程式程式碼
CWnd *pwnd = GetDlgItem(IDC_STATIC1);
CDC *pdc = pwnd->GetDC();
pwnd->Invalidate();
pwnd->UpdateWindow();
pdc->Rectangle(0, 0, 320, 320);
CPen *ppenRed = new CPen;
ppenRed->CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
CGdiObject *pOldpen = pdc->SelectObject(ppenRed);
pdc->MoveTo(20, 20);
pdc->LineTo(20, 300);
pdc->LineTo(300, 300);
CString str;
str.Format(_T("0"));
pdc->SetTextColor(RGB(0 ,255, 0));
pdc->TextOutW(20, 303, str);
str.Format(_T("50"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(70, 303, str);
str.Format(_T("100"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(120, 303, str);
str.Format(_T("150"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(170, 303, str);
str.Format(_T("200"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(220, 303, str);
str.Format(_T("250"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(270, 303, str);
for (int i = 10; i < 300; i += 5){
if ((i & 1) == 0){
pdc->MoveTo(i + 10, 300);
pdc->LineTo(i + 10, 303);
}
else{
pdc->MoveTo(i + 10, 300);
pdc->LineTo(i + 10, 302);
}
}
}
具體實現效果如上,
要實現以上功能,首先我們需要獲取到控制元件視窗的控制代碼,並且設定繪製的範圍
然後在實現畫X,Y軸,刻度標尺等功能。
具體程式碼如下
void CMFCApplication5Dlg::OnBnClickedButton1()
{
// TODO: 在此新增控制元件通知處理程式程式碼
CWnd *pwnd = GetDlgItem(IDC_STATIC1);
CDC *pdc = pwnd->GetDC();
pwnd->Invalidate();
pwnd->UpdateWindow();
pdc->Rectangle(0, 0, 320, 320);
CPen *ppenRed = new CPen;
ppenRed->CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
CGdiObject *pOldpen = pdc->SelectObject(ppenRed);
pdc->MoveTo(20, 20);
pdc->LineTo(20, 300);
pdc->LineTo(300, 300);
CString str;
str.Format(_T("0"));
pdc->SetTextColor(RGB(0 ,255, 0));
pdc->TextOutW(20, 303, str);
str.Format(_T("50"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(70, 303, str);
str.Format(_T("100"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(120, 303, str);
str.Format(_T("150"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(170, 303, str);
str.Format(_T("200"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(220, 303, str);
str.Format(_T("250"));
pdc->SetTextColor(RGB(0, 255, 0));
pdc->TextOutW(270, 303, str);
for (int i = 10; i < 300; i += 5){
if ((i & 1) == 0){
pdc->MoveTo(i + 10, 300);
pdc->LineTo(i + 10, 303);
}
else{
pdc->MoveTo(i + 10, 300);
pdc->LineTo(i + 10, 302);
}
}
}