如何使用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?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...
随机推荐
- day22 正则表达式 re
1. 正则表达式 正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤. 工具: 各大文本编辑器⼀般都有正则匹配功能. 我们也可以去http://tool.china ...
- python+splinter实现12306网站刷票并自动购票流程
python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...
- Linux网络编程基础
1. Linux网络模型 ① OSI七层模型和Linux四层模型 ② 各种协议之间的关系及在Linux模型中的位置 ③ 协议封装:各种协议处于一种层层封装的关系 (1)Ethernet (2)IP * ...
- java在window系统的一些问题
一般的, 在windows cmd上启动 utf-8编码的java应用 会有一些字符集问题 可以修改cmd的字符集编码为utf8 , chcp 65001 java -D有空格时 区别: VM参数是 ...
- pip安装python库
- strcpy/strlen/strcat/strcmp的实现
一.字符串拷贝strcpy 函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够 ...
- django-filter version 2.0 改动
今天使用django-filter时候遇到了下面这个问题: django-filter: TypeError at /goods/ init() got an unexpected keyword a ...
- PlayMaker 设置颜色 Set Materia lColor
1. 指定一个游戏对象,Color处设为红色,执行这个行为后就把游戏对象的材质变为了红色: 2. Color也可以使用一个弄好的Color类型的变量,如下图:Color处用了一个提前设置好的变量
- 性能测试工具LoadRunner28-LR之内部数据参数类型
Date/Time 在“Parameter type”中您可以选择Date/Time,即:用当前的日期/时间替换参数.要指定日期/时间的格式,可以从格式列表中选择一个格式,或者指定您自己的格式. [l ...
- (转)iptables简介
iptables简介 原文:https://www.cnblogs.com/metoy/p/4320813.html netfilter/iptables(简称为iptables)组成Linux平台下 ...