mfc鎬庝箞缁樺埗鍔ㄦ€佹姌绾垮浘
MFC涓彲浠ヤ娇鐢–DC绫荤殑鍔熻兘鏉ョ粯鍒跺姩鎬佹姌绾垮浘銆備笅闈㈡槸涓€涓畝鍗曠殑绀轰緥浠g爜锛?/p>
棣栧厛锛屽湪MFC鐨勮鍥剧被涓垱寤轰竴涓粯鍥惧嚱鏁帮紝鐢ㄤ簬缁樺埗鎶樼嚎鍥俱€傚湪OnDraw鍑芥暟涓皟鐢ㄨ缁樺浘鍑芥暟銆?/p>
void CMyView::DrawDynamicLineChart(CDC* pDC)
{
// 璁剧疆鍧愭爣绯荤殑鍘熺偣鍜屽ぇ灏?/span>
int originX = 50;
int originY = 250;
int chartWidth = 400;
int chartHeight = 200;
// 璁剧疆鏁版嵁鐐?/span>
int dataPoints[] = {50, 100, 150, 200, 250, 200, 150, 100, 50};
// 缁樺埗鍧愭爣杞?/span>
pDC->MoveTo(originX, originY);
pDC->LineTo(originX + chartWidth, originY);
pDC->MoveTo(originX, originY);
pDC->LineTo(originX, originY - chartHeight);
// 缁樺埗鎶樼嚎
int numDataPoints = sizeof(dataPoints) / sizeof(dataPoints[0]);
int stepX = chartWidth / (numDataPoints - 1);
int prevX = originX;
int prevY = originY - dataPoints[0];
for (int i = 1; i < numDataPoints; i++) {
int x = originX + i * stepX;
int y = originY - dataPoints[i];
pDC->MoveTo(prevX, prevY);
pDC->LineTo(x, y);
prevX = x;
prevY = y;
}
}
void CMyView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDC)
return;
// 鍦ㄦ澶勬坊鍔犵粯鍒朵唬鐮?/span>
DrawDynamicLineChart(pDC);
}
鐒跺悗锛屽湪MFC鐨勬鏋剁被涓紝浣跨敤瀹氭椂鍣ㄦ潵涓嶆柇鏇存柊鏁版嵁锛屽苟璋冪敤Invalidate鍑芥暟鏉ヨЕ鍙戦噸缁樸€?/p>
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
CMyView* pView = (CMyView*)GetActiveView();
if (pView != nullptr) {
pView->Invalidate();
}
CFrameWnd::OnTimer(nIDEvent);
}
鏈€鍚庯紝鍦∕FC鐨勫簲鐢ㄧ▼搴忕被涓惎鍔ㄥ畾鏃跺櫒銆?/p>
BOOL CMyApp::InitInstance()
{
// ...
// 鍒涘缓骞跺惎鍔ㄥ畾鏃跺櫒
SetTimer(1, 1000, nullptr);
// ...
}
浠ヤ笂浠g爜绀轰緥涓紝鎶樼嚎鍥剧殑鏁版嵁鐐规瘡闅?绉掗挓鏇存柊涓€娆★紝骞堕€氳繃Invalidate鍑芥暟鏉ヨЕ鍙戣鍥剧被鐨勯噸缁橈紝浠庤€屽疄鐜板姩鎬佹姌绾垮浘鐨勭粯鍒躲€備綘鍙互鏍规嵁瀹為檯闇€姹備慨鏀规暟鎹偣鍜屽畾鏃跺櫒鐨勬椂闂撮棿闅斻€?/p>
相关问答