MFC制作漂亮的数码管(动态库)

2025-11-30 01:51:20

1、新建一个DLL工程

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

MFC制作漂亮的数码管(动态库)

2、创建MFC工程

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

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

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

MFC制作漂亮的数码管(动态库)

MFC制作漂亮的数码管(动态库)

3、添加用户程序

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

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

#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;

 }; 

MFC制作漂亮的数码管(动态库)

MFC制作漂亮的数码管(动态库)

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

#include "StdAfx.h"

#include "MyDigital.h"

#include <math.h>

#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);//小数点

}

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

MFC制作漂亮的数码管(动态库)

5、效果图

MFC制作漂亮的数码管(动态库)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢