MFC实现简易数据类型转换器.docx

上传人:b****6 文档编号:7152835 上传时间:2023-01-21 格式:DOCX 页数:15 大小:49.06KB
下载 相关 举报
MFC实现简易数据类型转换器.docx_第1页
第1页 / 共15页
MFC实现简易数据类型转换器.docx_第2页
第2页 / 共15页
MFC实现简易数据类型转换器.docx_第3页
第3页 / 共15页
MFC实现简易数据类型转换器.docx_第4页
第4页 / 共15页
MFC实现简易数据类型转换器.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

MFC实现简易数据类型转换器.docx

《MFC实现简易数据类型转换器.docx》由会员分享,可在线阅读,更多相关《MFC实现简易数据类型转换器.docx(15页珍藏版)》请在冰豆网上搜索。

MFC实现简易数据类型转换器.docx

MFC实现简易数据类型转换器

MFC实现简易数据类型转换器

©FreeCopy

最大支持32位无符号整数,支持直接拷贝数据,操作极为简便;先选择进制,键盘输入或拷贝进去一个数,再点击其它进制单选按钮,即可实现转换并显示,同时显示文本框获得焦点。

项目文件名称:

Convert

完整实现文件代码:

在类中,添加成员jinzhi,用于记录当前正在显示的进制

添加函数char*dectobin(unsignedlongdec,intlen)用于将十进制整数转换为字符串,len为字符串长度

//ConvertDlg.cpp:

implementationfile

//

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

*******简易进制转换器

*******by杜运福

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

#include"stdafx.h"

#include"Convert.h"

#include"ConvertDlg.h"

#include"string.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//DialogData

//{{AFX_DATA(CAboutDlg)

enum{IDD=IDD_ABOUTBOX};

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//Nomessagehandlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CConvertDlgdialog

CConvertDlg:

:

CConvertDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CConvertDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CConvertDlg)

m_Num=_T("");

m_Ridio=1;//初始化为十进制

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCConvertDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CConvertDlg)

DDX_Text(pDX,IDC_Num,m_Num);

DDX_Radio(pDX,IDC_Hex,m_Ridio);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CConvertDlg,CDialog)

//{{AFX_MSG_MAP(CConvertDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_Hex,OnHex)//非别是事件映射十六进制

ON_BN_CLICKED(IDC_Ten,OnTen)//十进制

ON_BN_CLICKED(IDC_Eight,OnEight)//八进制

ON_BN_CLICKED(IDC_Two,OnTwo)//二进制

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CConvertDlgmessagehandlers

////////////////////////////////////////////////////////////////////////////

BOOLCConvertDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextrainitializationhere

jinzhi=10;

UpdateData(FALSE);

returnFALSE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCConvertDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCConvertDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCConvertDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

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

**将十进制转换为二进制字符串

**入口参数:

dec:

待转换的整数

**len:

目标二进制位数

**出口参数:

转换得到的字符串的指针

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

char*CConvertDlg:

:

dectobin(unsignedlongdec,intlen)

{

inti=0;

staticcharbuf[256];

memset(buf,0,256);

memset(buf,0,len);

while(dec!

=0)

{

buf[i++]=dec%2+48;

dec=dec/2;

}

returnstrrev(buf);

}

//十六进制

voidCConvertDlg:

:

OnHex()

{

UpdateData();

GetDlgItem(IDC_Num)->SetFocus();//首先设置文本框为焦点

char*strnum;//用于存放文本框的字符串

unsignedlongnum=0,quan=1;//数值与权值

inti,len;//局部变量与字符长度

if(jinzhi!

=16){//上次选择不是16进制时,才进行下面操作

strnum=newchar[100];//先分配内存

memset(strnum,0,99);

len=m_Num.GetLength();//获取字符串长度

m_Num.MakeReverse();//先逆序,准备按权计算其十进制数转换

strnum=(LPSTR)(LPCTSTR)m_Num;//强行转换为字符串

if(jinzhi==10)//当前显示的是10进制?

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=10;

}

}

elseif(jinzhi==8)//当前显示的是8进制?

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=8;

}

}

elseif(jinzhi==2)//当前显示的是2进制?

{

for(i=0;i

{

if((strnum[i]=='0')||(strnum[i]=='1'))

{

num+=(strnum[i]-48)*quan;

quan*=2;

}

}

}

if(num!

=0)

{

strnum=ultoa(num,strnum,16);//用函数将整数转换成16进制形式字符串

m_Num=strnum;

}

elsem_Num="";

}//将数值转换为16进制到此完成

m_Num.MakeUpper();//字符串中小写字母大写输出

jinzhi=16;

UpdateData(FALSE);

}

//十进制

voidCConvertDlg:

:

OnTen()

{

UpdateData();

GetDlgItem(IDC_Num)->SetFocus();//首先设置文本框为焦点

char*strnum;

unsignedlongnum=0,quan=1;

inti,len;

if(jinzhi!

=10){

strnum=newchar[100];

memset(strnum,0,99);

len=m_Num.GetLength();

m_Num.MakeReverse();

strnum=(LPSTR)(LPCTSTR)m_Num;

if(jinzhi==16)//当前显示的是16进制?

{

for(i=0;i

{

if((strnum[i]>='0')&&(strnum[i]<='9'))

{

num+=(strnum[i]-'0')*quan;

}

elseif((strnum[i]>='a')&&(strnum[i]<='f'))//进行小写字母的处理

{

num+=(strnum[i]-'a'+10)*quan;

}

elseif((strnum[i]>='A')&&(strnum[i]<='F'))//进行大写字母的处理

{

num+=(strnum[i]-'A'+10)*quan;

}

quan*=16;

}

}

elseif(jinzhi==8)//当前显示的是8进制?

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=8;

}

}

elseif(jinzhi==2)//当前显示的是2进制?

{

for(i=0;i

{

if((strnum[i]=='0')||(strnum[i]=='1'))

{

num+=(strnum[i]-48)*quan;

quan*=2;

}

}

}

if(num!

=0)

{

strnum=ultoa(num,strnum,10);//用函数将整数转换成10进制形式字符串

m_Num=strnum;

}

elsem_Num="";

}//将数值转换为10进制到此完成

jinzhi=10;

UpdateData(FALSE);

}

//八进制

voidCConvertDlg:

:

OnEight()

{

UpdateData();

GetDlgItem(IDC_Num)->SetFocus();//首先设置文本框为焦点

char*strnum;

unsignedlongnum=0,quan=1;

inti,len;

if(jinzhi!

=8){

strnum=newchar[100];

memset(strnum,0,99);

len=m_Num.GetLength();

m_Num.MakeReverse();

strnum=(LPSTR)(LPCTSTR)m_Num;

if(jinzhi==16)

{

for(i=0;i

{

if((strnum[i]>='0')&&(strnum[i]<='9'))

{

num+=(strnum[i]-'0')*quan;

}

elseif((strnum[i]>='a')&&(strnum[i]<='f'))

{

num+=(strnum[i]-'a'+10)*quan;

}

elseif((strnum[i]>='A')&&(strnum[i]<='F'))

{

num+=(strnum[i]-'A'+10)*quan;

}

quan*=16;

}

}

elseif(jinzhi==10)

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=10;

}

}

elseif(jinzhi==2)

{

for(i=0;i

{

if((strnum[i]=='0')||(strnum[i]=='1'))

{

num+=(strnum[i]-48)*quan;

quan*=2;

}

}

}

if(num!

=0)

{

strnum=ultoa(num,strnum,8);//用函数将整数转换成8进制形式字符串

m_Num=strnum;

}

elsem_Num="";

}

jinzhi=8;

UpdateData(FALSE);

}

//二进制

voidCConvertDlg:

:

OnTwo()

{

UpdateData();

GetDlgItem(IDC_Num)->SetFocus();//首先设置文本框为焦点

char*strnum;

unsignedlongnum=0,quan=1;

inti,len,temp;

if(jinzhi!

=2){

strnum=newchar[100];

memset(strnum,0,99);

len=m_Num.GetLength();

m_Num.MakeReverse();

strnum=(LPSTR)(LPCTSTR)m_Num;

if(jinzhi==16)

{

for(i=0;i

{

if((strnum[i]>='0')&&(strnum[i]<='9'))

{

num+=(strnum[i]-'0')*quan;

}

elseif((strnum[i]>='a')&&(strnum[i]<='f'))

{

num+=(strnum[i]-'a'+10)*quan;

}

elseif((strnum[i]>='A')&&(strnum[i]<='F'))

{

num+=(strnum[i]-'A'+10)*quan;

}

quan*=16;

}

}

elseif(jinzhi==10)

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=10;

}

}

elseif(jinzhi==8)

{

for(i=0;i

{

num+=(strnum[i]-48)*quan;

quan*=8;

}

}

strnum=dectobin(num,36);//八位十六进制为32位二进制

m_Num=strnum;

len=m_Num.GetLength();

temp=len;

while(len>4)//从后向前依次每个4个二进制数插入一个空格符

{

m_Num.Insert(len-4,'');

len-=4;

}

len=m_Num.GetLength();

while(temp%4)

{

m_Num.Insert(0,'0');//在最前端补0,使4位对齐

temp+=1;

}

}

if(num==0)m_Num="";

jinzhi=2;

UpdateData(FALSE);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1