?? easysysdlg.cpp
字號:
{
CString strDDKEnvironmentName = m_strDDKVer + _T("BASE");
BOOL bRet = FALSE;
//set user's ddk Environment
HKEY hKeyEnvironment;
DWORD dwType = REG_SZ;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, ENVIRONMENT_PATH_USER, 0, KEY_WRITE, &hKeyEnvironment))
{
if ( ERROR_SUCCESS == RegSetValueEx(hKeyEnvironment,strDDKEnvironmentName,0,dwType,(LPBYTE)strDDKEnvironmentValue.GetBuffer(0),strDDKEnvironmentValue.GetLength()) )
{
bRet = TRUE;
::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("environment"));
}
RegCloseKey(hKeyEnvironment);
}
return bRet;
}
int CEasySYSDlg::CreateProject()
{
CString strPrjBaseDir = m_strPrjPath;
if ( strPrjBaseDir.Right(1) != _T("\\") )
{
strPrjBaseDir += _T("\\");
}
strPrjBaseDir += m_strPrjName;
if (!CreateDirectory(strPrjBaseDir, NULL))
{
if (ERROR_ALREADY_EXISTS != GetLastError())
{
MessageBox(_T("Can not create project directory."),
DIALOG_CAPTION, MB_ICONSTOP);
return -1;
}
}
strPrjBaseDir += _T("\\");
// upper case project name
CString strProjectNameU = m_strPrjName;
strProjectNameU.MakeUpper();
// upper case first character of project name, not needed?
CString strProjectNameA = m_strPrjName;
strProjectNameA.MakeLower();
strProjectNameA.SetAt(0, toupper(m_strPrjName[0]));
// frist create .dsw
CString strDSWFileName = strPrjBaseDir + m_strPrjName;
strDSWFileName += _T(".dsw");
CFileFind fFind;
if (fFind.FindFile(strDSWFileName))
{
// project already exist
DWORD ret = MessageBox(_T("Project files already exist, overwrite?"),
DIALOG_CAPTION, MB_YESNO|MB_ICONQUESTION);
if ( ret == IDNO )
{
return -3;
}
}
CFile file;
CString strDSWFileContent = LoadText(MAKEINTRESOURCE(IDR_DSW));
strDSWFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
if (!file.Open(strDSWFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
file.Write(strDSWFileContent, (strDSWFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
/*
// get softice installed directory
CString strNMsym = GetSoftICEInstallDir();
if ( !strNMsym.IsEmpty() )
{
if ( strNMsym.Right(1) != "\\" ) strNMsym += "\\";
strNMsym += "nmsym.exe";
}
strNMsym = "$(DRIVERWORKS)\\bin\\nmsym.exe";
*/
// 2nd, create .dsp
int iProjectCount = 0;
CString strDSPFileName = strPrjBaseDir + m_strPrjName;
strDSPFileName += _T(".dsp");
if (!file.Open(strDSPFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strDSPFileContent;
strDSPFileContent = LoadText(MAKEINTRESOURCE(IDR_DSP));
CString strProjectConfigNames;
CString strProjectConfigs;
CString strProjectConfigName2s;
int nIndex;
int i = 0;
//count for the project, it's useful in the first project and last project
while( (nIndex = GetCheckItem(TARGET_OS, i)) != -1)
{
iProjectCount++;
//create $(PROJECT_CONFIG_NAME) in dsp
CString strProjectConfigName = LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG_NAME));
strProjectConfigName.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
strProjectConfigNames += strProjectConfigName;
//create $(PROJECT_CONFIG) in dsp
CString strProjectConfig = LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG));
strProjectConfig.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
//when the ddk is same as target os, such as WNETWNET, convert to WNET
if (m_strDDKVer.CollateNoCase(g_options[nIndex].szInter) == 0)
{
strProjectConfig.Replace(_T("$(DDK_VER)"), _T(""));
}
else
{
strProjectConfig.Replace(_T("$(DDK_VER)"), m_strDDKVer);
}
if (iProjectCount == 1)
{
strProjectConfig.Replace(_T("$(IF_FLAG)"), _T("!IF"));
strDSPFileContent.Replace(_T("$(DEFAULT_TARGET_OS)"), g_options[nIndex].szInter);
}
else
{
strProjectConfig.Replace(_T("$(IF_FLAG)"), _T("!ELSEIF"));
}
if (iProjectCount == m_nTosNum)
{
strProjectConfig.Replace(_T("$(ENDIF_FLAG)"), _T("!ENDIF"));
}
else
{
strProjectConfig.Replace(_T("$(ENDIF_FLAG)"), _T(""));
}
strProjectConfigs += strProjectConfig;
//create $(PROJECT_CONFIG_NAME_2)
CString strProjectConfigName2 = LoadText(MAKEINTRESOURCE(IDR_DSP_PROJECT_CONFIG_NAME_2));
strProjectConfigName2.Replace(_T("$(TARGET_OS)"), g_options[nIndex].szInter);
strProjectConfigName2s += strProjectConfigName2;
//
i++;
}
strDSPFileContent.Replace(_T("$(PROJECT_CONFIG_NAME)"), strProjectConfigNames);
strDSPFileContent.Replace(_T("$(PROJECT_CONFIG)"), strProjectConfigs);
strDSPFileContent.Replace(_T("$(PROJECT_CONFIG_NAME_2)"), strProjectConfigName2s);
//ReplaceInString(strDSPFileContent, "$(SOFTICE_FILE_PATH)", strNMsym);
strDSPFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
file.Write(strDSPFileContent, (strDSPFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 3rd, create .c file
CString strCFileName = strPrjBaseDir + m_strPrjName;
strCFileName += _T(".c");
if (!file.Open(strCFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strCFileContent;
strCFileContent = LoadText(MAKEINTRESOURCE(IDR_CFILE));
strCFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
strCFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
strCFileContent.Replace(_T("$(PROJECT_NAME_A)"), strProjectNameA);
file.Write(strCFileContent, (strCFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 4th, create .h file
CString strHFileName = strPrjBaseDir + m_strPrjName;
strHFileName += _T(".h");
if (!file.Open(strHFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strHFileContent;
strHFileContent = LoadText(MAKEINTRESOURCE(IDR_HFILE));
strHFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
strHFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
strCFileContent.Replace(_T("$(PROJECT_NAME_A)"), strProjectNameA);
file.Write(strHFileContent, (strHFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 5th, create readme.txt
CString strReadmeFileName = strPrjBaseDir + _T("readme.txt");
if (!file.Open(strReadmeFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strReadmeFileContent;
strReadmeFileContent = LoadText(MAKEINTRESOURCE(IDR_README));
strReadmeFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
strReadmeFileContent.Replace(_T("$(PROJECT_NAME_U)"), strProjectNameU);
file.Write(strReadmeFileContent, (strReadmeFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 6th, create recoures
CString strSourcesFileName = strPrjBaseDir + _T("sources");
if (!file.Open(strSourcesFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strSourcesFileContent;
strSourcesFileContent = LoadText(MAKEINTRESOURCE(IDR_SOURCES));
strSourcesFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
file.Write(strSourcesFileContent, (strSourcesFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 7th, create makefile
CString strMakefileFileName = strPrjBaseDir + _T("makefile");
if (!file.Open(strMakefileFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strMakefileFileContent;
strMakefileFileContent = LoadText(MAKEINTRESOURCE(IDR_MAKEFILE));
strMakefileFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
file.Write(strMakefileFileContent, (strMakefileFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 8th, create ddkbuild.bat
CString strDDKBuildFileName = strPrjBaseDir + _T("ddkbuild.bat");
if (!file.Open(strDDKBuildFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
CString strDDKBuildFileContent;
strDDKBuildFileContent = LoadText(MAKEINTRESOURCE(IDR_DDKBUILD_BAT));
strDDKBuildFileContent.Replace(_T("$(PROJECT_NAME)"), m_strPrjName);
file.Write(strDDKBuildFileContent, (strDDKBuildFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
// 9th, create dbghelp.h file
strHFileName = strPrjBaseDir + _T("dbghelp.h");
if (!file.Open(strHFileName, CFile::modeCreate | CFile::modeWrite))
{
return -2;
}
strHFileContent = LoadText(MAKEINTRESOURCE(IDR_DBGHELP_H_FILE));
file.Write(strHFileContent, (strHFileContent.GetLength() ) * sizeof(TCHAR));
file.Close();
return 0;
}
CString LoadText(LPCTSTR lpName)
{
CString strText;
HRSRC hRsrc;
hRsrc = FindResource(AfxGetInstanceHandle(), lpName, RT_HTML);
HGLOBAL hMem = LoadResource(AfxGetInstanceHandle(), hRsrc);
DWORD dwSize = SizeofResource(AfxGetInstanceHandle(), hRsrc);
TCHAR *src = (TCHAR*)LockResource(hMem);
strText.Format(_T("%s"),src);
return strText;
}
BOOL CEasySYSDlg::SavePathToReg()
{
BOOL bRet = FALSE;
HKEY hkey;
DWORD dwDisposition;
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER, CONFIG_PATH, NULL, NULL, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hkey, &dwDisposition))
{
DWORD dwType = REG_SZ;
//save value
if ( ERROR_SUCCESS == RegSetValueEx(hkey,CONFIG_NAME_LOCATION,NULL,dwType,(const BYTE *)m_strPrjPath.GetBuffer(0),m_strPrjPath.GetLength()) )
{
bRet = TRUE;
}
RegCloseKey(hkey);
}
return bRet;
}
BOOL CEasySYSDlg::ReadPathFromReg()
{
BOOL bRet = FALSE;
HKEY hkey;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, CONFIG_PATH, NULL, KEY_QUERY_VALUE, &hkey))
{
DWORD dwType = REG_SZ;
BYTE bufLocation[MAX_PATH];
DWORD dwBufLen = MAX_PATH;
//save value
if (ERROR_SUCCESS == RegQueryValueEx(hkey,CONFIG_NAME_LOCATION,NULL,&dwType,(LPBYTE)bufLocation,&dwBufLen))
{
bRet = TRUE;
m_strPrjPath = bufLocation;
}
RegCloseKey(hkey);
}
return bRet;
}
void CEasySYSDlg::OnSelchangeDdkVersion()
{
// TODO: Add your control notification handler code here
int nIndex = ((CComboBox *)GetDlgItem(IDC_DDK_VERSION))->GetCurSel();
int nOptionID = ((CComboBox *)GetDlgItem(IDC_DDK_VERSION))->GetItemData(nIndex);
if (nOptionID == DDK_W2K)
{
((CButton*)GetDlgItem(IDC_TOS_W2K))->SetCheck(1);
((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(FALSE);
}
else if(nOptionID == DDK_WXP)
{
((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(FALSE);
}
else if (nOptionID == DDK_W2K3)
{
((CButton*)GetDlgItem(IDC_TOS_WXP))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_TOS_W2K3))->EnableWindow(TRUE);
}
}
int CEasySYSDlg::GetDDKLoaction(CString &strDDKLocation)
{
HKEY hKey;
DWORD dwIndex = 0;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, WINDDK_PATH, 0, KEY_ENUMERATE_SUB_KEYS, &hKey))
{
TCHAR bufName[MAX_PATH];
while(RegEnumKey(hKey,dwIndex,bufName,MAX_PATH) != ERROR_NO_MORE_ITEMS)
{
HKEY hSubKey;
if (ERROR_SUCCESS == RegOpenKeyEx(hKey, bufName, 0, KEY_READ, &hSubKey))
{
DWORD dwType = REG_SZ;
DWORD dwBufLen = MAX_PATH;
TCHAR bufDDKPath[MAX_PATH];
if (ERROR_SUCCESS == RegQueryValueEx(hSubKey,_T("LFNDirectory"),NULL,&dwType,(LPBYTE)bufDDKPath,&dwBufLen))
{
strDDKLocation = bufDDKPath;
}
RegCloseKey(hSubKey);
}
dwIndex++;
}
RegCloseKey(hKey);
}
return dwIndex;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -