📄 desdemo.cpp
字号:
ofn.lpstrFile[0]='\0';//文件名缓冲第一个字节必须为NULL
ofn.nMaxFile=sizeof(pszFileName);//文件名缓冲的最大长度
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;//文件名和路径必须存在
if(GetOpenFileName(&ofn))
{//打开文件时获得文件名
fPlainFile=fopen(ofn.lpstrFile,"rb");//根据文件名以二进制格式打开指定文件
memcpy(pszFullName,ofn.lpstrFile,256);//保存文件名
SetWindowText(hEdit,"");//先清空
if(fPlainFile==NULL)
{
MessageBox(hWnd,"File open erro!","error",MB_OK);
return;
}
while(!feof(fPlainFile))
{
fgets(pszPlainText,128,fPlainFile);//读一行
SendMessage(hEdit,EM_SETSEL, -1,-1);//选择文本框末尾
SendMessage(hEdit,EM_REPLACESEL,0, (LPARAM)pszPlainText);//用读到的一行字符串替换末尾的空字符
memset(pszPlainText,0,128); //清缓冲
}
fclose(fPlainFile);//关闭流
pszTitle=ofn.lpstrFile+ofn.nFileOffset;//获得去掉路径的文件名
SetWindowText(hWnd,pszTitle);//设置窗口标题
char szStatusText[MAX_PATH]="明文:";
strcat(szStatusText,pszFullName);
SendMessage(hStatusBar,SB_SETTEXT,0,(LPARAM)(LPSTR)szStatusText);
}
bEdited=false;
break;
case IDF_SAVE:
GetWindowText(hWnd,pszTitle,128);
if(strcmp(pszTitle,"Untitled")==0)
{//如果未保存过,使用另存为的代码
SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDF_SAVE_AS,nCodeNotify),lParam);
}
else if(strcmp(pszTitle,"DES Demo")!=0)
{//如果已经保存过
fPlainFile=fopen(pszFullName,"w+");//pszFullName存放保存过的文件名
long nLineCount=SendMessage(hEdit,EM_GETLINECOUNT,0,0);//获得文本框行数
for(int i=0;i<nLineCount;i++)
{
ZeroMemory(pszPlainText,128);
pszPlainText[0]=(char)128;//发送消息前第一个字存放缓冲的大小
SendMessage(hEdit,EM_GETLINE,(WPARAM)i,(LPARAM)pszPlainText);
if(pszPlainText[0]!=0xffffff80)//假如读到了有效信息,就写入文件
fputs(pszPlainText,fPlainFile);
fputc('\n',fPlainFile);
}
bSaved=true;
bEdited=false;
fclose(fPlainFile);
}
break;
case IDF_SAVE_AS:
OPENFILENAME ofn1;
//char pszFileName[256];
memset(&ofn1,0,sizeof(ofn));
ofn1.lStructSize=sizeof(ofn);
ofn1.hwndOwner=hWnd;
ofn1.lpstrFilter="Text files\0*.txt\0All files\0*.*\0";
ofn1.lpstrFile=pszFileName;
ofn1.lpstrFile[0]='\0';
ofn1.nMaxFile=sizeof(pszFileName);
ofn1.Flags =OFN_OVERWRITEPROMPT |OFN_PATHMUSTEXIST;//检查路径并询问重名文件情况
ofn1.lpstrDefExt=pszExtend;
if(GetSaveFileName(&ofn1))
{
fPlainFile=fopen(ofn1.lpstrFile,"w+");//以文本模式读写方式打开文件
memcpy(pszFullName,ofn1.lpstrFile,256);//保存文件名
long nLineCount=SendMessage(hEdit,EM_GETLINECOUNT,0,0);//获得文本框行数
for(int i=0;i<nLineCount;i++)
{
ZeroMemory(pszPlainText,128);//清0
pszPlainText[0]=(char)128;//发送消息前第一个字存放缓冲的大小
SendMessage(hEdit,EM_GETLINE,(WPARAM)i,(LPARAM)pszPlainText);//获得文本框一行文本
if(pszPlainText[0]!=0xffffff80)//假如读到了有效信息,就写入文件
fputs(pszPlainText,fPlainFile);
fputc('\n',fPlainFile);//写一个回车
}
fclose(fPlainFile);
pszTitle=ofn1.lpstrFile+ofn1.nFileOffset;//获得去掉路径的文件名
SetWindowText(hWnd,pszTitle);//设置窗口标题
bSaved=true;
bEdited=false;
}
break;
case IDD_ENCRYPT:
if(bSource==true)
{//如果是加密文本框的内容
memset(pszFullName,0,MAX_PATH);//文件名清0
strcpy(pszFullName,pszPathName);//复制工作路径名
strcat(pszFullName,"\\temp.txt");//用temp.txt做缓冲文件
fPlainFile=fopen(pszFullName,"w+");//以读写方式打开temp.txt文件
long nLineCount=SendMessage(hEdit,EM_GETLINECOUNT,0,0);//获得文本框行数
for(int i=0;i<nLineCount;i++)
{
ZeroMemory(pszPlainText,128);//清0
pszPlainText[0]=(char)128;//发送消息前第一个字存放缓冲的大小
SendMessage(hEdit,EM_GETLINE,(WPARAM)i,(LPARAM)pszPlainText);//获得文本框一行文本
if(pszPlainText[0]!=0xffffff80)//假如读到了有效信息,就写入文件
fputs(pszPlainText,fPlainFile);
fputc('\n',fPlainFile);//写一个回车
}
fclose(fPlainFile);//关闭文件
}
//MessageBox(hWnd,pszFullName,"her",MB_OK);
if(strstr(pszFullName,"txt")!=NULL)
{ //如果文件名字符串包含了"txt"说明明文已经载入文件
memcpy(pszCipherName,pszPathName,strlen(pszPathName)+1);//复制路径名到密文文件名
strcat(pszCipherName,"\\ciphertext.txt");//添加加密输出文件名得到完整输出文件名
DES_EncryptFile(pszFullName,pszCipherName,uSubkeys);//加密文件
GetMenuItemInfo(hMenu,IDD_DECRYPT,FALSE,&mii);//以下几行使能解密菜单项
mii.fMask=MIIM_STATE;//屏蔽位为状态位
mii.fState=MFS_ENABLED;//设置状态为使能
SetMenuItemInfo(hMenu,IDD_DECRYPT,FALSE,&mii); //设置生效
GetWindowRect(hWnd,&rect);//获得窗口矩形
SetWindowPos(hWnd,NULL,0,rect.top,0,0,SWP_NOSIZE); //将窗口移动到最左边
if(!bCipherShow)
{//如果密文输出窗口未显示则创建一个无模式对话框
hCipherDlg=CreateDialog((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDD_CIPHER),hWnd,CipherDlg_Proc);
ShowWindow(hCipherDlg,1);//显示
bCipherShow=true;//显示标志置真
PostMessage(hCipherDlg,WM_WRITETEXT,(WPARAM)hWnd,(LPARAM)pszCipherName);//发送消息让密文窗口显示密文
}
else
ShowWindow(hCipherDlg,1);
PostMessage(hCipherDlg,WM_WRITETEXT,(WPARAM)hWnd,(LPARAM)pszCipherName);//发送消息让密文窗口显示密文
SendMessage(hCipherDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);//向密文窗口发送主窗口移动消息让其改变位置
if(IsWindow(hDecryptedDlg))//如果解密文窗口已经创建则发送主窗口移动消息
SendMessage(hDecryptedDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);
}
break;
case IDD_DECRYPT:
if(strstr(pszCipherName,"txt")!=NULL)
{//如果密文文件名中有txt字符串说明密文已经载入文件
memcpy(pszRecoveredName,pszPathName,strlen(pszPathName)+1);//
strcat(pszRecoveredName,"\\decrypted.txt");
DES_DecryptFile(pszCipherName,pszRecoveredName,uSubkeys);
GetWindowRect(hWnd,&rect);
if(bCipherShow)
SetWindowPos(hWnd,NULL,0,0,0,0,SWP_NOSIZE);
else
SetWindowPos(hWnd,NULL,0,rect.top,0,0,SWP_NOSIZE);
if(bDecryptedShow==false)
{
hDecryptedDlg=CreateDialog((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_DECRYPTED),hWnd,Decrypted_Proc);
ShowWindow(hDecryptedDlg,1);
bDecryptedShow=true;
}
else
ShowWindow(hDecryptedDlg,1);
PostMessage(hDecryptedDlg,WM_WRITETEXT,(WPARAM)hWnd,(LPARAM)pszRecoveredName);
SendMessage(hDecryptedDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);
if(bCipherShow)
{
SendMessage(hCipherDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);
}
}
break;
case IDS_FILE:
MENUITEMINFO mii;
mii.cbSize=sizeof(mii);
GetMenuItemInfo(GetMenu(hWnd),IDS_FILE,false,&mii);
mii.fMask=MIIM_STATE;
mii.fState=MFS_CHECKED;
SetMenuItemInfo(GetMenu(hWnd),IDS_FILE,false,&mii);
GetMenuItemInfo(GetMenu(hWnd),IDS_INPUT,false,&mii);
mii.fMask=MIIM_STATE;
mii.fState=MFS_UNCHECKED;
SetMenuItemInfo(GetMenu(hWnd),IDS_INPUT,false,&mii);
bSource=false;
memcpy(pszPlainText,"明文:",128);
SendMessage(hStatusBar,SB_SETTEXT,0,(LPARAM)pszPlainText);
memset(pszPlainText,0,128);
break;
case IDS_INPUT:
MENUITEMINFO mii1;
mii1.cbSize=sizeof(mii);
GetMenuItemInfo(GetMenu(hWnd),IDS_INPUT,false,&mii1);
mii1.fMask=MIIM_STATE;
mii1.fState=MFS_CHECKED;
SetMenuItemInfo(GetMenu(hWnd),IDS_INPUT,false,&mii1);
GetMenuItemInfo(GetMenu(hWnd),IDS_FILE,false,&mii1);
mii1.fMask=MIIM_STATE;
mii1.fState=MFS_UNCHECKED;
SetMenuItemInfo(GetMenu(hWnd),IDS_FILE,false,&mii1);
bSource=true;
memcpy(pszPlainText,"明文:文本框输入",128);
SendMessage(hStatusBar,SB_SETTEXT,0,(LPARAM)pszPlainText);
memset(pszPlainText,0,128);
break;
case IDS_KEY:
DialogBox((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_KEY),hWnd,Key_Proc);
break;
case IDA_ME:
hAbout=CreateDialog((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(IDD_ME),hWnd,About_Proc);
ShowWindow(hAbout,1);
break;
case IDS_WORKPATH:
BROWSEINFO bi; //使用文件夹浏览器对话框
memset(&bi,0,sizeof(bi));//为结构分配空间
bi.hwndOwner=hWnd;//父窗口
bi.pidlRoot=NULL;//根目录
bi.pszDisplayName=pszPathName;//缓冲地址
bi.lpszTitle="Work Path";//对话框显示的文字
bi.ulFlags=0;
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//打开文件夹对话框
if(pIDList)
{//如果按下OK
memset(pszPathName,0,MAX_PATH);
SHGetPathFromIDList(pIDList, pszPathName);//获得目录名
}
LPMALLOC lpMalloc;//释放资源
if(FAILED(SHGetMalloc(&lpMalloc)))
return;
lpMalloc->Free(pIDList);
lpMalloc->Release();
break;
}
}
BOOL On_InitDialog(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
int nScreenWidth=GetSystemMetrics(SM_CXSCREEN);//获得屏幕宽度
int nScreenHeight=GetSystemMetrics(SM_CYSCREEN);//获得屏幕高度
RECT rect;
GetClientRect(hWnd,&rect);//获得客户区矩形
int nClientWidth=rect.right-rect.left;//获得客户区宽度
int nClientHeight=rect.bottom-rect.top;//获得客户区高度
cx=(nScreenWidth-nClientWidth)/2;//设置对话框x坐标
cy=(nScreenHeight-nClientHeight)/2;//设置对话框y坐标
SetWindowPos(hWnd,NULL,cx,cy,0,0,SWP_NOSIZE);//设置窗口坐标和大小
SendMessage(hWnd,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)LoadIcon((HINSTANCE)GetWindowLong(hWnd,
GWLP_HINSTANCE),MAKEINTRESOURCE(IDI_ICON)));//设置窗口大图标
SendMessage(hWnd,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)LoadIcon((HINSTANCE)GetWindowLong(hWnd,
GWLP_HINSTANCE),MAKEINTRESOURCE(IDI_ICON)));//设置窗口小图标
pszTitle="Untitled";//设置窗口标题
SetWindowText(hWnd,pszTitle);
hMenu=GetMenu(hWnd);//得到窗口
mii.cbSize=sizeof(mii);
GetMenuItemInfo(hMenu,false,IDD_DECRYPT,&mii);
mii.fMask=MIIM_STATE;
mii.fState=MFS_DISABLED;
SetMenuItemInfo(hMenu,IDD_DECRYPT,false,&mii);//设置解密菜单项变灰
hStatusBar=CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_BORDER,"明文:",hWnd,0);
SendMessage(hStatusBar,SB_SETMINHEIGHT,25,0);
//MessageBox(hWnd,(PTSTR)uKey,"DD",MB_OK);
for(int i=0;i<8;i++)
uKey[i]=i+49;
GenerateSubkey(uKey,uSubkeys);
AntiSubkey(uSubkeys,uAntiSubkeys);
bSaved=false;
bEdited=false;
strcpy(pszPathName,"C:");
return false;
}
INT_PTR WINAPI Dlg_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{//窗口处理函数
switch(uMsg)
{//消息处理分支
case WM_COMMAND://处理命令消息
On_Command(hWnd,LOWORD(wParam),(LPARAM)GetDlgItem(hWnd,IDC_PLAINTEXT),HIWORD(wParam));
break;
case WM_INITDIALOG://处理对话框初始化消息
On_InitDialog(hWnd,(WPARAM)GetDlgItem(hWnd,IDC_PLAINTEXT),lParam);
break;
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONUP:
if(IsWindow(hCipherDlg))
SendMessage(hCipherDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);
if(IsWindow(hDecryptedDlg))
SendMessage(hDecryptedDlg,WM_PARENTMOVED,(WPARAM)hWnd,0);
SetForegroundWindow(hWnd);
break;
case WM_PAINT:
HDC hdc=GetDC(hWnd);
SetBkMode(hdc,TRANSPARENT);
char key[9];
memcpy(key,uKey,8);
key[8]=0;
char str[128]="Current key:";
strcat(str,key);
TextOut(hdc,15,-3,str,strlen(str));
break;
}
return 0;
}
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE,LPTSTR pszCmd,int)
{//主函数
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,Dlg_Proc);//对话框
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -