MFC如何临时创建静态图表绘图?

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:59:54
我现在要编写一个网络拓扑结构的图。需要从文件中读入数据。
主要问题如下:
我读入数据n,还有n个坐标(x1,y1)...(xn,yn),然后在MFC的界面上面画出n个静态图,每个图的位置是(Xi,Yi),i=1,2,3...n。
怎么才能在运行中创建静态图呢?以前都是在运行之前就确定好数量和图形位置的,现在要运行以后才能确定,怎么办?

创建类变量:

HBITMAP* m_phBmp;

用户界面初始化时分配内存并装载图片
m_phBmp = new HBITMAP[n];

m_phBmp[0] = (HBITMAP)LoadImage(NULL, _T("1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

m_phBmp[1] = (HBITMAP)LoadImage(NULL, _T("2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
...
如果文件名有规律的话可以放入一循环装载

OnPaint内:
PAINTSTRUCT ps;
HDC hdc;
BITMAP bmp;
HDC hdcMem;

hdc = ::BeginPaint(m_hWnd, &ps);
hdcMem = CreateCompatibleDC(hdc);

GetObject(m_phBmp[0], sizeof(BITMAP), &bmp);
SelectObject(hdcMem, m_phBmp[0]);
BitBlt(hdc, x1, y1, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);

GetObject(m_phBmp[1], sizeof(BITMAP), &bmp);
SelectObject(hdcMem, m_phBmp[1]);
BitBlt(hdc, x2, y2, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);
....

DeleteDC(hdcMem);
::EndPaint(