搜索你想要的: 关键字:    
中文版 English

点击这里给我发消息  点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 

新闻中心
公司动态
业界新闻
 
信息搜索
关键字:
范 围:
首页新闻中心业界新闻
     
 
MFC制作漂亮的数码管详细过程(动态库)

信息来源:本站  发布时间:2018-4-25  查看点击:1089次  


显示效果图

MFC制作漂亮的数码管详细过程(动态库)

1.新建一个DLL工程

打开VS2012,点击新建项目出现新建项目对话框,如下图所示;

创建MFC工程

选择MFC —> MFCDLL;键入项目名称以及解决方案名称,可以不一样,选择存放位置,点击确定;进入MFC DLL向导,点击下一步;


MFC制作漂亮的数码管详细过程(动态库)


MFC制作漂亮的数码管详细过程(动态库)

选择使用共享MFC DLL的规则DLL点击完成;

这时候就生成了一个空的MFC DLL工程;


MFC制作漂亮的数码管详细过程(动态库)

2.添加用户程序

点击解决方案资源管理器;


MFC制作漂亮的数码管详细过程(动态库)

右击头文件,添加--->新建项;


MFC制作漂亮的数码管详细过程(动态库)

进入添加新项界面,选择头文件,输入头文件名,点击添加


MFC制作漂亮的数码管详细过程(动态库)

同样的方法在添加一个源文件;

代码:

#include "StdAfx.h"

#include "MyDigital.h"

#include

#include "CDefine.h"

//头文件包含情况,CDfine.h主要是定义RGB颜色.

void OnDraw(CDC *pDC,COLORREF color,int x,int y,float ch,int indx)

{

CPen Pen(PS_SOLID, 1, color);//数码管外框画笔

CPen *OldPen=pDC->SelectObject(&Pen);

CRgn Rgn;

CPoint Point[7],Point1[7],Point2[7],Point3[7],Point4[7],Point5[7],Point6[7];//定义数码管的7段,每段由7个点组成

Point[0]=CPoint(x,y);

Point[1]=CPoint(x+(ch*16),y);

Point[2]=CPoint(x+(ch*17),y+ch);

Point[3]=CPoint(x+(ch*14),y+(ch*4));

Point[4]=CPoint(x+(2*ch),y+(ch*4));

Point[5]=CPoint(x-ch,y+ch);

Point[6]=CPoint(x,y);

...这里是剩下的六段,就不一一贴上了,需要的留邮箱

CBrush BkBrsh(color);

CBrush *OldBrush=pDC->SelectObject(&BkBrsh);//数码管数字显示颜色

switch(indx)//和真正的数码管使用一样,这个switch判断的作用也是段选

{

case 0://当要显示0的时候需要用到下面这些端,那么这些段显示,其他不显示

pDC->Polygon(Point,7);//将point数组中的7个点连接围城一个不规则区域

pDC->Polygon(Point1,7);

pDC->Polygon(Point2,7);

pDC->Polygon(Point3,7);

pDC->Polygon(Point4,7);

pDC->Polygon(Point5,7);

break;

case 1:

pDC->Polygon(Point2,7);

pDC->Polygon(Point4,7);

break;

case 2:

pDC->Polygon(Point,7);

pDC->Polygon(Point2,7);

pDC->Polygon(Point3,7);

pDC->Polygon(Point5,7);

pDC->Polygon(Point6,7);

break;

...剩下是数字定义未列出,留邮箱获取

default:

break;

}

Pen.DeleteObject();//释放资源

BkBrsh.DeleteObject();//释放资源

}

void Diplay(CDC *pDC,int x1,int y1,float size,short axis)//界面显示用

{

switch(axis)//模拟机器四个轴(当初做数码管视为了显示四轴机器人运动位置)

{

case AXIS_X:

dco=XXS;

break;

case AXIS_Y:

dco=YYS;

break;

case AXIS_Z:

dco=ZZS;

break;

case AXIS_C:

dco=CCS;

break;

default:

break;

}

//个位到百位

int bai=int(fabs(dco))/100;

int shi=int(fabs(dco))%100/10;

int ge=int(fabs(dco))%100%10;

//小数点后三位

float fg=fabs(dco)-(int)fabs(dco);

int yi=int(fg*10);

int er=int(fg*100)%10;

int san=int(fg*1000)%100%10;

int ch1=30*size;

int ch2=5*size;

Rectangle1(pDC,x1-ch2-(ch1/5),y1-(ch2/2)-(ch1/6),x1+7*ch1+ch2,y1+1.6*ch1,CLR_SEGBK,int(size));

//数码管阴影

/***************************************************************************/

OnDraw(pDC,CLR_YYRED,x1,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+1*ch1,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+2*ch1,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+3*ch1,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+4*ch1+ch2,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+5*ch1+ch2,y1,size,8);

OnDraw(pDC,CLR_YYRED,x1+6*ch1+ch2,y1,size,8);

//整数部分

/***************************************************************************/

if (bai==0)

{

OnDraw(pDC,CLR_LIGHTRED,x1,y1,size,11);//百位为零时,第一位不显示

if (shi==0)

{

OnDraw(pDC,CLR_LIGHTRED,x1+1*ch1,y1,size,11);//十位为零百位不显示

if (dco>0)

{

OnDraw(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,11);//数值大于零十位不显示

OnDraw(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);//显示个位

}

else if (dco<0)

{

OnDraw(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,10);//数值小于零十位显示负号

OnDraw(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);//显示个位

}

else

{

OnDraw(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,11);//数值小于零十位不显示

OnDraw(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);//显示个位

}

}

else

{

if (dco>0)

{

OnDraw(pDC,CLR_LIGHTRED,x1+1*ch1,y1,size,11);//十位不为零且数值大于零百位不显示

}

else

{

OnDraw(pDC,CLR_LIGHTRED,x1+1*ch1,y1,size,10);//十位不为零且数值小于零百位显示负号

}

OnDraw(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,shi);

OnDraw(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);

}

}

else//百位不为零正常显示

{

if (dco>0)

{

OnDraw(pDC,CLR_LIGHTRED,x1,y1,size,11);

}

else

{

OnDraw(pDC,CLR_LIGHTRED,x1,y1,size,10);

}

OnDraw(pDC,CLR_LIGHTRED,x1+1*ch1,y1,size,bai);

OnDraw(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,shi);

OnDraw(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);

}

OnDraw(pDC,CLR_LIGHTRED,x1+4*ch1+ch2,y1,size,yi);

OnDraw(pDC,CLR_LIGHTRED,x1+5*ch1+ch2,y1,size,er);

OnDraw(pDC,CLR_LIGHTRED,x1+6*ch1+ch2,y1,size,san);

Ellipse1(pDC,x1+3.8*ch1,y1+1.2*ch1,size*4,CLR_LIGHTRED);//小数点

}

//小数点以及外框实现较为简单,这里就不贴代码了,需要留邮箱

头文件部分

#define MyDigitalAPI __declspec(dllexport)

#define MyDigitalAPI1 __declspec(dllimport)

extern "C" {

// We delete the function DLLfun1 (as defined

// in the W32DLL DLL) it writes to

// a console, not a window, it isn't appropriate to

// call it from a MFC Client.

MyDigitalAPI void Diplay(CDC *pDC,int x1,int y1,float size,short axis);

MyDigitalAPI void Ellipse1(CDC *pDC,int x,int y,int rec,COLORREF color);

MyDigitalAPI void OnDraw(CDC *pDC,COLORREF color,int x,int y,float ch,int indx);

MyDigitalAPI void Rectangle1(CDC *pDC,int x,int y,int x1,int y1,COLORREF color,int size);

MyDigitalAPI1 float XXS;

MyDigitalAPI1 float YYS;

MyDigitalAPI1 float ZZS;

MyDigitalAPI1 float CCS;

};

      


    总页数:1  第  1  页 

    上一篇: 51单片机之数码管    下一篇: PLC和数码管链接和控制程序实例分析初学者必备
     
    LED数码管|数码管厂家|数码管制造商|点阵|点阵供应商|深圳点阵厂家-2001-2011 版权所有 粤ICP备19021168号-1
    邮件:xinrunled@126.com 电话:+86 755-28393456 89327789 传真:+86 755-84829877 地址: 深圳市龙岗区五联朱古石路70号三楼