自己写的一个函数,用来自动连接对话框上的两个控件(画线)

void CGasBagCDlg::Linetwoctrl(CPaintDC *dc,int leftid,int rightid,CGasBagCDlg *phd)
{
	//201506161749中北大学韩晓东编制
	//功能:可在onpaint中调用,连接两个控件
	//参数说明:参数1:onpaint画笔,参数二:控件1ID,参数三:控件2ID,参数四:当前窗口指针
	//编写中的问题:参一是MFC的类对象指针,传递MFC类对象只能以指针或引用方式传递,参四可通过this指针获取上下文
	//指标连线
	CRect rectL,rectR;
	phd->GetDlgItem(leftid)->GetWindowRect(&rectL);//获取控件相对于屏幕的位置
	phd->ScreenToClient(rectL);//转化为对话框上的相对位置
	phd->GetDlgItem(rightid)->GetWindowRect(&rectR);//获取控件相对于屏幕的位置
	phd->ScreenToClient(rectR);//转化为对话框上的相对位置
	UINT m_rowL=rectL.bottom-rectL.top;//左指标高度
	UINT m_rowR=rectR.bottom-rectR.top;//右指标高度
	UINT m_width=rectR.left-rectL.right;//左右指标横间距
	INT m_height=(rectL.bottom-m_rowL/2)-(rectR.bottom-m_rowR/2);//左或指标中间点高度差。
	phd->UpdateData(FALSE);
	dc->MoveTo(rectL.right,rectL.bottom-m_rowL/2);//连接两个控件中心点
	dc->LineTo(rectL.right+m_width/2,rectL.bottom-m_rowL/2);//点1
	dc->LineTo(rectL.right+m_width/2,rectL.bottom-m_rowL/2-m_height);//点2
	dc->LineTo(rectR.left,rectR.top+m_rowR/2);//点3
	//连线完毕
}

  附项目中onpaint():

void CGasBagCDlg::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码

			//指标连线
	//一级:
	Linetwoctrl(&dc,IDC_A_STATIC,IDC_B1_STATIC,this);
	Linetwoctrl(&dc,IDC_A_STATIC,IDC_B2_STATIC,this);
	Linetwoctrl(&dc,IDC_A_STATIC,IDC_B3_STATIC,this);
	Linetwoctrl(&dc,IDC_A_STATIC,IDC_B4_STATIC,this);
	//二级
	Linetwoctrl(&dc,IDC_B1_STATIC,IDC_C11_STATIC,this);
	Linetwoctrl(&dc,IDC_B1_STATIC,IDC_C12_STATIC,this);

	Linetwoctrl(&dc,IDC_B2_STATIC,IDC_C21_STATIC,this);
	Linetwoctrl(&dc,IDC_B2_STATIC,IDC_C22_STATIC,this);

	Linetwoctrl(&dc,IDC_B3_STATIC,IDC_C31_STATIC,this);
	Linetwoctrl(&dc,IDC_B3_STATIC,IDC_C32_STATIC,this);

	Linetwoctrl(&dc,IDC_B4_STATIC,IDC_C41_STATIC,this);
	Linetwoctrl(&dc,IDC_B4_STATIC,IDC_C42_STATIC,this);
	Linetwoctrl(&dc,IDC_B4_STATIC,IDC_C43_STATIC,this);
	//三级
	Linetwoctrl(&dc,IDC_C11_STATIC,IDC_D111_STATIC,this);
	Linetwoctrl(&dc,IDC_C11_STATIC,IDC_D112_STATIC,this);
	Linetwoctrl(&dc,IDC_C11_STATIC,IDC_D113_STATIC,this);

	Linetwoctrl(&dc,IDC_C12_STATIC,IDC_D121_STATIC,this);
	Linetwoctrl(&dc,IDC_C12_STATIC,IDC_D122_STATIC,this);
	Linetwoctrl(&dc,IDC_C12_STATIC,IDC_D123_STATIC,this);
	Linetwoctrl(&dc,IDC_C12_STATIC,IDC_D124_STATIC,this);

	Linetwoctrl(&dc,IDC_C21_STATIC,IDC_D211_STATIC,this);
	Linetwoctrl(&dc,IDC_C21_STATIC,IDC_D212_STATIC,this);
	Linetwoctrl(&dc,IDC_C21_STATIC,IDC_D213_STATIC,this);

	Linetwoctrl(&dc,IDC_C22_STATIC,IDC_D221_STATIC,this);
	Linetwoctrl(&dc,IDC_C22_STATIC,IDC_D222_STATIC,this);
	Linetwoctrl(&dc,IDC_C22_STATIC,IDC_D223_STATIC,this);

	Linetwoctrl(&dc,IDC_C31_STATIC,IDC_D311_STATIC,this);
	Linetwoctrl(&dc,IDC_C31_STATIC,IDC_D312_STATIC,this);

	//连线完毕
	// 不为绘图消息调用 CDialogEx::OnPaint()
}

  

时间: 2024-08-05 15:23:05

自己写的一个函数,用来自动连接对话框上的两个控件(画线)的相关文章

自个儿写Android的下拉刷新/上拉加载控件 (续)

本文算是对之前的一篇博文<自个儿写Android的下拉刷新/上拉加载控件>的续章,如果有兴趣了解更多的朋友可以先看一看之前的这篇博客. 事实上之所以会有之前的那篇博文的出现,是起因于前段时间自己在写一个练手的App时很快就遇到这种需求.其实我们可以发现类似这样下拉刷新.上拉加载的功能正在变得越来越普遍,可以说如今基本上绝大多数的应用里面都会使用到.当然,随着Android的发展,已经有不少现成的可以实现这种需求的"轮子"供我们使用了. 但转过头想一下想,既然本来就是自己练手

[MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧

 前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是两年前稍微学了点MFC的知识,这两年中基本没有涉及,因为诸多相同的需求都可以用C#来搞定.这个本来也是想用C#来弄,可是我朋友用了openCV的相关函数封装了核心的“美颜算法”,我就只好重温经典了! 本文只涉及开发该小软件中与MFC控件相关的操作技巧,不提供朋友的“美颜算法”,还请各位见谅! 工程中

自个儿写Android的下拉刷新/上拉加载控件

前段时间自己写了一个能够"通用"的,支持下拉刷新和上拉加载的自定义控件.可能现如今这已经不新鲜了,但有兴趣的朋友还是可以一起来看看的. 与通常的View配合使用(比如ImageView) 与ListView配合使用 与RecyclerView配合使用 与SrcollView配合使用 局部刷新(但想必这种需要实际应该还是不多的-.) 好啦,效果大概就是这样.如果您看后觉得有一点兴趣.那么,以下是相关的信息: GitHub地址: https://github.com/RawnHwang/S

自己写了一个类似百度空间自动保存草稿的程序 php+jquery

可以异步加载mysql中的草稿~,异步更新草稿列表~ 下载地址:http://download.csdn.net/source/3479156 代码: demo.php <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); mysql_query("SET CHARACTER SET GB2312"); if(

1、使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数

<script type="text/javascript"> function papapa(x,y){ if(x>y|| x==y){ return x; }else{ return y; } } var a= papapa(1,9); alert(a) </script>

C#自动生成年月,绑定到combobox控件

private void FillYearMonth()        {            List<string> listDateTime = new List<string>();            DateTime dtStart = Convert.ToDateTime("2015-1"); //开始时间            DateTime dtEnd = DateTime.Now;//当前时间            for (DateT

用TX-1C的开发板写了一个简易的计算器

前不久看完了矩阵键盘和数码管的应用,自己动手花了一天时间写了一个简单的计算器 . 下面贴上源代码,大家可以测试一下. 上面4*4的矩阵键盘,作用分别是: 1 2 3 + 4 5 6 — 7 8 9 * on/c 0 = / 其中矩阵键盘的部分基本是照着书本的代码改的,然后自己做了部分修改. 由于是直接用 int 变量做的计算,而如果用 long 变量的话又要用到大数的运算,所以只能计算小于65536的数. 计算的步骤是这样的: (主操作数)(操作符)(被操作数)(=) //main.c #inc

Lambda表达式相当于一个函数

看来你对Lambda完全不懂.Lambda表达式相当于一个函数. 比如model => model.Name相当于string 一个函数(Model的类型 model) {     return model.Name; }看到了么?model是形参,这个名字无所谓的.你写string 一个函数(Model的类型 x) {     return x.Name; }这两个函数是不是完全等价的? 因此model => model.Name和x => x.Name也是等价的.

如果写一个android桌面滑动切换屏幕的控件(一)

首先这个控件应该是继承ViewGroup: 初始化: public class MyGroup extends ViewGroup{ private Scroller mScroller; private float mOriMotionX; private float mLastMotionX; private VelocityTracker mVelocityTracker; private int mTouchState = TOUCH_STATE_REST; private static