mfc鎬庝箞璇诲彇鏁版嵁鐢熸垚鍥惧舰
MFC锛圡icrosoft Foundation Classes锛夋槸鐢ㄤ簬寮€鍙慦indows搴旂敤绋嬪簭鐨勪竴缁凜++绫诲簱銆傝璇诲彇鏁版嵁骞剁敓鎴愬浘褰紝鎮ㄥ彲浠ヤ娇鐢∕FC鎻愪緵鐨勫浘褰㈣澶囨帴鍙e拰缁樺浘鍑芥暟鏉ュ疄鐜般€備笅闈㈡槸涓€涓畝鍗曠殑绀轰緥浠g爜锛屾紨绀哄浣曚娇鐢∕FC璇诲彇鏁版嵁骞剁敓鎴愬浘褰細
- 鍦∕FC搴旂敤绋嬪簭鐨勮鍥剧被澶存枃浠朵腑娣诲姞浠ヤ笅鎴愬憳鍙橀噺鍜屽嚱鏁板0鏄庯細
class CMyView : public CView
{
// 澹版槑鏁版嵁鎴愬憳
std::vector<double> m_data;
// 澹版槑缁樺浘鍑芥暟
void DrawGraph(CDC* pDC);
// 鍏朵粬鎴愬憳鍑芥暟鍜屽0鏄?..
};
- 鍦ㄨ鍥剧被鐨勬簮鏂囦欢涓疄鐜版暟鎹鍙栧拰鍥惧舰缁樺埗鐨勫嚱鏁帮細
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// 璇诲彇鏁版嵁锛岃繖閲屼互浠庢枃浠朵腑璇诲彇涓轰緥
std::ifstream inputFile("data.txt");
double value;
while (inputFile >> value)
{
m_data.push_back(value);
}
inputFile.close();
// 鏇存柊瑙嗗浘
Invalidate();
}
void CMyView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// 缁樺埗鍥惧舰
DrawGraph(pDC);
}
void CMyView::DrawGraph(CDC* pDC)
{
// 璁剧疆缁樺浘鐩稿叧鍙傛暟
int xPos = 50; // 鍥惧舰鐨勫乏涓婅x鍧愭爣
int yPos = 50; // 鍥惧舰鐨勫乏涓婅y鍧愭爣
int width = 400; // 鍥惧舰鐨勫搴?/span>
int height = 200; // 鍥惧舰鐨勯珮搴?/span>
// 缁樺埗鍧愭爣杞?/span>
pDC->MoveTo(xPos, yPos);
pDC->LineTo(xPos, yPos + height);
pDC->LineTo(xPos + width, yPos + height);
// 缁樺埗鏁版嵁鐐?/span>
int dataSize = m_data.size();
double xInterval = (double)width / dataSize;
double yScale = (double)height / *std::max_element(m_data.begin(), m_data.end());
for (int i = 0; i < dataSize; ++i)
{
int x = xPos + i * xInterval;
int y = yPos + height - m_data[i] * yScale;
pDC->SetPixel(x, y, RGB(255, 0, 0));
}
}
- 鍦ㄦ枃妗g被鐨勬簮鏂囦欢涓坊鍔犱互涓嬩唬鐮侊紝浠ヤ究鍦ㄥ垱寤鸿鍥炬椂鑷姩鏇存柊鏁版嵁锛?/li>
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// 鍦ㄥ垱寤烘柊鏂囨。鏃舵洿鏂拌鍥?/span>
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
pView->Invalidate();
pView->UpdateWindow();
}
return TRUE;
}
杩欐牱锛屽綋鎮ㄨ繍琛孧FC搴旂敤绋嬪簭鏃讹紝瀹冨皢璇诲彇鏁版嵁鏂囦欢锛堝亣璁句负data.txt锛夛紝骞跺湪瑙嗗浘绫讳腑鐨勭粯鍥惧嚱鏁颁腑鐢熸垚鐩稿簲鐨勫浘褰€傝鏍规嵁鎮ㄥ疄闄呯殑鏁版嵁鏍煎紡鍜屽浘褰㈤渶姹傝繘琛岄€傚綋鐨勪慨鏀广€?/p>
相关问答