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

📄 prefdialogmacros.cpp

📁 Crimson编辑器的英文版,完成从韩文版变成英文版的移植,并且附带可执行文件和注册表文件,无需原先的安装包,是改写编辑器的最理想选择.
💻 CPP
字号:
#include "stdafx.h"
#include "cedtHeader.h"
#include "PrefDialog.h"


void CPreferenceDialog::InitMacrosPage()
{
	CString szText;

	m_lstMacroList.SetExtendedStyle( LVS_EX_FULLROWSELECT );
	szText.LoadString( IDS_PREF_MACROS_NAME );
	m_lstMacroList.InsertColumn( 0, szText, LVCFMT_LEFT, 159 );
	szText.LoadString( IDS_PREF_MACROS_HOT_KEY );
	m_lstMacroList.InsertColumn( 1, szText, LVCFMT_LEFT, 60  );

	m_btnMacroMoveUp.SetIcon( m_lstButtonImage.ExtractIcon(0) );
	m_btnMacroMoveDown.SetIcon( m_lstButtonImage.ExtractIcon(1) );
}

void CPreferenceDialog::SizeMacrosPage()
{
	INT nPosY;

	nPosY  = 26; m_stcMacroSettingsBox.MoveWindow(170, nPosY, 360, 175);
	nPosY += 10; m_lstMacroList.MoveWindow(180, nPosY, 240, 152);			m_btnMacroRemove.MoveWindow(430, nPosY, 70, 18);
	nPosY += 20; m_btnMacroMoveUp.MoveWindow(430, nPosY, 34, 18);			m_btnMacroMoveDown.MoveWindow(466, nPosY, 34, 18);

	nPosY  = 26 + 150;
	nPosY += 35; m_stcMacroItemBox.MoveWindow(170, nPosY, 360, 55);
	nPosY += 10; m_stcMacroText.MoveWindow(180, nPosY, 80, 14);				m_edtMacroText.MoveWindow(270, nPosY-3, 230, 18);
	nPosY += 20; m_stcMacroHotKey.MoveWindow(180, nPosY, 80, 14);			m_hkyMacroHotKey.MoveWindow(270, nPosY-3, 230, 18);

	nPosY += 35; m_btnMacroLoadMacros.MoveWindow(170, nPosY, 170, 20);		m_btnMacroSaveMacros.MoveWindow(360, nPosY, 170, 20);
}

void CPreferenceDialog::ShowMacrosPage()
{
	INT nCmdShow = (m_nActiveCategory == PREF_CATEGORY_MACROS) ? SW_SHOW : SW_HIDE;

	m_stcMacroSettingsBox.ShowWindow(nCmdShow);
	m_lstMacroList.ShowWindow(nCmdShow);			m_btnMacroRemove.ShowWindow(nCmdShow);
	m_btnMacroMoveUp.ShowWindow(nCmdShow);			m_btnMacroMoveDown.ShowWindow(nCmdShow);

	m_stcMacroItemBox.ShowWindow(nCmdShow);
	m_stcMacroText.ShowWindow(nCmdShow);			m_edtMacroText.ShowWindow(nCmdShow);
	m_stcMacroHotKey.ShowWindow(nCmdShow);			m_hkyMacroHotKey.ShowWindow(nCmdShow);

	m_btnMacroLoadMacros.ShowWindow(nCmdShow);		m_btnMacroSaveMacros.ShowWindow(nCmdShow);
}


BOOL CPreferenceDialog::LoadMacroBuffers()
{
	for(INT i = 0; i < 11; i++) {
		m_clsMacroBuffer[i].CopyContents(CCedtView::m_clsMacroBuffer[i]);
		if( i > 0 ) {
			m_lstMacroList.InsertItem(i-1, "");
			DispMacroText(i-1);
		}
	}

	m_lstMacroList.SetItemState(m_nActiveMacroBuffer, LVIS_SELECTED, LVIS_SELECTED);
	m_lstMacroList.EnsureVisible(m_nActiveMacroBuffer, FALSE);

	return TRUE;
}

BOOL CPreferenceDialog::SaveMacroBuffers()
{
	for(INT i = 0; i < 11; i++) {
		CCedtView::m_clsMacroBuffer[i].CopyContents(m_clsMacroBuffer[i]);
	}

	return TRUE;
}

BOOL CPreferenceDialog::FileLoadMacroBuffers(LPCTSTR lpszPathName)
{
	ifstream fin(lpszPathName, ios::in | ios::nocreate | ios::binary);
	if( ! fin.is_open() ) return FALSE;

	TCHAR szBuffer[2048]; INT nLength = strlen(STRING_USERMACROVER); fin.read((char *)szBuffer, nLength); szBuffer[nLength] = '\0';
	if( strcmp(szBuffer, STRING_USERMACROVER) ) { fin.close(); return FALSE; }

	for(INT i = 0; i < 11; i++) {
		if( ! m_clsMacroBuffer[i].StreamLoad(fin) ) { fin.close(); return FALSE; }
	}

	fin.close();
	return TRUE;
}

BOOL CPreferenceDialog::FileSaveMacroBuffers(LPCTSTR lpszPathName)
{
	ofstream fout(lpszPathName, ios::out | ios::binary);
	if( ! fout.is_open() ) return FALSE;

	INT nLength = strlen(STRING_USERMACROVER);
	fout.write((const char *)STRING_USERMACROVER, nLength);

	for( INT i = 0; i < 11; i++ ) {
		if( ! m_clsMacroBuffer[i].StreamSave(fout) ) { fout.close(); return FALSE; }
	}

	fout.close();
	return TRUE;
}

BOOL CPreferenceDialog::DispMacroText(INT nMacro)
{
	m_lstMacroList.SetItemText(nMacro, 0, GetMacroName(nMacro+1));
	m_lstMacroList.SetItemText(nMacro, 1, GetMacroHotKeyText(nMacro+1));
	return TRUE;
}

CString CPreferenceDialog::GetMacroName(INT nMacro)
{
	CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro];
	if( rBuffer.GetBufferCount() ) {
		if( rBuffer.m_szName.GetLength() ) return rBuffer.m_szName;
		else return "[Noname]";
	} else return "- Empty -";
}

CString CPreferenceDialog::GetMacroHotKeyText(INT nMacro)
{
	CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro];
	CString szHotKeyText = rBuffer.GetHotKeyText();
	if( ! szHotKeyText.GetLength() ) szHotKeyText.Format("Alt+%d", nMacro % 10);
	return szHotKeyText;
}

void CPreferenceDialog::OnItemchangedMacroList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if( (pNMListView->iItem >= 0) && (pNMListView->uNewState & LVIS_SELECTED) ) {
		INT nMacro = pNMListView->iItem; m_nActiveMacroBuffer = nMacro;
		CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro+1];

		m_edtMacroText.SetWindowText( rBuffer.m_szName );
		m_hkyMacroHotKey.SetHotKey( rBuffer.m_wVirtualKeyCode, rBuffer.m_wModifiers );

		m_edtMacroText.EnableWindow( rBuffer.GetBufferCount() );
		m_hkyMacroHotKey.EnableWindow( rBuffer.GetBufferCount() );
	}
	*pResult = 0;
}

void CPreferenceDialog::OnMacroLoadMacros() 
{
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;
	CString szFilter; szFilter.LoadString(IDS_FILTER_MACRO_BUFFER);
	CFileDialog dlg(TRUE, NULL, NULL, dwFlags, szFilter);

	CString szTitle; szTitle.LoadString(IDS_DLG_LOAD_MACRO_BUFFERS);
	CString szInitialDirectory = CCedtApp::m_szInstallDirectory + "\\tools";

	TCHAR szCurrentDirectory[MAX_PATH];
	GetCurrentDirectory( MAX_PATH, szCurrentDirectory );

	dlg.m_ofn.lpstrTitle = szTitle; dlg.m_ofn.lpstrInitialDir = szInitialDirectory;
	if( dlg.DoModal() != IDOK ) return;

	SetCurrentDirectory( szCurrentDirectory );
	FileLoadMacroBuffers( dlg.GetPathName() );

	for( INT i = 1; i < 11; i++ ) DispMacroText(i-1);
}

void CPreferenceDialog::OnMacroSaveMacros() 
{
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
	CString szFilter; szFilter.LoadString(IDS_FILTER_MACRO_BUFFER);
	CFileDialog dlg(FALSE, ".mac", NULL, dwFlags, szFilter);

	CString szTitle; szTitle.LoadString(IDS_DLG_SAVE_MACRO_BUFFERS);
	CString szInitialDirectory = CCedtApp::m_szInstallDirectory + "\\tools";

	TCHAR szCurrentDirectory[MAX_PATH];
	GetCurrentDirectory( MAX_PATH, szCurrentDirectory );

	dlg.m_ofn.lpstrTitle = szTitle; dlg.m_ofn.lpstrInitialDir = szInitialDirectory;
	if( dlg.DoModal() != IDOK ) return;

	SetCurrentDirectory( szCurrentDirectory );
	FileSaveMacroBuffers( dlg.GetPathName() );
}

void CPreferenceDialog::OnMacroRemove() 
{
	INT nMacro = m_nActiveMacroBuffer;
	CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro+1];

	rBuffer.DeleteContents();
	DispMacroText( nMacro );

	m_edtMacroText.SetWindowText( rBuffer.m_szName );
	m_hkyMacroHotKey.SetHotKey( rBuffer.m_wVirtualKeyCode, rBuffer.m_wModifiers );

	m_edtMacroText.EnableWindow( rBuffer.GetBufferCount() );
	m_hkyMacroHotKey.EnableWindow( rBuffer.GetBufferCount() );
}

void CPreferenceDialog::OnMacroMoveUp() 
{
	INT nMacro = m_nActiveMacroBuffer;
	CMacroBuffer & rBuffer0 = m_clsMacroBuffer[       0];
	CMacroBuffer & rBuffer1 = m_clsMacroBuffer[nMacro+0];
	CMacroBuffer & rBuffer2 = m_clsMacroBuffer[nMacro+1];

	if( nMacro > 0 ) {
		rBuffer0.CopyContents( rBuffer1 );
		rBuffer1.CopyContents( rBuffer2 );
		rBuffer2.CopyContents( rBuffer0 );

		DispMacroText( nMacro-1 );
		DispMacroText( nMacro+0 );

		m_lstMacroList.SetItemState( nMacro-1, LVIS_SELECTED, LVIS_SELECTED );
		m_lstMacroList.EnsureVisible( nMacro-1, FALSE );
	}
}

void CPreferenceDialog::OnMacroMoveDown() 
{
	INT nMacro = m_nActiveMacroBuffer;
	CMacroBuffer & rBuffer0 = m_clsMacroBuffer[       0];
	CMacroBuffer & rBuffer1 = m_clsMacroBuffer[nMacro+1];
	CMacroBuffer & rBuffer2 = m_clsMacroBuffer[nMacro+2];

	if( nMacro < 9 ) {
		rBuffer0.CopyContents( rBuffer1 );
		rBuffer1.CopyContents( rBuffer2 );
		rBuffer2.CopyContents( rBuffer0 );

		DispMacroText( nMacro+0 );
		DispMacroText( nMacro+1 );

		m_lstMacroList.SetItemState( nMacro+1, LVIS_SELECTED, LVIS_SELECTED );
		m_lstMacroList.EnsureVisible( nMacro+1, FALSE );
	}
}


void CPreferenceDialog::OnChangeMacroText() 
{
	INT nMacro = m_nActiveMacroBuffer;
	CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro+1];
	m_edtMacroText.GetWindowText( rBuffer.m_szName );
	DispMacroText( nMacro );
}

void CPreferenceDialog::OnChangeMacroHotKey()
{
	INT nMacro = m_nActiveMacroBuffer;
	CMacroBuffer & rBuffer = m_clsMacroBuffer[nMacro+1];
	m_hkyMacroHotKey.GetHotKey( rBuffer.m_wVirtualKeyCode, rBuffer.m_wModifiers );
	DispMacroText( nMacro );
}

⌨️ 快捷键说明

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