【C语言】【windows】---在线翻译器
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

一楼度娘……


这音乐不错……

2012年07月04日 04点07分 1
level 10
堕erbi 楼主

四天前再做实训的时候就想整这个程序了……三天前开始使用控制台写出来一个简单的单行翻译……转界面后为多行文本翻译(要处理的东西好多[拍砖]就那些独个字符独个字符地进行处理就调试了好久……)昨天、前天和今天考试……有心情的时候才打开VS开工……[抖胸]
刚刚整掉了几个BUG,然后整理代码,这个程序就完工了。
话说现在已经正式放假了……[心],不过过两天回家就开始断网的生活了……[心碎]

2012年07月04日 04点07分 2
level 10
堕erbi 楼主

/*******************************************************************************
这个程序对应任务:【光影队】【任务】【LV5】在线翻译器
传送门:https://tieba.baidu.com/p/1696488719
/*******************************************************************************

2012年07月04日 04点07分 3
level 10
堕erbi 楼主

程序的实现原理见任务介绍……[揉脸]
其实就是利用谷歌翻译……
最麻烦的是对于网页内容的提取……
(简体-》繁体)

2012年07月04日 04点07分 5
level 10
堕erbi 楼主
(中文-》日文)
2012年07月04日 04点07分 6
level 10
堕erbi 楼主

/******************************************************************************
开始全部源代码吧……[Yeah]
******************************************************************************/

2012年07月04日 04点07分 7
level 10
堕erbi 楼主

/******************************************************************************
源代码:
MainFrame.cpp:主函数,消息处理函数
Translation.cpp:各个自定义函数
Translation.h:头文件包含,函数声明等
resource.h:编译器自动生成
******************************************************************************/

2012年07月04日 04点07分 8
level 10
堕erbi 楼主

/******************************************************************************
Translation.h:头文件包含,函数声明等[疑问]
******************************************************************************/

2012年07月04日 04点07分 9
level 10
堕erbi 楼主

#ifndef Translation_H_
#define Translation_H_
#include<windows.h>
#include<tchar.h>
#include<stdio.h>
#include <UrlMon.h>
#include<string.h>
#pragma comment(lib, "urlmon.lib")//URLDoloadToFile需要
#include"resource.h"
extern "C" __dec
lsp
ec(dllimport) int __stdcall SkinH_Attach();
#pragma comment(lib,"SkinH.lib")
void IniDialog(HWND hwnd);//初始化对话框
void Getlenght(HWND hwnd);//得到文本内容
void setString(char input[],int index,char NowTochange[]);
void ShowT(HWND hwnd,char URL[]);//集中处理
void GetComboInfo(HWND hwnd,int IDC,char SThide[]);//语言
void AddInputType(int whereadd,char input[],char add[],int num);//转码
void CheakInput(char input[]);//检查输入 void ReadTheFile(char* str);//读入文件 void GetInfo(char buffer[],int readsize);//获取结果 void GetTranText();//复制 void AddOutputType(int k,char Re[],char out,int num);
void Change(char Re[]);//替换字符串
#endif

2012年07月04日 04点07分 10
level 10
堕erbi 楼主

/******************************************************************************
Translation.h结束![超人]
******************************************************************************/

2012年07月04日 04点07分 11
level 10
堕erbi 楼主

/******************************************************************************
Translation.cpp:各个自定义函数[哈哈哈]
******************************************************************************/

2012年07月04日 04点07分 12
level 10
堕erbi 楼主

#include"Translation.h"
char S_Language[20]={0},T_Language[20]={0};//源语言,目标语言
HWND Hwnd;
int NextLine=0;//截取的段数
/*******************************************************************************************
初始化对话框
********************************************************************************************/
void IniDialog(HWND hwnd){
//左上角图标
HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hwnd, WM_SETICON, TRUE, (LPARAM)hIcon);
SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon);
//Combobox
HWND CONBOBHWND = GetDlgItem(hwnd,IDC_COMBO2);
SendMessage(CONBOBHWND,CB_INSERTSTRING,0,(LPARAM)_T("中文简体"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,1,(LPARAM)_T("中文繁体"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,2,(LPARAM)_T("英语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,3,(LPARAM)_T("日语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,4,(LPARAM)_T("韩语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,5,(LPARAM)_T("法语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,6,(LPARAM)_T("菲律宾语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,7,(LPARAM)_T("越南语"));
SendMessage(CONBOBHWND,CB_INSERTSTRING,8,(LPARAM)_T("拉丁语"));
HWND CONBOBHWND2 = GetDlgItem(hwnd,IDC_COMBO3);
SendMessage(CONBOBHWND2,CB_INSERTSTRING,0,(LPARAM)_T("中文简体"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,1,(LPARAM)_T("中文繁体"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,2,(LPARAM)_T("英语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,3,(LPARAM)_T("日语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,4,(LPARAM)_T("韩语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,5,(LPARAM)_T("法语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,6,(LPARAM)_T("菲律宾语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,7,(LPARAM)_T("越南语"));
SendMessage(CONBOBHWND2,CB_INSERTSTRING,8,(LPARAM)_T("拉丁语"));
}

2012年07月04日 04点07分 13
level 10
堕erbi 楼主

/*******************************************************************************************
从input里面的从头开始截取到index位置的字符串NowTochange [惊讶]
********************************************************************************************/
void setString(char input[],int index,char NowTochange[]){
int j=0;
int len=strlen(input);
while(j<=index){//截取前index个字符
NowTochange[j]=input[j];
j++;
}
j=0;
while(j<=len){//保留
input[j]=input[index+1+j];
j++;
}
NowTochange[index+1]='\0';
//MessageBoxA(NULL,NowTochange,"NowTochange",0);
//MessageBoxA(NULL,input,"input",0);
//
}

2012年07月04日 04点07分 14
level 10
堕erbi 楼主

/*******************************************************************************************
得到输入,字符太长就分割(从头到500个字符内出现的最后面的标点的位置),然后下载
********************************************************************************************/
void Getlenght(HWND hwnd){
NextLine=0;
GetComboInfo(hwnd,IDC_COMBO2,S_Language);
GetComboInfo(hwnd,IDC_COMBO3,T_Language);
char input[5000]={0};
GetDlgItemTextA(hwnd, IDC_EDIT1, input, sizeof(input));
CheakInput(input);
int inputlen=strlen(input);
char NowTochange[920]={0};
bool IsCutout=false;//里面是否有特殊标点
int num_while=0;//循环次数
while(inputlen>500){
int now=500;
num_while++;
while(now>0)
{
if((input[now]=='.')||(input[now]=='?')||(input[now]=='!')||(input[now]==',')||(input[now]==';')||(input[now]=='"')||input[now]=='\''){
setString(input,now,NowTochange);
IsCutout=true;
inputlen-=now+1;
break;
}
now--;
}
if(!IsCutout){//如果没有那就直接500切断
setString(input,500,NowTochange);
inputlen-=500;
} IsCutout=false;
//开始下载
ShowT(hwnd,NowTochange);
}
//开始下载?
ShowT(hwnd,input);
}
[可爱]

2012年07月04日 04点07分 15
level 10
堕erbi 楼主

/*******************************************************************************************
下载 [戳]
********************************************************************************************/
void ShowT(HWND hwnd,char NowTochange[]){
char URL[1024]={0};
//MessageBoxA(NULL,S_Language,T_Language,0);
sprintf(URL,"http://translate.google.cn/translate_t?q=%s&hl=zh-CN&langpair=%s| %s",NowTochange,S_Language,T_Language);
int k=URLDownloadToFileA(0,URL,"Chache.html",0,NULL);
if(k==S_OK)//下载成功
{
//MessageBoxA(NULL,URL,"URL",0);
ReadTheFile("Chache.html");
}
else{
MessageBoxA(NULL,URL,"下载数据失败,请确定电脑已经连接网络",MB_OK);
}
}

2012年07月04日 04点07分 16
level 10
堕erbi 楼主

/*******************************************************************************************
选择语言
********************************************************************************************/
void GetComboInfo(HWND hwnd,int IDC,char SThide[] ){
GetDlgItemTextA(hwnd, IDC, SThide, 20);
if(strcmp(SThide,"中文简体")==0){
strcpy(SThide,"zh-CN");
}
else if(strcmp(SThide,"中文繁体")==0){
strcpy(SThide,"zh-TW");
}
else if(strcmp(SThide,"英语")==0){
strcpy(SThide,"en");
}
else if(strcmp(SThide,"日语")==0){
strcpy(SThide,"ja");
}
else if(strcmp(SThide,"韩语")==0){
strcpy(SThide,"ko");
}
else if(strcmp(SThide,"法语")==0){
strcpy(SThide,"fr");
}
else if(strcmp(SThide,"菲律宾语")==0){
strcpy(SThide,"tl");
}
else if(strcmp(SThide,"越南语")==0){
strcpy(SThide,"vi");
}
else if(strcmp(SThide,"拉丁语")==0){
strcpy(SThide,"la");
}
else{
strcpy(SThide,"en");
}
}

2012年07月04日 04点07分 17
level 10
堕erbi 楼主

/*******************************************************************************************
转码
********************************************************************************************/
void AddInputType(int whereadd,char input[],char add[],int num){
for(int n=strlen(input);n>whereadd;n--){
input[n+num-1]=input[n];
}
for(int g=num-1;g>=0;g--){
input[whereadd+g]=add[g];
}
//MessageBoxA(NULL,input,"Add",0);
}

2012年07月04日 04点07分 18
level 10
堕erbi 楼主

/*******************************************************************************************
检查输入内容的末端
********************************************************************************************/
void CutNext(char input[]){ int j=strlen(input)-1;
while(1){
if((input[j]!='\r')&&(input[j]!='\n')){break;}
input[j]=' ';
j--;
//MessageBoxA(NULL,input,"末尾",0);
}
//MessageBoxA(NULL,input,"末尾不要换行",0);
}

2012年07月04日 04点07分 19
level 10
堕erbi 楼主

/*******************************************************************************************
检查输入,然后进行替换
********************************************************************************************/
void CheakInput(char input[]){
CutNext(input); for(int k=0;k<strlen(input);k++){
if(input[k]==' ')AddInputType(k,input,"%20",3);
if(input[k]=='\n'){AddInputType(k,input,"%0A",3);NextLine++;}
if(input[k]=='\r'){AddInputType(k,input,"%0A",3);}
}
}

2012年07月04日 04点07分 20
level 10
堕erbi 楼主

/*******************************************************************************************
读取文件
********************************************************************************************/
void ReadTheFile(char* str)
{ HANDLE pfile;
pfile = ::CreateFileA(str,GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE| FILE_ATTRIBUTE_NORMAL,NULL); // 用这个函数比OpenFile好 FILE_FLAG_DELETE_ON_CLOSE是打开后删除文件
if ( pfile == INVALID_HANDLE_VALUE)
{
MessageBoxA( NULL,"打开文件失败" ,"Error",MB_OK);
CloseHandle(pfile); // 一定注意在函数退出之前对句柄进行释放。
return; }
DWORD filesize=GetFileSize(pfile,NULL);
char* buffer=(char*)malloc((filesize+1)*sizeof(char));//// 最后一位为 '/0'。
ZeroMemory(buffer,sizeof(buffer));
DWORD readsize;
ReadFile(pfile,buffer,filesize,&readsize,NULL);
buffer[filesize]=0;
//对读取的网页信息(UTF_8编码)进行解码,转换为Unicode再转换为ASCII码
int wLen2 = MultiByteToWideChar(CP_UTF8, 0, buffer, -1, NULL, 0);
wchar_t* wStr2 = (wchar_t*)malloc(sizeof(wchar_t)*wLen2);//
MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wStr2, wLen2);
//unicode to gb2312
int aLen2 = WideCharToMultiByte(CP_ACP, 0, wStr2, -1, NULL, 0, NULL, NULL);
char* converted2 = (char*)malloc(sizeof(char)*aLen2);
WideCharToMultiByte(CP_ACP, 0, wStr2, -1, converted2, aLen2, NULL, NULL);
GetInfo(converted2,filesize); //读取信息
free(buffer);
free(wStr2);
free(converted2);
CloseHandle(pfile); // 关闭句柄。
}

2012年07月04日 04点07分 21
1 2 3 尾页