密码体制MFC
课程设计主题:密码体制.
运行环境:Microsoft Visual Studio.NET 2003
代码量: 511行
功能介绍:
1本系统分为以下几个功能块:
a) Hash 的使用
b) 恺撒密码体制
c) 对称密码体制
d) 非对称密码体制
(1).Hash的使用:
² 输入任意长度的数据输出相同长度的Hash代码,
² SHA1 Hash函数总是生成20个字节长度的Hash代码,
² MD5 Hash函数总是生成16个字节长度的Hash代码
(2).恺撒密码体制:
该模块通过恺撒密码体制对数据为进行加密和解密(只能对字母进行加解密对于其他字符无加密效果)
加密
解密
打开要加解密的文件
保存加解密结果
清零
关闭
(3).对称密码体制:
通过支持托管扩展使用DES的私钥进行加解密
此项目把私钥固定为“KeyAbcGG”
通过选择你要加密的文件进行加密,选择.enc文件进行解密,但解密时数据文本框中不能显示中文,列表框显示加解密情况。
(4).非对称密码体制:
通过支持托管扩展使用RSA对数据进行加密
a) 输入数据并对数据进行加密和保存
b) 从文件中打开并进行解密
公私钥对由RSACrypttoServiceProvider实例化生成88
密码体制MFC
================================================================================ MICROSOFT 基础类库: 0408008404 项目概述===============================================================================
应用程序向导已为您创建了此 0408008404 应用程序。此应用程序不仅介绍了使用 Microsoft 基础类的基本知识,而且是编写应用程序的起点。
此文件包含组成 0408008404 应用程序的每个文件的内容摘要。
0408008404.vcproj 这是使用“应用程序向导”生成的 VC++ 项目的主项目文件。 它包含有关生成文件的 Visual C++ 版本的信息,以及 有关用“应用程序向导”所选择的平台、配置和 项目功能的信息。
0408008404.h 这是应用程序的主头文件。 它包含其他 项目特定的头文件(包括 Resource.h),并声明 CMyApp 应用程序类。
0408008404.cpp 这是包含应用程序 类 CMyApp 的主应用程序源文件。
0408008404.rc 这是程序使用的所有 Microsoft Windows 资源 的列表。 它包含存储在 RES 子目录中 的图标、位图和光标。 可直接在 Microsoft Visual C++ 中编辑此文件。 项目资源包含在 2052 中。
res\My.ico 这是一个图标文件,用作应用程序的图标。 此 图标包含在主资源文件 0408008404.rc 中。
res\My.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。
/////////////////////////////////////////////////////////////////////////////
应用程序向导将创建一个对话框类:0408008404Dlg.h、0408008404Dlg.cpp - 对话框 这些文件包含 CMyDlg 类。 此类定义 应用程序主对话框的行为。 此对话框的模板包含在 0408008404.rc 中,而此文件可以在 Microsoft Visual C++ 中进行编辑。/////////////////////////////////////////////////////////////////////////////
其他功能:
ActiveX 控件 应用程序支持使用 ActiveX 控件。
打印支持和打印预览支持 应用程序向导已生成了一些代码,通过从 MFC 库调用 CView 类中的成员函数来 处理打印、打印设置和打印预览命令。/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.h、StdAfx.cpp 这些文件用于生成名为 0408008404.pch 的预编译头文件 (PCH) 和名为 StdAfx.obj 的预编译类型文件。
Resource.h 这是标准头文件,它定义新资源 ID。 Microsoft Visual C++ 将读取并更新此文件。
/////////////////////////////////////////////////////////////////////////////
其他说明:
应用程序向导使用“TODO:” 来指示应添加或自定义的源代码部分。
如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言不是操作系统的当前语言,则需要从 Microsoft Visual C++ 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 复制到计算机的 system 或 system32 目录下,并将其重命名为 MFCLOC.DLL。 (“XXX”代表语言缩写。 例如,MFC70DEU.DLL 包含翻译成德语的资源。) 如果不这样做,应用程序的某些 UI 元素将保留为操作系统的语言。
密码体制MFC// duicheng.cpp : 实现文件//
#include "stdafx.h"#include "0408008404.h"#include "duicheng.h"#include ".\duicheng.h"
// duicheng 对话框
IMPLEMENT_DYNAMIC(duicheng, CDialog)duicheng::duicheng(CWnd* pParent /*=NULL*/) : CDialog(duicheng::IDD, pParent) , m_strFileName(_T("")) , m_strFileContents(_T("")){ TCHAR buff[MAX_PATH]; GetModuleFileName(NULL,buff,MAX_PATH);m_strWorkingDir=System::IO::Path::GetDirectoryName(buff);}
duicheng::~duicheng(){}
void duicheng::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strFileName); DDX_Control(pDX, IDC_EDIT1, m_edtFileName); DDX_Text(pDX, IDC_EDIT2, m_strFileContents); DDX_Control(pDX, IDC_LIST3, m_lbxStatus);}
BEGIN_MESSAGE_MAP(duicheng, CDialog) ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_BN_CLICKED(IDC_Encrypt, OnBnClickedEncrypt) ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) ON_BN_CLICKED(IDC_Decrypt, OnBnClickedDecrypt)END_MESSAGE_MAP()
// duicheng 消息处理程序
void duicheng::OnBnClickedButton1(){UpdateData(); CFileDialog dlg(TRUE); dlg.m_ofn.lpstrInitialDir = m_strWorkingDir; dlg.m_ofn.lpstrFilter = _T("Text Files (*.txt)\0*.txt\0" "Encrypted Files (*.enc)\0*.enc\0" "Decrypted Files (*.dec)\0*.dec\0" "All Files (*.*)\0*.*\0" );
if (IDOK == dlg.DoModal()) { m_strFileName = dlg.GetPathName(); UpdateData(FALSE); m_edtFileName.SetSel(m_strFileName.GetLength(), m_strFileName.GetLength(), FALSE); }}
void duicheng::OnBnClickedCancel(){DestroyWindow();delete this;}void EncryptFile(String* inputFileName,String* outputFileName){#pragma push_macro("new")#undef new CryptoStream *cryptoStream; FileStream* outputFileStream; FileStream* inputFileStream;
try { String* keyString = S"KeyAbcGG"; Byte keyByteArray[] = Text::Encoding::Default->GetBytes(keyString); inputFileStream = new FileStream(inputFileName, FileMode::Open, FileAccess::Read);
outputFileStream = new FileStream(outputFileName, FileMode::Create, FileAccess::Write); DESCryptoServiceProvider *serviceProvider = new DESCryptoServiceProvider(); ICryptoTransform* encryptor = serviceProvider->CreateEncryptor(keyByteArray,keyByteArray); cryptoStream = new CryptoStream(outputFileStream, encryptor, CryptoStreamMode::Write); Byte bytesread[] = new Byte[129]; while(int n = inputFileStream->Read(bytesread, 0, 128)) { cryptoStream->Write(bytesread, 0, n); } } catch(Exception* e) { throw e; } __finally { cryptoStream->Close(); outputFileStream->Close(); inputFileStream->Close(); }#pragma pop_macro("new")}
void duicheng::OnBnClickedEncrypt(){#pragma push_macro("new")#undef new CWaitCursor wc;
UpdateData(); if (0 < m_strFileName.GetLength()) { FileStream* pFS; try { CString strStatus; m_strFileContents = _T("");
CString strOutputFile = m_strFileName; if (0 == strOutputFile.Right(4).CompareNoCase(_T(".dec"))) { strOutputFile = strOutputFile.Left(strOutputFile.GetLength() - 4) + _T(".enc"); } else { strOutputFile += _T(".enc"); }
strStatus.Format(_T("Encrypting file %s"), m_strFileName); EncryptFile(m_strFileName, strOutputFile); strStatus.Format(_T("%s successfully encrypted to file %s"), m_strFileName, strOutputFile); m_lbxStatus.InsertString(0, strStatus); m_lbxStatus.InsertString(0, _T("Attempting to read newly " "encrypted file"));
pFS = new FileStream(strOutputFile, FileMode::Open, FileAccess::Read); if (pFS->CanRead) { Byte buffer __gc[] = new Byte __gc[pFS->Length]; pFS->Read(buffer, 0, buffer->Length);
for (int i = 0; i < buffer->Length; i++) { CString c; c.Format(_T("%02x "), buffer[i]); m_strFileContents += c; } m_lbxStatus.InsertString(0, _T("Data read back and displayed")); m_strFileName = strOutputFile; } } catch(Exception* e) { m_lbxStatus.InsertString(0, (CString)e->Message); } __finally { pFS->Close(); } UpdateData(FALSE); } else { MessageBox::Show(S"You must supply an input file name."); }#pragma pop_macro("new")}
void DecryptFile(String* inputFileName,String* outputFileName){#pragma push_macro("new")#undef new CryptoStream *cryptoStream; FileStream* outputFileStream; FileStream* inputFileStream;
try { String* keyString = S"KeyAbcGG"; Byte keyByteArray[] = Text::Encoding::Default->GetBytes(keyString); inputFileStream = new FileStream(inputFileName, FileMode::Open, FileAccess::Read);
outputFileStream = new FileStream(outputFileName, FileMode::Create, FileAccess::Write); DESCryptoServiceProvider* serviceProvider = new DESCryptoServiceProvider(); ICryptoTransform* decryptor = serviceProvider->CreateDecryptor(keyByteArray, keyByteArray); cryptoStream = new CryptoStream(inputFileStream, decryptor, CryptoStreamMode::Read);
Byte bytesRead[] = new Byte[129]; while(int n = cryptoStream->Read(bytesRead, 0, 128)) { outputFileStream->Write(bytesRead,0,n); } } catch(Exception* e) { throw e; } __finally { cryptoStream->Close(); outputFileStream->Close(); inputFileStream->Close(); }#pragma pop_macro("new")
}
void duicheng::OnBnClickedDecrypt(){#pragma push_macro("new")#undef new CWaitCursor wc;
UpdateData(); if (0 < m_strFileName.GetLength()) { StreamReader* pSR; try { CString strStatus; m_strFileContents = _T(""); CString strOutputFile = m_strFileName; if (0 == strOutputFile.Right(4).CompareNoCase(_T(".enc"))) { strOutputFile = strOutputFile.Left(strOutputFile.GetLength() - 4) + _T(".dec"); } else { strOutputFile += _T(".dec"); }
strStatus.Format(_T("Decrypting file %s"), m_strFileName); DecryptFile(m_strFileName, strOutputFile); strStatus.Format(_T("%s successfully decrypted to file %s"), m_strFileName, strOutputFile); m_lbxStatus.InsertString(0, strStatus);
m_lbxStatus.InsertString(0, _T("Attempting to read " "newly decrypted file"));
pSR = new StreamReader(strOutputFile);
CString strCurrLine;
while (0 < pSR->Peek()) { strCurrLine = pSR->ReadLine(); m_strFileContents += strCurrLine; m_strFileContents += _T("\r\n"); }
m_lbxStatus.InsertString(0, _T("Data read back and displayed")); m_strFileName = strOutputFile; } catch(Exception* e) { m_lbxStatus.InsertString(0, (CString)e->Message);若图片无法显示请联系QQ3710167,密码体制MFC系统免费,转发请注明源于www.lwfree.cn } file name."); }#pragma pop_macro("new")}// HashCode.cpp : 实现文件//
#include "stdafx.h"#include "0408008404.h"#include "HashCode.h"#include ".\hashcode.h"
// CHashCode 对话框
IMPLEMENT_DYNAMIC(CHashCode, CDialog)CHashCode::CHashCode(CWnd* pParent /*=NULL*/) : CDialog(CHashCode::IDD, pParent) , m_strInputData(_T("")) , m_iStart(0) , m_iLength(0) , m_strSHA1Hash(_T("")) , m_strMD5Hash(_T("")) , m_strMD5HashSubstring(_T("")){}
CHashCode::~CHashCode(){}
void CHashCode::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strInputData); DDX_Text(pDX, IDC_EDIT2, m_iStart); DDX_Text(pDX, IDC_EDIT3, m_iLength); DDX_Text(pDX, IDC_EDIT4, m_strSHA1Hash); DDX_Text(pDX, IDC_EDIT5, m_strMD5Hash); DDX_Text(pDX, IDC_EDIT6, m_strMD5HashSubstring);}
BEGIN_MESSAGE_MAP(CHashCode, CDialog) ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) ON_BN_CLICKED(IDOK, OnBnClickedOk)END_MESSAGE_MAP()
// CHashCode 消息处理程序
void CHashCode::OnBnClickedCancel(){DestroyWindow();delete this;}
void CHashCode::OnBnClickedOk(){#pragma push_macro("new")#undef newtry{if(UpdateData()){try{m_strSHA1Hash=_T("");m_strMD5Hash=_T("");m_strMD5HashSubstring=_T("");UpdateData(FALSE);Byte barr[]=new Byte[m_strInputData.GetLength()];for(int i=0; i
(m_strInputData[i]);SHA1CryptoServiceProvider* csp1=new SHA1CryptoServiceProvider();MD5CryptoServiceProvider* csp2=new MD5CryptoServiceProvider();Byte hash[];
hash=csp1->ComputeHash(barr);m_strSHA1Hash=(CString)BitConverter::ToString(hash);
hash=csp2->ComputeHash(barr);m_strMD5Hash=(CString)BitConverter::ToString(hash);
hash=csp2->ComputeHash(barr,m_iStart,m_iLength);m_strMD5HashSubstring=(CString)BitConverter::ToString(hash);} MessageBox::Show(e->Message);}#pragma pop_macro("new")}
密码体制MFC// kaisa.cpp : 实现文件//
#include "stdafx.h"#include "0408008404.h"#include "kaisa.h"#include ".\kaisa.h"
// kaisa 对话框
IMPLEMENT_DYNAMIC(kaisa, CDialog)kaisa::kaisa(CWnd* pParent /*=NULL*/) : CDialog(kaisa::IDD, pParent) , m_ikey(0) , m_strInEdit(_T("")) , m_iCounter(0){}
kaisa::~kaisa(){}
void kaisa::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_ikey); DDX_Text(pDX, IDC_EDIT2, m_strInEdit); DDX_Text(pDX, IDC_COUNT, m_iCounter);}
BEGIN_MESSAGE_MAP(kaisa, CDialog) ON_BN_CLICKED(ID_CODE, OnBnClickedCode) ON_BN_CLICKED(ID_UNCODE, OnBnClickedUncode) ON_BN_CLICKED(ID_DISPLAY, OnBnClickedDisplay) ON_BN_CLICKED(ID_SAVE, OnBnClickedSave) ON_BN_CLICKED(ID_CLEAR, OnBnClickedClear) ON_BN_CLICKED(ID_CLOSE, OnBnClickedClose)END_MESSAGE_MAP()
// kaisa 消息处理程序
void kaisa::OnBnClickedCode(){UpdateData(TRUE); int iFileLength; iFileLength=m_strInEdit.GetLength(); CString buff=m_strInEdit; if (m_strInEdit.IsEmpty ()) {MessageBox::Show ("明文不能为空!"); return; }
for(int i=0;i='A'&&m_strInEdit[i]<='Z')m_strInEdit.SetAt(i,'A'+(m_strInEdit[i]-'A'+m_ikey)%26); if(m_strInEdit[i]!=' '&&m_strInEdit[i]>='a'&&m_strInEdit[i]<='z')m_strInEdit.SetAt(i,'a'-32+(m_strInEdit[i]-'a'+m_ikey)%26); } m_iCounter++; UpdateData(FALSE);}
void kaisa::OnBnClickedUncode(){UpdateData(TRUE); int iFileLength; iFileLength=m_strInEdit.GetLength(); CString buff=m_strInEdit; if (m_strInEdit.IsEmpty ()) {MessageBox::Show("密文不能为空!"); return; } for(int i=0;i='A'&&m_strInEdit[i]<='Z') m_strInEdit.SetAt(i,('Z'-('Z'-m_strInEdit[i]+m_ikey%26)%26)+32); else if(m_strInEdit[i]!=' '&&m_strInEdit[i]>='a'&&m_strInEdit[i]<='z') m_strInEdit.SetAt(i,'z'-('z'-m_strInEdit[i]+m_ikey)%26); } m_iCounter--; UpdateData(FALSE);}
void kaisa::OnBnClickedDisplay(){CFileDialog FileDlg(TRUE,_T("txt"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Text Files(*.txt)|*.txt|All Files(*.*)|*.*||")); if(FileDlg.DoModal()==IDOK) { CString strPath=FileDlg.GetPathName(); CFile file; file.Open(strPath, CFile::modeRead);
CString strFlag("thanks for your use"); char strHead[80]; file.Read(strHead,strFlag.GetLength()); strHead[strFlag.GetLength()]='\0'; if(strFlag!=CString(strHead)) { int iFileLength=file.GetLength(); BYTE *buff=(BYTE *)(new char[iFileLength+1]); file.SeekToBegin(); file.Read(buff,iFileLength); *((char *)buff+iFileLength)='\0'; file.Close(); m_strInEdit=buff; m_iCounter=0; UpdateData(FALSE); delete buff; } else { file.Read(&m_iCounter,sizeof(int)); CString strText; while(file.GetPosition()!=file.GetLength()) { char ch; file.Read(&ch,1); strText+=ch; } m_strInEdit=strText; UpdateData(FALSE); } }}
void kaisa::OnBnClickedSave(){UpdateData(TRUE); CFileDialog FileDlg(FALSE,_T("cod"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Text Files(*.txt)|*.txt|All Files(*.*)|*.*||"));
if(FileDlg.DoModal()==IDOK) { CString strPath=FileDlg.GetPathName(); CFile fileCoded; fileCoded.Open(strPath,CFile::modeCreate|CFile::modeWrite); int iLength; iLength=m_strInEdit.GetLength(); if(m_iCounter==0) fileCoded.Write((LPCTSTR)m_strInEdit,iLength); else { CString strFlag("The encoded text is :"); fileCoded.Write((LPCTSTR)strFlag,strFlag.GetLength()); fileCoded.Write(&m_iCounter,sizeof(int)); fileCoded.Write((LPCTSTR)m_strInEdit,iLength); } fileCoded.Close(); }}
void kaisa::OnBnClickedClear(){ DestroyWindow();delete this;}// 0408008404Dlg.cpp : 实现文件//
#include "stdafx.h"#include "0408008404.h"#include "0408008404Dlg.h"#include ".\0408008404dlg.h"#include "HashCode.h"#include "duicheng.h"#include "kaisa.h"#include "Rsa.h"#ifdef _DEBUG#define new DEBUG_NEW#endif//CString m_strWorkingDir;
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog{public: CAboutDlg();
// 对话框数据 enum { IDD = IDD_ABOUTBOX };
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现protected: DECLARE_MESSAGE_MAP()};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}
void CAboutDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()
// CMyDlg 对话框
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent){ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}
void CMyDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, OnBnClickedButton4)END_MESSAGE_MAP()
// CMyDlg 消息处理程序
BOOL CMyDlg::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); // 设置小图标//TCHAR buff[MAX_PATH]; //GetModuleFileName(NULL,buff,MAX_PATH);//m_strWorkingDir=System::IO::Path::GetDirectoryName(buff); return TRUE; // 除非设置了控件的焦点,否则返回 TRUE}
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){ if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); }}
// 如果向对话框添加最小化按钮,则需要下面的代码// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,// 这将由框架自动完成。
void CMyDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 CMyDlg::OnQueryDragIcon(){ return static_cast(m_hIcon);}
void CMyDlg::OnBnClickedButton1(){CHashCode *dlg=new CHashCode;dlg->Create(IDD_DIALOG1);dlg->ShowWindow(SW_NORMAL);}
void CMyDlg::OnBnClickedButton2(){duicheng *dlg=new duicheng;dlg->Create(IDD_DIALOG2);dlg->ShowWindow(SW_NORMAL);}
void CMyDlg::OnBnClickedButton3(){kaisa *dlg=new kaisa;dlg->Create(IDD_DIALOG3);dlg->ShowWindow(SW_NORMAL);}
void CMyDlg::OnBnClickedButton4(){ Rsa *dlg=new Rsa;dlg->Create(IDD_DIALOG4);dlg->ShowWindow(SW_NORMAL);}// 0408008404.cpp : 定义应用程序的类行为。//
#include "stdafx.h"#include "0408008404.h"#include "0408008404Dlg.h"
#ifdef _DEBUG#define new DEBUG_NEW#endif
// CMyApp
BEGIN_MESSAGE_MAP(CMyApp, CWinApp) ON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()
// CMyApp 构造
CMyApp::CMyApp(){ // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中}
// 唯一的一个 CMyApp 对象
CMyApp theApp;
// CMyApp 初始化
BOOL CMyApp::InitInstance(){ // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControls()。否则,将无法创建窗口。 InitCommonControls();
CWinApp::InitInstance();
AfxEnableControlContainer();
// 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CMyDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) }
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE;}