如何使用Win32API绘制树




一、这个已经有几年时间了,刚开始学习charlie的《windows程序设计》的时候做的。
现在看来,代码很乱,虽然后来还整理过几次,现在这方面没什么兴趣了,有兴趣的可自由下载。
二、绘制二叉树的伪代码
int drawBinaryTree(BinaryTree bt){
Queue main;
Queue slave;
mian.enQueue(head node of bt);
while (!empty(main)){
slave.clear();
for each node in main{
drawNode(node);
slave.enQueue(sons of node);
}
main.clear();
copy all nodes in slave ==> main;
}
return ;
}
三、一些数据结构
////////////////////////////////////////////////////////////////////////////////
void init(int nElem);//初始化
void push(int elem); //数据入栈auxBuffer
int StackEmpty(); //SeniorBuffer无数据则返回真值
void copy(int *src, int *dest);//copy auxBuffer to SeniorBuffer
void destroy();
//绘制哈夫曼树时存储结点序号的栈,采用双缓冲结构
typedef struct tagSTACK{
int * SeniorBuffer; //用于暂存结点序号
int sp1; //元素个数
int * auxBuffer; //缓冲区
int sp2; //缓冲区元素个数
void ( *init )(int nElem); //初始化
void ( *push )(int elem); //数据入栈auxBuffer
int ( *StackEmpty )(); //SeniorBuffer无数据则返回真值
void ( *copy )(int *src, int *dest);//copy auxBuffer to SeniorBuffer
void ( *destroy)();
} STACK;
函数指针,可以模仿C++成员函数调用语法,《面向对象软件构造》附录内也有有提到。
四、绘制森林
最开始的绘制效果结点多的时候容易碰撞,通过观察得出结论:绘制头节点时,手背要尽可能长,两背夹角应该尽可能大,越往下手背越短,夹角变小。
不过过也不能一直变短变小,到一定程度可以固定下来。
这样几百个节点也比最初效果好了。
这段代码很琐碎,我自己都不想看。
void PrepareForest(ForestDemension* _G_fd){
_G_fd->MaxNodeNO = _G_fd->ForestWidth = _G_fd->ForestHeight = ;
}
void EnumForestStructMember(PHuffmantreeNode ht, int NodeNO, ForestDemension* _G_fd){
int node = NodeNO;
_G_fd->rNodeNO = _G_fd->lNodeNO = ;
while( node && ht[node].lchild ) {_G_fd->lNodeNO++; node = ht[node].lchild;}
node = NodeNO;
while( node && ht[node].rchild ) {_G_fd->rNodeNO++; node = ht[node].rchild;}
if (_G_fd->lNodeNO > _G_fd->MaxNodeNO) _G_fd->MaxNodeNO = _G_fd->lNodeNO;
if (_G_fd->rNodeNO > _G_fd->MaxNodeNO) _G_fd->MaxNodeNO = _G_fd->rNodeNO;
}
int GetTreeOrigX( ForestDemension *_G_fd ){
double m = ;
if ( _G_fd->lNodeNO > - ) m = m + EDGE;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-);
return (int)(m) + _G_fd->ForestWidth ;
}
void SetForestWidth( ForestDemension *_G_fd ){
double m = ;
if ( _G_fd->lNodeNO > - ) m = m + EDGE;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + ;
if ( _G_fd->lNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-);
if ( _G_fd->rNodeNO > - ) m = m + EDGE;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + ;
if ( _G_fd->rNodeNO > ) m = m + 13.7 * (_G_fd->lNodeNO-);
_G_fd->ForestWidth += (int)m;
}
void SetForestHeight( ForestDemension *_G_fd ){
double m = 0.1*TREELENGTH;
if ( _G_fd->MaxNodeNO < HIERARCHY ) _G_fd->MaxNodeNO = HIERARCHY;
if ( _G_fd->MaxNodeNO > - ) m = m + *EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + +EDGE;
if ( _G_fd->MaxNodeNO > ) m = m + (+EDGE) * (_G_fd->MaxNodeNO-);
if ( (int)m > _G_fd->ForestHeight ) _G_fd->ForestHeight = (int)m;
}
五,代码打包地址:
//http://ishare.iask.sina.com.cn/f/24162408.html
如何使用Win32API绘制树的更多相关文章
- python爬取股票最新数据并用excel绘制树状图
大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图 ...
- 关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)
最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结. 效果图: 1.基础配置 options的配置如下: { tooltip: { trigger: 'item', triggerO ...
- Anaconda 安装 pydot 绘制树状图
在***的前提下,控制台输入以下命令: 首先安装 graphviz,这是计算的核心 package conda install graphviz 再安装 pydot ,这是 graphviz 的 py ...
- 机器学习实战笔记(Python实现)-02-决策树
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 编译原理LL1文法分析树(绘图过程)算法实现
import hjzgg.analysistable.AnalysisTable; import hjzgg.first.First; import hjzgg.follow.Follow; impo ...
- view的绘制原理
转:http://blog.csdn.net/berber78/article/details/42069301 自定义UI控件,需继承 View类或View的子类,并重载View类中的一些方法,不必 ...
- Qt实现表格树控件-自绘树节点虚线
目录 一.开心一刻 二.自绘树节点? 三.效果展示 四.实现思路 1.可扩展接口 2.函数重写 3.同步左侧表头 五.相关文章 原文链接:Qt实现表格树控件-自绘树节点虚线 一.开心一刻 一程序员第一 ...
- 一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!
Turtle库手册可以查询查询 python图形绘制库turtle中文开发文档及示例大全,手册中现有示例,不需要自己动手就可以查看演示. 使用Turtle画树,看了一下网上的代码,基本上核心的方法是使 ...
- HTML5 程序设计 - 使用HTML5 Canvas API
请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...
随机推荐
- poj2001 Shortest Prefixes(字典树)
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21642 Accepted: 926 ...
- Python数据分析之pandas学习(基础操作)
一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...
- java/Android String.split 字符串分割
特殊符号分割时需加[].如下图
- log4net独立配置文件配置(winfrom)
log4net配置很多,具体配置步骤不细说,具体说出个人遇到的问题. 在winfrom和web应用程序中配置,在默认配置文件配置都没问题,因为EF也写在默认配置文件中,就会冲突解决办法就是将log4. ...
- 练习五十三:for循环练习
对100以内的两位数,请使用一个两重循环打印出所有十位数都比各位数字小的数,并统计个数 l = [] for i in range(1,9): for j in range(i): l.append( ...
- scanf()函数的注意事项
/* 2 time:2018年5月23日18:57:52 3 author:Howie Tang 4 title:scanf()函数的总结 5 */ #include <stdio.h> ...
- Linux7.3 glib-2.49安装记录
由于 Linux系统较新,所在glib选择了较新的glib-2.49,安装过程遇到颇多错误,这里只记录正确的成功的安装记录. # rpm -q ncurses readline lua libffi ...
- 配置wordpress
安装教程 软件介绍 WordPress以它的易于安装而出名.在大多数情况下,安装WordPress是一个很简单的事情,并且花不到5分钟就可以搞定.现在很多web主机都提供自动安装WordPress的工 ...
- Linux 文件锁flock 实现两个进程相互监听存活状态
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指 ...
- 快速排序算法的实现 && 随机生成区间里的数 && O(n)找第k小 && O(nlogk)找前k大
思路:固定一个数,把这个数放到合法的位置,然后左边的数都是比它小,右边的数都是比它大 固定权值选的是第一个数,或者一个随机数 因为固定的是左端点,所以一开始需要在右端点开始,找一个小于权值的数,从左端 ...