⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp2htmldlg.cpp

📁 此为C++源代码转换为HTML格式程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CPP2HTMLDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CPP2HTML.h"
#include "CPP2HTMLDlg.h"
#include "FolderDialog.h"
#include "AboutDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define NUM_OF_KEYWORDS 66
/*Array of pointers for Key-Words. C++ currently supports 66 keywords*/
char* keywords[66] =
{
	"asm", "auto", "bad_cast", "bad_typeid", "bool", "break", "case", "catch",
	"char", "class", "const", "const_cast", "continue", "default", "delete",
	"do", "double", "dynamic_cast", "else", "enum", "except", "explicit",
	"extern", "false", "finally", "float", "for", "friend", "goto", "if",
	"inline", "int", "long", "mutable", "namespace", "new", "operator",
	"private", "protected", "public", "register", "reinterpret_cast",
	"return", "short", "signed", "sizeof", "static", "static_cast", "struct",
	"switch", "template", "this", "throw", "true", "try", "type_info",
	"typedef", "typeid", "typename", "union", "unsigned", "using", "virtual",
	"void", "volatile", "while"
};
/////////////////////////////////////////////////////////////////////////////
// CCPP2HTMLDlg dialog

CCPP2HTMLDlg::CCPP2HTMLDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCPP2HTMLDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCPP2HTMLDlg)
	m_szHtmlSaveDir = _T("");
	m_szConvertingInfo = _T("感谢使用!");
	m_bMerge = FALSE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_nFileCount=0;
}

void CCPP2HTMLDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCPP2HTMLDlg)
	DDX_Control(pDX, IDC_HTMLDIR, m_btnHtmlDirSelect);
	DDX_Control(pDX, IDC_QUIT, m_btnQuit);
	DDX_Control(pDX, IDC_CONVERT, m_btnConvert);
	DDX_Control(pDX, IDC_ABOUT, m_btnAbout);
	DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDelete);
	DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd);
	DDX_Control(pDX, IDC_COMBO_HTMLDIR, m_ctrlHtmlSaveDir);
	DDX_Control(pDX, IDC_LIST_SOURCE, m_List);
	DDX_CBString(pDX, IDC_COMBO_HTMLDIR, m_szHtmlSaveDir);
	DDV_MaxChars(pDX, m_szHtmlSaveDir, 255);
	DDX_Text(pDX, IDC_FILECONVERTING, m_szConvertingInfo);
	DDV_MaxChars(pDX, m_szConvertingInfo, 300);
	DDX_Check(pDX, IDC_MERGE, m_bMerge);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCPP2HTMLDlg, CDialog)
	//{{AFX_MSG_MAP(CCPP2HTMLDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_HTMLDIR, OnHtmldir)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_BN_CLICKED(IDC_QUIT, OnQuit)
	ON_BN_CLICKED(IDC_CONVERT, OnConvert)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCPP2HTMLDlg message handlers

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

	// 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
	//列表头
	BuildColumn();

	m_imageList.Create(16, 16, ILC_MASK|ILC_COLORDDB, 1, 100);
	m_List.SetImageList(&m_imageList, LVSIL_SMALL);

	//初始化HTML文件存放下拉列表框
	m_ctrlHtmlSaveDir.SetMRURegKey ( _T("HTML MRU Folder") );
    m_ctrlHtmlSaveDir.SetMRUValueFormat ( _T("String #%d") );
    m_ctrlHtmlSaveDir.SetAutoRefreshAfterAdd ( TRUE );
    m_ctrlHtmlSaveDir.SetAutoSaveAfterAdd ( TRUE );
    m_ctrlHtmlSaveDir.LoadMRU();
    m_ctrlHtmlSaveDir.RefreshCtrl();
	
	m_btnAdd.SetIcon(IDI_ADD);
	m_btnAdd.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnAdd.SetRounded(TRUE);
	m_btnAdd.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnAdd.SetBtnCursor(IDC_HAND);

	m_btnDelete.SetIcon(IDI_DELETE);
	m_btnDelete.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnDelete.SetRounded(TRUE);
	m_btnDelete.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnDelete.SetBtnCursor(IDC_HAND);

	m_btnConvert.SetIcon(IDI_CONVERT);
	m_btnConvert.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnConvert.SetRounded(TRUE);
	m_btnConvert.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnConvert.SetBtnCursor(IDC_HAND);

	m_btnAbout.SetIcon(IDI_ABOUT);
	m_btnAbout.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnAbout.SetRounded(TRUE);
	m_btnAbout.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnAbout.SetBtnCursor(IDC_HAND);

	m_btnQuit.SetIcon(IDI_QUIT);
	m_btnQuit.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnQuit.SetRounded(TRUE);
	m_btnQuit.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnQuit.SetBtnCursor(IDC_HAND);

	m_btnHtmlDirSelect.SetIcon(IDI_FOLDER);
	m_btnHtmlDirSelect.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_btnHtmlDirSelect.SetRounded(TRUE);
	m_btnHtmlDirSelect.SetSound(MAKEINTRESOURCE(IDR_WAVEHOVER), ::GetModuleHandle(NULL));
	m_btnHtmlDirSelect.SetBtnCursor(IDC_HAND);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

// 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 CCPP2HTMLDlg::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 CCPP2HTMLDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

//创建列表框的列表头
void CCPP2HTMLDlg::BuildColumn()
{
	//设置ListCtrl属性
	DWORD oldStyle = m_List.GetExtendedStyle();
	m_List.SetExtendedStyle(oldStyle |LVS_EX_FULLROWSELECT
		                    |LVS_EX_ONECLICKACTIVATE
							|LVS_EX_UNDERLINEHOT
							|LVS_EX_GRIDLINES);
	m_List.SetTextColor(RGB(0,0,255));

	CRect	rect;
	m_List.GetWindowRect(&rect);
	int		nWidth=rect.Width();
	CString str;
	str.LoadString(IDS_FILENAME);
	m_List.InsertColumn(0,  str, LVCFMT_LEFT, 120, -1);
	str.LoadString(IDS_PATHNAME);
	m_List.InsertColumn(1,  str, LVCFMT_LEFT, nWidth-210, -1);
	str.LoadString(IDS_FILETYPE);
	m_List.InsertColumn(2,  str, LVCFMT_LEFT, 80, -1);
}

//选择存放HTML的文件夹
void CCPP2HTMLDlg::OnHtmldir() 
{
	CFolderDialog dlg("", "请选择存放HTML的文件夹:",BIF_RETURNONLYFSDIRS, this);
	if(dlg.DoModal()==IDOK)
	{
		m_szHtmlSaveDir = dlg.GetPathName();
		UpdateData(FALSE);
	}	
}

//添加文件
void CCPP2HTMLDlg::OnButtonAdd() 
{	
	CString strFilter;
	strFilter.LoadString ( IDS_FILEFILTER );
	char pBuffer[255*255] = "";

	CFileDialog dlgOpen ( 
		TRUE, NULL, NULL, 
		OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | 
		OFN_ENABLESIZING | OFN_OVERWRITEPROMPT,
		strFilter, NULL );
	dlgOpen.m_ofn.lpstrTitle = "请选择源文件";
	// Pointer to file name buffer
	dlgOpen.m_ofn.lpstrFile = pBuffer;
	// Max number of files you can open once
	dlgOpen.m_ofn.nMaxFile = sizeof ( pBuffer );
	if ( dlgOpen.DoModal () == IDOK )
	{
		POSITION pos;
		pos = dlgOpen.GetStartPosition ();
		CString strFileName;   //文件名
		CString strPath;	   //路径名
		CString strTypeName;   //类型
		while ( pos )
		{
			strPath= dlgOpen.GetNextPathName ( pos );
			if(!IfExistInList(strPath))
			{
				SHFILEINFO sfi;
				if (::SHGetFileInfo (strPath, 
					FILE_ATTRIBUTE_NORMAL, 
					&sfi, 
					sizeof(SHFILEINFO),
					SHGFI_USEFILEATTRIBUTES
					| SHGFI_DISPLAYNAME 
					| SHGFI_TYPENAME 
					| SHGFI_ICON
					| SHGFI_SMALLICON ))
				{	
					CString str;
					m_imageList.Add(sfi.hIcon);
					strFileName.Format("%s",sfi.szDisplayName);
					strTypeName.Format("%s",sfi.szTypeName);
					m_List.InsertItem(m_nFileCount,strFileName,m_nFileCount);
					m_List.SetItemText(m_nFileCount,1,strPath);
					m_List.SetItemText(m_nFileCount,2,strTypeName);
					m_PathArray.Add(strPath);
					m_FileNameArray.Add(strFileName);
					m_nFileCount++;
				}
			}	
		}
	}
}

//删除所有添加的文件
void CCPP2HTMLDlg::OnButtonDelete() 
{
	m_imageList.DeleteImageList();
	m_nFileCount=0;
	m_PathArray.RemoveAll();
	m_FileNameArray.RemoveAll();
	m_List.DeleteAllItems();

	m_imageList.Create(16, 16, ILC_MASK|ILC_COLORDDB, 1, 100);
}

//退出
void CCPP2HTMLDlg::OnQuit() 
{
	CDialog::OnOK();
}

//要添加的文件是否已经添加到列表框中
BOOL CCPP2HTMLDlg::IfExistInList(const CString &szPath)
{
	BOOL ret=FALSE;
	for(int i=0; i<m_PathArray.GetSize(); i++)
	{
		if(szPath == m_PathArray.GetAt(i))
		{
			ret=TRUE;
			break;
		}
	}
	return ret;
}

//开始转换
void CCPP2HTMLDlg::OnConvert() 
{
	if(!UpdateData(TRUE))
	{
		return ;
	}
	if(!IsDirExist(m_szHtmlSaveDir))
	{
		CString strText;
		CString strCaption;
		strText.LoadString( IDS_SAVEDIRERROR );
		strCaption.LoadString( IDS_CAPTION );
		MessageBox(strText,strCaption,MB_OK | MB_ICONERROR);
		m_szHtmlSaveDir=_T("");
		UpdateData(FALSE);
		return ;
	}
	if(m_szHtmlSaveDir[m_szHtmlSaveDir.GetLength()-1]!='\\')
	{
		m_szHtmlSaveDir+=_T("\\");
	}
	

	m_ctrlHtmlSaveDir.AddToMRU(m_szHtmlSaveDir);

	GetDlgItem(IDC_CONVERT)->EnableWindow(FALSE);

	CString szHtmlFilePath; //转换后的HTML存放路径
	CString szHtmlFileName; //转换后的HTML文件名(规则:如不合并,则My.cpp变为My_cpp.html,否则,为C++2HTML.HTML)
	TCHAR   *pdest=NULL;
	//int     result;
	for(int i=0;i < m_PathArray.GetSize(); i++)
	{
		if(!m_bMerge)
		{
			szHtmlFileName=m_FileNameArray.GetAt(i);
			pdest=strrchr(szHtmlFileName,'.');
			//result=pdest-szHtmlFileName+1;
			//szHtmlFileName=szHtmlFileName.Left(result);
			*pdest='_';
			szHtmlFileName+= _T(".html");
		}
		else
		{
			szHtmlFileName=_T("C++2HTML.HTML");
		}
		szHtmlFilePath=m_szHtmlSaveDir+szHtmlFileName;			
		m_szConvertingInfo = _T("正在转换:") + m_PathArray.GetAt(i);
		UpdateData(FALSE);
		Convert(m_PathArray.GetAt(i),szHtmlFilePath);
	}
	GetDlgItem(IDC_CONVERT)->EnableWindow(TRUE);
	m_szConvertingInfo = _T("完毕转换!");
	UpdateData(FALSE);
}

//判断文件夹是否存在
BOOL CCPP2HTMLDlg::IsDirExist(const CString &strDirPath)
{
	
	char szCurrentDiretory[MAX_PATH];
	GetCurrentDirectory(MAX_PATH,szCurrentDiretory);
	BOOL bRet;
	bRet=SetCurrentDirectory(strDirPath);
	SetCurrentDirectory(szCurrentDiretory);
	return bRet;
}

//===================================================
//=================转换函数 robin 2003.5=============
//===================================================
void CCPP2HTMLDlg::Convert(LPCTSTR szCppFilePath, LPCTSTR szHtmlFilePath)
{
	CFile  CppFile;
	CFile  HtmlFile;
	if(!CppFile.Open(szCppFilePath,CFile::modeRead))
	{
		return;
	}
	if(!HtmlFile.Open(szHtmlFilePath,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite))
	{
		return;
	}

	int flag, key_flag = 0;

	unsigned char ch;
	
	try
	{
		HtmlFile.SeekToEnd();
		char szEnd='\n';
		HtmlFile.Write(&szEnd,sizeof(char));
		/*Write HTML HEADER INFO into output file*/
		CString szText;
		szText = _T("<html>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("<head>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("<title> HTML generated by C++2Html </title>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("<style>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("body\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("{\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("   font-family: verdana;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-size: 15px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   color: black;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "}\r\n\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "B\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "{\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-family: verdana;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-size: 11px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "}\r\n\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "table\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "{\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-family: verdana;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-size: 15px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   color: black;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "}\r\n\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "pre.C_CPP_file\r\n" );
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "{\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   background-color: silver;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   color: black;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   border-bottom: black 1px solid;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   border-left: black 1px solid;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   border-right: black 1px solid;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   border-top: black 1px solid;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   margin-left: auto;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   margin-right: auto;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   padding-bottom: 3px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   padding-left: 3px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   padding-right: 3px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   padding-top: 3px;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-family: courier;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   font-size: 9pt;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "   text-align: left;\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "}\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "</style>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "</head>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T("<body bgcolor=#eeeeee text=#000000 link=#888888 alink=#888888 vlink=#888888>\r\n");
		HtmlFile.Write(szText,szText.GetLength());
		szText = _T( "<div align=center>\r\n");
		HtmlFile.Write(szText,szText.GetLength());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -