📄 perfectonedlg.cpp
字号:
// perfectoneDlg.cpp : implementation file
//
#include "stdafx.h"
#include "perfectone.h"
#include "perfectoneDlg.h"
#include <stdio.h>
#include <iostream>
using namespace std;
#include <string.h>
#include <stdlib.h>
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPerfectoneDlg dialog
CPerfectoneDlg::CPerfectoneDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPerfectoneDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPerfectoneDlg)
m_NumString0 = _T("");
m_NumString4 = _T("");
m_NumString3 = _T("");
m_NumString2 = _T("");
m_NumString1 = _T("");
m_Sign = _T("");
m_Jie = _T("");
m_OrderHead = _T("");
m_HexOrder = _T("");
m_BinOrder = _T("");
m_Order = 0;
m_Value = 0.0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPerfectoneDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPerfectoneDlg)
DDX_Text(pDX, IDC_FIRST, m_NumString0);
DDX_Text(pDX, IDC_FIFTH, m_NumString4);
DDX_Text(pDX, IDC_FOUTH, m_NumString3);
DDX_Text(pDX, IDC_THIRD, m_NumString2);
DDX_Text(pDX, IDC_SECOND, m_NumString1);
DDX_Text(pDX, IDC_SIGN, m_Sign);
DDX_Text(pDX, IDC_JIE, m_Jie);
DDX_Text(pDX, IDC_ORDERHEAD, m_OrderHead);
DDX_Text(pDX, IDC_HEXORDER, m_HexOrder);
DDX_Text(pDX, IDC_BINORDER, m_BinOrder);
DDX_Text(pDX, IDC_ORDER, m_Order);
DDX_Text(pDX, IDC_VALUE, m_Value);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPerfectoneDlg, CDialog)
//{{AFX_MSG_MAP(CPerfectoneDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPerfectoneDlg message handlers
BOOL CPerfectoneDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CPerfectoneDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CPerfectoneDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CPerfectoneDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CPerfectoneDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);
//定义命令编码变量
int Order=m_Order;
InputValue=m_Value;
char Order_String_Bin[9];
if(Order>=0&&Order<=1999)//得到命令代码(没有模式代码)
{
itoa(Order, Order_String_Bin, 16);
strcat(Order_String_Bin,"0000");
}
else
{
itoa(Order-1999, Order_String_Bin, 16);
strcat(Order_String_Bin,"8000");
}
m_OrderHead=CPerfectoneDlg::MyFomartString(Order_String_Bin, 7);
if(InputValue>=0)//得到符号位
{
m_Sign="0";
}
else
{
m_Sign="1";
}
//定义数值计算变量
int LengthofInputValue;//阶数
double EndNum; //尾数
double PEndNum; //百分比尾数
int NumString[5];//保存尾数的5位
char LengthofInputValueBin[9];
LengthofInputValue=floor(log(InputValue) / log(2));//得到阶数
CString aa=MyIntToString(LengthofInputValue);
AfxMessageBox(aa);
itoa(LengthofInputValue+127,LengthofInputValueBin,2);//得到输入值二进制形式
m_Jie=CPerfectoneDlg::MyFomartString(LengthofInputValueBin, 8);//模式化阶
EndNum=InputValue-(double)pow(2,LengthofInputValue);//得到尾数
PEndNum=EndNum/pow(2,LengthofInputValue);//尾数百分比
//得到尾数的五位
NumString[0]=PEndNum*16;
NumString[1]=(PEndNum*16-NumString[0])*16;
NumString[2]=((PEndNum*16-NumString[0])*16-NumString[1])*16;
NumString[3]=(((PEndNum*16-NumString[0])*16-NumString[1])*16-NumString[2])*16;
NumString[4]=((((PEndNum*16-NumString[0])*16-NumString[1])*16-NumString[2])*16-NumString[3])*16;
//得到尾数的五位二进制形式
m_NumString0=CPerfectoneDlg::MakeEndBin(NumString[0]);
m_NumString1=CPerfectoneDlg::MakeEndBin(NumString[1]);
m_NumString2=CPerfectoneDlg::MakeEndBin(NumString[2]);
m_NumString3=CPerfectoneDlg::MakeEndBin(NumString[3]);
m_NumString4=CPerfectoneDlg::MakeEndBin(NumString[4]);
//输入数值的IEEE二进制形式
m_BinOrder=m_Sign+m_Jie+m_NumString0+m_NumString1+m_NumString2+m_NumString3+m_NumString4+"000";
char * IEEEBin=m_BinOrder.GetBuffer(0);
char IEEEHex[8][5];//十六进制的IEEE数
for(int i=0;i<8;i++)
{
char temp_string[5]="";
int temp_int=0;
for(int j=0;j<4;j++)
{
int temp_bit=0;
char temp_char[2]="";
temp_char[0]=IEEEBin[4*i+j];
temp_bit=atoi(temp_char);
temp_int=temp_int+temp_bit*pow(2,(3-j));
}
itoa(temp_int,IEEEHex[i], 16);
}
char FinalHex[9]="";//最后的十六进制数
strcat(FinalHex,m_OrderHead);
for(int i_f=0;i_f<8;i_f++)
{
strcat(FinalHex,IEEEHex[i_f]);
}
m_HexOrder=FinalHex;
//CDialog::OnOK();
UpdateData(false);
}
char * CPerfectoneDlg::MakeEndBin(int x)//模式化0到15之间的数
{
int num=x;
char * numstring;
switch(num)
{
case 0:
numstring="0000";
break;
case 1:
numstring="0001";
break;
case 2:
numstring="0010";
break;
case 3:
numstring="0011";
break;
case 4:
numstring="0100";
break;
case 5:
numstring="0101";
break;
case 6:
numstring="0110";
break;
case 7:
numstring="0111";
break;
case 8:
numstring="1000";
break;
case 9:
numstring="1001";
break;
case 10:
numstring="1010";
break;
case 11:
numstring="1011";
break;
case 12:
numstring="1100";
break;
case 13:
numstring="1101";
break;
case 14:
numstring="1110";
break;
case 15:
numstring="1111";
break;
default:
AfxMessageBox("数值不在0到15之间!");
numstring="errr";
}
return numstring;
}
CString CPerfectoneDlg::MyFomartString(char *str, int length)//模式化字符串
{
CString cstr;
cstr.Format("%s",str);
int len=cstr.GetLength();
if(len<length)
{
for(int i=0;i<length-len;i++)
{
cstr.Insert(0,'0');
}
}
return cstr;
}
CString CPerfectoneDlg::MyIntToString(int x)//整型到CString型转换
{
CString cstr;
//char * str=new char[];
//itoa(x, str, 10);
cstr.Format("%d",x);
//delete []str;
return cstr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -