2 leeknlikun leeknlikun 于 2014.03.01 11:24 提问

C++代码转化为C#代码 求高手指点,写出注释谢谢啊

// scDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "sc.h"
#include "scDlg.h"
#include ".\scdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

// CscDlg 对话框

CscDlg::CscDlg(CWnd* pParent /*=NULL*/)
: CDialog(CscDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_strXin="a!dAA1$%^&IKMJNSD98574PO";
m_llNumber1=13693;
m_llNumber2=113;
}

void CscDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_COMBO1, m_GameNumber);

CString strTitle;
strTitle.Format("数字3趣味游戏上分码计算");
SetWindowText(strTitle);

((CEdit*)GetDlgItem(IDC_EDIT_RANDOM))->SetLimitText(15);
((CEdit*)GetDlgItem(IDC_EDIT_ADDSCORE))->SetLimitText(7);
((CEdit*)GetDlgItem(IDC_EDIT_ADDGAME))->SetLimitText(5); 

}

BEGIN_MESSAGE_MAP(CscDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
END_MESSAGE_MAP()

// CscDlg 消息处理程序

BOOL CscDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将\“关于\”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
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);
    }
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);         // 设置大图标
SetIcon(m_hIcon, FALSE);        // 设置小图标


InitGameName();


CFont * Font;
Font = new CFont;
Font->CreateFont(
        16,                           //   nHeight
        0,                            //   nWidth
        0,                            //   nEscapement
        0,                            //   nOrientation
        FW_BOLD,                      //   nWeight
        FALSE,                        //   bItalic
        FALSE,                        //   bUnderline
        0,                            //   cStrikeOut
        DEFAULT_CHARSET,              //   nCharSet
        OUT_DEFAULT_PRECIS,           //   nOutPrecision
        CLIP_DEFAULT_PRECIS,          //   nClipPrecision
        DEFAULT_QUALITY,              //   nQuality
        DEFAULT_PITCH|FF_SWISS,       //   nPitchAndFamily
        "黑体");

GetDlgItem(IDC_COMBO1)->SetFont(Font);
GetDlgItem(IDC_EDIT_RANDOM)->SetFont(Font);
GetDlgItem(IDC_EDIT_ADDSCORE)->SetFont(Font);
GetDlgItem(IDC_EDIT_ADDGAME)->SetFont(Font);
GetDlgItem(IDC_EDIT_ADDNUMBER)->SetFont(Font);

return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE

}

void CscDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
/*CAboutDlg dlgAbout;
dlgAbout.DoModal();*/
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CscDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // 使图标在工作矩形中居中
    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;

    // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
}
else
{
    CDialog::OnPaint();
}

}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CscDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}

void CscDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
if(!Validation())
{
return;
}
ShowSYInfo();
GetNumber();
}
void CscDlg::GetNumber()
{
GetDlgItemText(IDC_EDIT_RANDOM,m_strRandom);
GetDlgItemText(IDC_EDIT_ADDSCORE,m_strAddscore);
GetDlgItemText(IDC_EDIT_ADDGAME,m_strGame);
GetDlgItemText(IDC_EDIT_ADDNUMBER,m_strAddNumber);

if(m_strRandom=="")
{
    AfxMessageBox("随机码不能为空");
    return;
}

//1上分,2加场
//DMD5(MD5(分+随)+K,10)+DMD5(MD5(局+随)+K,10),后第4位是type,奇为上分,2为加场,0为两个都加
CString strKey=m_strArea+m_strXin;
LONGLONG llAddScore=_atoi64(m_strAddscore);
LONGLONG llAddGame=_atoi64(m_strGame);
if(llAddScore%100!=0)
{
    AfxMessageBox("请输入100的倍数");
    return;
}
if(llAddScore==0&&llAddGame==0)
{
    AfxMessageBox("分数和局数不能全为0");
    return;
}
if(llAddScore>5000000)
{
    AfxMessageBox("分数不能超过5000000");
    return;
}
if(llAddGame>50000)
{
    AfxMessageBox("场数不能超过50000");
    return;
}
if(m_strRandom.GetLength()!=15)
{
    AfxMessageBox("请输入15位的随机码");
    return;
}
LONGLONG llRandom=_atoi64(m_strRandom);
CString str1,str2,str3,str4,strTotal;
str1.Format("%015I64u",llRandom+llAddScore);
str1=MD5(str1)+strKey;
str1=DigitalMD5(str1,10);

str2.Format("%015I64u",llRandom+llAddGame);
str2=MD5(str2)+strKey;
str2=DigitalMD5(str2,10);

if(llAddScore>0&&llAddGame<=0)
{
    CString strT;
    str2=str2.Left(6)+"1"+str2.Right(3);
}
else if(llAddScore<=0&&llAddGame>0)
{
    CString strT;
    str2=str2.Left(6)+"2"+str2.Right(3);
}
else
{
    str2=str2.Left(6)+"0"+str2.Right(3);
}
m_strAddNumber=str1+str2;
SetDlgItemText(IDC_EDIT_ADDNUMBER,m_strAddNumber);
//UpdateWindow();

}

CString CscDlg::MD5(CString str)
{
TCHAR sz[33];
CString strmd5;
CMD5Encrypt::EncryptData(str,sz);
strmd5=sz;
return strmd5;
}
CString CscDlg::DigitalMD5(CString str,int Right)
{
CString strNumber;
CString strMD5=MD5(str);
static CRegexpT regexp("[:^digit:]");
char *a=regexp.Replace(strMD5,"");
strNumber=a;
regexp.ReleaseString(a);
if(Right!=0)
{
Right=min(strNumber.GetLength(),Right);
strNumber=strNumber.Right(Right);

    LONGLONG llNumber=_atoi64(strNumber);
    strNumber.Format("%010I64u",llNumber);
    if(strNumber.GetLength()>Right)
    {
        strNumber.Right(Right);
    }
}
return strNumber;

}

void CscDlg::Search(CStringArray& dest)
{
dest.RemoveAll();
SHFILEINFO sfi;

CFileFind* fileFind=new CFileFind();   

BOOL res = fileFind->FindFile("*.liu");   

int i=0;   

while(res)
{   

    res = fileFind->FindNextFile();   

    if(fileFind->IsDirectory())
    {
        continue;
    }

    SHGetFileInfo(fileFind->GetFilePath(),0,&sfi,sizeof(sfi),SHGFI_ICON);   

    dest.Add(fileFind->GetFileTitle());

    i++;
}

}
void CscDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if(OpenClipboard())//打开剪切板
{

    EmptyClipboard();//清空剪切板,让当前窗口进程拥有剪切板
    CString Str;
    GetDlgItemText(IDC_EDIT_ADDNUMBER,Str);//获取数据
    HANDLE hClip;
    hClip=GlobalAlloc(GMEM_MOVEABLE,Str.GetLength()+1);//分配内存对象返回地址(该函数是系统从全局堆中分配内存)
    char *pBuf;
    pBuf=(char *)GlobalLock(hClip);//锁定全局内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处
    strcpy(pBuf,Str);//将Str对象中的数据Copy到内存空间中
    GlobalUnlock(hClip);//解锁全局内存块
    SetClipboardData(CF_TEXT,hClip);//设置剪贴板数据
    CloseClipboard();//关闭
}

}
void CscDlg::InitGameName()
{
Search(m_strArrFileName);
int nCount=m_strArrFileName.GetCount();
for(int i=0;i<nCount;i++)
{
m_GameNumber.AddString(_T(m_strArrFileName.GetAt(i)));
}
m_GameNumber.SetCurSel(0);

int nIndex=m_GameNumber.GetCurSel();
m_strArea=m_strArrFileName.GetAt(nIndex);
CString strFile=m_strArea+".liu";
OnOpenDocument(strFile);

}

void CscDlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
int nIndex=m_GameNumber.GetCurSel();
m_strArea=m_strArrFileName.GetAt(nIndex);
CString strFile=m_strArea+".liu";
OnOpenDocument(strFile);
}
BOOL CscDlg::OnOpenDocument(CString strFileName)
{
CStdioFile file;
CString filePathName;
int row;
CString result;
CString strLine,strTemp;
row = 0;
file.Open(strFileName,CFile::modeRead);
while(file.ReadString(strLine))
{
char *str = strLine.GetBufferSetLength(strLine.GetLength());
char *p;

    if(strLine!="")
    {
        for (p=strtok(str,";");p!=NULL;p=strtok(NULL,";"))
        {
            strTemp = p;
            result+=strTemp;

        }
        row ++;
    }
}
m_MD5File=result;
return TRUE;

}
BOOL CscDlg::Validation()
{
//DMD5(MD5(机器号+AB)+m_strXin,10)+DMD5(m_strXin+机器号,10)
CString strOK=DigitalMD5(MD5(m_strArea+"AB")+m_strXin,10)+DigitalMD5(m_strXin+m_strArea,10);
//AfxMessageBox(strOK);
if(strOK!=m_MD5File)
{
return FALSE;
}
else
{
return TRUE;
}
}
BOOL CscDlg::ShowSYInfo()
{
CString strInfo;
CString strRandom,strScore,strInnings;
GetDlgItemText(IDC_EDIT_RANDOM,strRandom);
strScore=(strRandom.Left(9)).Right(8);
strInnings=(strRandom.Right(6)).Right(5);
int nScoreWei=atoi((strRandom.Left(9)).Left(1));
int nInningsWei=atoi((strRandom.Right(6)).Left(1));
FLOAT fSYSocre=atof(strScore)/13.0f;
FLOAT fSYInnings=atof(strInnings)/7.0f;
if(((int)(fSYSocre*100)%100)!=0||((int)(fSYInnings*100)%100)!=0)
{
strInfo.Format("剩余分数:%d,剩余局数:%d",0,0);
SetDlgItemText(IDC_STATIC_SY,strInfo);
return FALSE;
}
int nSYSocre=atoi(strScore)/13-m_llNumber1;
int nSYInnings=atoi(strInnings)/7-m_llNumber2;
if(nSYSocre<0||nSYInnings<0)
{
strInfo.Format("剩余分数:%d,剩余局数:%d",0,0);
SetDlgItemText(IDC_STATIC_SY,strInfo);
return FALSE;
}
strInfo.Format("剩余分数:%d,剩余局数:%d",nSYSocre,nSYInnings);
SetDlgItemText(IDC_STATIC_SY,strInfo);
return TRUE;
}

Csdn user default icon
上传中...
上传图片
插入图片