用C编写一个流程图编译器

来源:百度知道 编辑:UC知道 时间:2024/09/26 16:33:23
要求设计并实现一个图形界面的软件,使用它可以绘制标准的程序流程图或其它示意图。此软件应当具有如下功能:

支持标准的流程图图形,如矩形、菱形等元素
支持在不同的图形之间连线,自动选择线的路径
可以向元素内部或图形的任意部分添加文字
设计一种文件格式来保存流程图,该软件应当可以将绘制好的图形保存为文件,也可以从文件中读取保存的图形。
流程图可以导出为 PNG 格式的图像。
可以导出SVG格式的矢量图(可选)。
在实现此软件时,要求如下

不可以使用矢量图绘制或支持图元的函数库、类库
可以使用 PNG 图形相关的函数库、类库
难点
此项目的难点主要包括:

图形界面的应用程序设计
在画布上绘制图形
设计数据结构保存流程图
连线路径的自动选择,图形位置变化时的重新选择
导出 PNG 格式
。。哪位大侠能告诉应该如何入手。或者给点参考资料。。或者告诉应该用何种数据结构。以及算法~~~~?。。急。。。。。。。。。。。。

用C编写, 要写 Win API 程序。
建窗(画布):
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
。。。
在 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 里
调 hdc=GetDC(hwnd); 得到 DC 可以画图写字。
例如:
color=RGB(0,128,128); // 设颜色
hP1=CreatePen(PS_SOLID,0,color); // 线型
SelectObject(hdc,hP1); // 建画笔
MoveToEx( hdc,x0, y0, NULL ); //落笔
LineTo(hdc,x1,y1);LineTo(hdc,x2,y2);
LineTo(hdc,x0,y0); // 画线
TextOut(hdc,。。。。); // 写字
自己定一个数据文件,记录画的东西,例如:
rect 40 80 100 30 -- 表示画矩形,原点(40,80),长100宽30。
lingxin x0 y0 x1 y1 x2 y2 x3 y3 -- 表示画菱形
用屏幕抓图存图像(或画图在dib设备):
keybd_event(VK_LMENU,0xA4,0,0);
keybd_event(VK_SNAPSHOT,0x2C,0,0);
keybd_event(VK_SNAPSHOT,0x2C,KEYEVENTF_KEYUP,0);
keybd_event(VK_LMENU,0xA4,KEYEVENTF_KEYUP,0);
从Clipboard取出图像:
h_bitmap = GetClipboardData(CF_BITMAP);
h_dib = GetClipboardData(CF_DIB);
memcpy(&bmi,h_dib,