|
|
// NewProject.cpp : implementation file
//
#include "stdafx.h"
#include "minidev.h"
#include "codepage.h"
#include <wingdi.h>
#include <winddi.h>
#include <prntfont.h>
#include <uni16res.h>
#include "gtt.h"
#include "nconvert.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CConvPfmDlg property page
IMPLEMENT_DYNCREATE(CConvPfmDlg, CPropertyPage)
CConvPfmDlg::CConvPfmDlg() : CPropertyPage(CConvPfmDlg::IDD) {
//{{AFX_DATA_INIT(CConvPfmDlg)
m_csGttPath = _T(""); m_csPfmPath = _T(""); m_csUfmDir = _T(""); //}}AFX_DATA_INIT
}
CConvPfmDlg::~CConvPfmDlg() { }
void CConvPfmDlg::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConvPfmDlg)
DDX_Control(pDX, IDC_ComboCodePage, m_ccbCodepages); DDX_Text(pDX, IDC_GttPath, m_csGttPath); DDX_Text(pDX, IDC_PfmFiles, m_csPfmPath); DDX_Text(pDX, IDC_UfmDir, m_csUfmDir); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConvPfmDlg, CPropertyPage) //{{AFX_MSG_MAP(CConvPfmDlg)
ON_BN_CLICKED(IDC_GTTBrowser, OnGTTBrowser) ON_BN_CLICKED(IDC_PFMBrowser, OnPFMBrowsers) ON_CBN_SELCHANGE(IDC_ComboCodePage, OnSelchangeComboCodePage) ON_BN_CLICKED(IDC_UfmDirBrowser, OnUfmDirBrowser) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConvPfmDlg message handlers
BOOL CConvPfmDlg::OnWizardFinish() { CString csErr ;
if( ConvPFMToUFM() ) { csErr.Format(IDS_NewUFM,m_csUfmDir) ; AfxMessageBox(csErr,MB_ICONINFORMATION) ; } else { csErr.LoadString(IDS_NewUFMError); AfxMessageBox(csErr,MB_ICONEXCLAMATION) ; } return CPropertyPage::OnWizardFinish(); }
LRESULT CConvPfmDlg::OnWizardBack() { // restore the parent propertysheet dialog.
EndDialog(IDD_ConvertPFM) ; return CPropertyPage::OnWizardBack(); }
BOOL CConvPfmDlg::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH); ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_DISABLEDFINISH) ; ((CPropertySheet*)GetParent())->GetDlgItem(IDHELP)->ShowWindow(SW_HIDE) ;
CCodePageInformation ccpi ; unsigned unumcps = ccpi.InstalledCount() ;
// Get the installed code page numbers and load them into the code page
// list box.
DWORD dwcp, dwdefcp ; dwdefcp = GetACP() ; TCHAR accp[32] ; int n ; ; for (unsigned u = 0 ; u < unumcps ; u++) { dwcp = ccpi.Installed(u) ;
// There are 3 code pages that seem to make MultiByteToWideChar() to
// fail. Don't let the user choose one of those code pages unless
// he knows the secret password (ie, undocument command line switch
// 'CP').
if (ThisApp().m_bExcludeBadCodePages) if (dwcp == 1361 || dwcp == 28595 || dwcp == 28597) continue ;
wsprintf(accp, "%5d", dwcp) ; n = m_ccbCodepages.AddString(accp) ; if (dwcp == 1252) // change dwdefcp to 1252 due to not support DBCS.
m_ccbCodepages.SetCurSel(n) ; } ; return CPropertyPage::OnSetActive(); }
void CConvPfmDlg::OnGTTBrowser() { UpdateData() ; CString csFilter = _T("GTT File(*.gtt)|*.gtt||") ; CString csExtension = _T(".GTT") ; CFileDialog cfd(TRUE, csExtension, NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST ,csFilter); if (cfd.DoModal() == IDOK) { m_csGttPath = cfd.GetPathName() ; UpdateData(FALSE) ; } ; }
void CConvPfmDlg::OnPFMBrowsers() { UpdateData() ; CString csFilter( _T("PFM Files (*.pfm)|*.pfm||") ) ; CFileDialog cfd(TRUE, _T(".ctt"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, csFilter, this);
cfd.m_ofn.lpstrFile = new char[4096]; memset(cfd.m_ofn.lpstrFile,0,4096); cfd.m_ofn.nMaxFile = 4096; if (cfd.DoModal() != IDOK) { delete cfd.m_ofn.lpstrFile ; return; } // save the file path to member string array
for (POSITION pos = cfd.GetStartPosition(); pos; ) {
m_csaPfmFiles.Add(cfd.GetNextPathName(pos)) ; } m_csPfmPath = m_csaPfmFiles[0] ; // GTT directory is same with the CTT directory as default.
m_csUfmDir = m_csPfmPath.Left(m_csPfmPath.ReverseFind(_T('\\') ) ); SetCurrentDirectory(m_csUfmDir) ; UpdateData(FALSE) ;
if(m_csPfmPath.GetLength() ) ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH) ; }
/**************************************************************************************
bool CConvPfmDlg::OnUfmDirBrowser() Do ; just directory browser Args Ret.
***************************************************************************************/
void CConvPfmDlg::OnUfmDirBrowser() { OPENFILENAME ofn ; // Used to send/get info to/from common dlg
char acpath[_MAX_PATH] ; // Path is saved here (or an error message)
// char acidir[_MAX_PATH] ; // Initial directory is built here
BOOL brc = FALSE ; // Return code
// Update the contents of csinitdir
UpdateData(TRUE) ;
// Load the open file name structure
ofn.lStructSize = sizeof(ofn) ; ofn.hwndOwner = m_hWnd ; ofn.hInstance = GetModuleHandle(_T("MINIDEV.EXE")) ; ofn.lpstrFilter = ofn.lpstrCustomFilter = NULL ; ofn.nMaxCustFilter = ofn.nFilterIndex = 0 ; strcpy(acpath, _T("JUNK")) ; // No need to localize this string
ofn.lpstrFile = acpath ; ofn.nMaxFile = _MAX_PATH ; ofn.lpstrFileTitle = NULL ; ofn.nMaxFileTitle = 0 ; ofn.lpstrInitialDir = m_csUfmDir ; // in parent dialog box
ofn.lpstrTitle = NULL ; ofn.Flags = OFN_HIDEREADONLY /*| OFN_ENABLEHOOK */| OFN_NOCHANGEDIR | OFN_NOTESTFILECREATE | OFN_ENABLETEMPLATE | OFN_NONETWORKBUTTON ; ofn.lpstrDefExt = NULL ; ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILEOPENORD) ; ofn.lpfnHook = NULL ;// BrowseDlgProc ;
// Display the dialog box. If the user cancels, just return.
if (!GetOpenFileName(&ofn)) return ;
// Take the bogus file name off the path and put the path into the page's
// edit box.
acpath[ofn.nFileOffset - 1] = 0 ; m_csUfmDir = (LPCTSTR) acpath ;
UpdateData(FALSE) ; }
/**************************************************************************************
bool CConvPfmDlg::OnSelchangeComboCodePage() Do ;DBCS code page convert does not supported in this version. so we have to show exclamtion messag to the user when they select DBCS code page; the reason of showing DBCS in the list although they are not supported is that it cann't less confusing to the user.
Args Ret.
***************************************************************************************/
//
void CConvPfmDlg::OnSelchangeComboCodePage() { CString csCodepage ; DWORD dwCodepage ; m_ccbCodepages.GetLBText(m_ccbCodepages.GetCurSel(),csCodepage) ;
dwCodepage = atoi(csCodepage) ;
if (dwCodepage == 932 || dwCodepage == 936 || dwCodepage == 949 || dwCodepage == 950 ) { AfxMessageBox(_T("DBCS conversion is not supported in this version"),MB_ICONINFORMATION) ; DWORD dwacp = GetACP() ; TCHAR acp[16] ; wsprintf(acp, "%5d",dwacp) ; int nI = m_ccbCodepages.FindString(-1,acp ) ; m_ccbCodepages.SetCurSel(nI ) ; } ;
} ;
struct sGTTHeader { DWORD m_dwcbImage; enum {Version1Point0 = 0x10000}; DWORD m_dwVersion; DWORD m_dwfControl; // Any flags defined?
long m_lidPredefined; DWORD m_dwcGlyphs; DWORD m_dwcRuns; DWORD m_dwofRuns; DWORD m_dwcCodePages; DWORD m_dwofCodePages; DWORD m_dwofMapTable; DWORD m_dwReserved[2]; sGTTHeader() { memset(this, 0, sizeof *this); m_dwVersion = Version1Point0; m_lidPredefined = CGlyphMap::NoPredefined; m_dwcbImage = sizeof *this; } };
extern "C" {
BOOL BConvertPFM(LPBYTE lpbPFM, DWORD dwCodePage, LPBYTE lpbGTT, PWSTR pwstrUnique, LPCTSTR lpstrUFM, int iGTTID);
PUNI_GLYPHSETDATA PGetDefaultGlyphset( IN HANDLE hHeap, IN WORD wFirstChar, IN WORD wLastChar, IN DWORD dwCodePage) ;
}
/**************************************************************************************
bool CConvPfmDlg::ConvPFMToUFM() Do ; this is workhorse. untimately, all routine exist for BConvertPFM; correct codepage inside gtt file, ufm directory, gtt files or resource gtt or default. new UFM files are created inside BConvertPFM function. just set correct UFM path.
Args . Ret.
***************************************************************************************/ bool CConvPfmDlg::ConvPFMToUFM() { // Call BConvertPFM for each PFM data with codepage, gtt data if exist,
// ufm file path and name,
CByteArray cbaGTT ; // loading the GTT
// change the codepage value of GTT(
CString csCodePage ; DWORD dwCodePage ; m_ccbCodepages.GetLBText(m_ccbCodepages.GetCurSel(),csCodePage) ; dwCodePage = atoi(csCodePage) ;
// loading the GTT file when there is gtt file or we have to use resource file or
// default GTT file instead of real GTT file
if (m_csGttPath.GetLength() ) {
try { CFile cfLoad(m_csGttPath, CFile::modeRead | CFile::shareDenyWrite); cbaGTT.SetSize(cfLoad.GetLength()); cfLoad.Read(cbaGTT.GetData(), cfLoad.GetLength()); }
catch (CException *pce) { pce -> ReportError(); pce -> Delete(); cbaGTT.RemoveAll(); return false; } } else { short sid = (short)dwCodePage ; if(MAKEINTRESOURCE((sid < 0) ? -sid : sid) == NULL) return false ;
HRSRC hrsrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE((sid < 0) ? -sid : sid), MAKEINTRESOURCE(IDR_GLYPHMAP)); if (hrsrc) { HGLOBAL hg = LoadResource(AfxGetResourceHandle(), hrsrc) ; if (!hg) return false; LPVOID lpv = LockResource(hg) ; if (!lpv) return false ; cbaGTT.SetSize(SizeofResource(AfxGetResourceHandle(), hrsrc)) ; memcpy(cbaGTT.GetData(), lpv, (size_t)cbaGTT.GetSize()) ; return false ; } ;
//AfxMessageBox("GTT building code reached.") ;
// If all else fails, try to generate a GTT based on the code page ID
// that should be in m_wID if this point is reached.
HANDLE hheap ; UNI_GLYPHSETDATA *pGTT ; if (!(hheap = HeapCreate(HEAP_NO_SERIALIZE, 10 * 1024, 256 * 1024))) { AfxMessageBox(IDS_HeapInGLoad) ; return false ; } ; pGTT = PGetDefaultGlyphset(hheap, 0x20, 0xff, (DWORD) sid) ; if (pGTT == NULL) { HeapDestroy(hheap) ; //raid 116600 Prefix
AfxMessageBox(IDS_PGetFailedInGLoad) ; return false ; } ; cbaGTT.SetSize(pGTT->dwSize) ; memcpy(cbaGTT.GetData(), pGTT, (size_t)cbaGTT.GetSize()) ; HeapDestroy(hheap) ; }
// Creating the UFM Path
UpdateData() ; SECURITY_ATTRIBUTES st; st.nLength = sizeof(SECURITY_ATTRIBUTES); st.lpSecurityDescriptor = NULL; st.bInheritHandle = FALSE ;
WIN32_FIND_DATA wfd32 ; HANDLE hDir = FindFirstFile(m_csUfmDir,&wfd32) ; if (hDir == INVALID_HANDLE_VALUE) { if (!CreateDirectory(m_csUfmDir,&st) ) { CString csmsg ; csmsg = _T("Fail to create the template directory") ; AfxMessageBox(csmsg) ; return false ; } } ;
//Set the GTT codepage with selected code page by user
union { BYTE* pbGTT ; sGTTHeader* psGTTH ; } ;
pbGTT = cbaGTT.GetData() ; if (!pbGTT) return false ; PUNI_CODEPAGEINFO pCodepage = (PUNI_CODEPAGEINFO)(pbGTT + psGTTH->m_dwofCodePages ); CopyMemory(&pCodepage->dwCodePage,&dwCodePage,sizeof(DWORD) ) ; // Convert the PFM to UFM: calling the BConvertPFM for every selected PFM files
CCodePageInformation ccpi ; for ( int i = 0 ; i < m_csaPfmFiles.GetSize() ; i++ ) { // loading the PFM
CString csPFMPath = m_csaPfmFiles[i] ; CByteArray cbaPFM ; try { CFile cfLoad(csPFMPath, CFile::modeRead | CFile::shareDenyWrite); cbaPFM.SetSize(cfLoad.GetLength()); cfLoad.Read(cbaPFM.GetData(), cfLoad.GetLength()); cfLoad.Close() ; } catch (CException *pce) { pce -> ReportError(); pce -> Delete(); cbaPFM.RemoveAll(); return false ; }
CString csUFMName = csPFMPath.Mid(csPFMPath.ReverseFind(_T('\\') )+1 ) ; csUFMName = csUFMName.Left(csUFMName.ReverseFind(('.')) ) ; csUFMName.MakeUpper() ; CString csUFMPath = m_csUfmDir + _T("\\") + csUFMName + _T(".UFM") ; // convert ansi unique name to unicode.
CByteArray cbaIn; CWordArray cwaOut;
cbaIn.SetSize(1 + csUFMName.GetLength()); lstrcpy((LPSTR) cbaIn.GetData(), (LPCTSTR) csUFMName); ccpi.Convert(cbaIn, cwaOut, GetACP()); // Call the global function BConvertPFM, BConvertPFM creat the UFM file under the
// specified path.
if(!BConvertPFM(cbaPFM.GetData(), dwCodePage, cbaGTT.GetData(), cwaOut.GetData(), csUFMPath, (short) 0 ) ) return false; // clear the data field
// cbaPFM.RemoveAll() ;
// cwaOut.RemoveAll() ;
}
return true ; }
/////////////////////////////////////////////////////////////////////////////
// CConverPFM
IMPLEMENT_DYNAMIC(CConvertPFM, CPropertySheet)
CConvertPFM::CConvertPFM(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { }
CConvertPFM::CConvertPFM(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) {
AddPage(&m_ccpd) ;
SetWizardMode() ;
}
CConvertPFM::~CConvertPFM() { }
BEGIN_MESSAGE_MAP(CConvertPFM, CPropertySheet) //{{AFX_MSG_MAP(CConverPFM)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConverPFM message handlers
/////////////////////////////////////////////////////////////////////////////
// CConvCttDlg property page
IMPLEMENT_DYNCREATE(CConvCttDlg, CPropertyPage)
CConvCttDlg::CConvCttDlg() : CPropertyPage(CConvCttDlg::IDD) { //{{AFX_DATA_INIT(CConvCttDlg)
m_csCttPath = _T(""); m_csGttDir = _T(""); //}}AFX_DATA_INIT
}
CConvCttDlg::~CConvCttDlg() { }
void CConvCttDlg::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConvCttDlg)
DDX_Control(pDX, IDC_COMBO_Codepage, m_ccbCodepages); DDX_Text(pDX, IDC_EDIT_CTTFile, m_csCttPath); DDX_Text(pDX, IDC_GttDirectory, m_csGttDir); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConvCttDlg, CPropertyPage) //{{AFX_MSG_MAP(CConvCttDlg)
ON_BN_CLICKED(IDC_CTTBrowser, OnCTTBrowser) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConvCttDlg message handlers
BOOL CConvCttDlg::OnWizardFinish() { CString csErr ; if(ConvCTTToGTT() ) { csErr.Format(IDS_NewGTT,m_csGttDir) ; AfxMessageBox(csErr,MB_ICONINFORMATION) ; } else { csErr.LoadString(IDS_NewGTTError); AfxMessageBox(csErr,MB_ICONEXCLAMATION) ; } return CPropertyPage::OnWizardFinish(); }
LRESULT CConvCttDlg::OnWizardBack() { EndDialog(IDD_ConvertCTT) ; return CPropertyPage::OnWizardBack(); }
void CConvCttDlg::OnCTTBrowser() { UpdateData() ; CString csFilter( _T("CTT Files (*.ctt)|*.ctt||") ) ; CFileDialog cfd(TRUE, _T(".ctt"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, csFilter, this);
cfd.m_ofn.lpstrFile = new char[4096]; memset(cfd.m_ofn.lpstrFile,0,4096); cfd.m_ofn.nMaxFile = 4096; if (cfd.DoModal() != IDOK) { delete cfd.m_ofn.lpstrFile ; return; } // save the file path to member string array
for (POSITION pos = cfd.GetStartPosition(); pos; ) { m_csaCttFiles.Add(cfd.GetNextPathName(pos)) ; } m_csCttPath = m_csaCttFiles[0] ; // GTT directory is same with the CTT directory as default.
m_csGttDir = m_csCttPath.Left(m_csCttPath.ReverseFind(_T('\\') ) ); SetCurrentDirectory(m_csGttDir) ;
UpdateData(FALSE) ;
if(m_csCttPath.GetLength() ) ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH) ; }
//DEL BOOL CConvCttDlg::OnInitDialog()
//DEL {
//DEL CPropertyPage::OnInitDialog();
//DEL
//DEL //Fill the list with installed codepage rather than supported code page.
//DEL
//DEL CCodePageInformation ccpi ;
//DEL
//DEL // ccpi.
//DEL
//DEL return TRUE; // return TRUE unless you set the focus to a control
//DEL // EXCEPTION: OCX Property Pages should return FALSE
//DEL }
BOOL CConvCttDlg::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH); ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_DISABLEDFINISH) ; ((CPropertySheet*)GetParent())->GetDlgItem(IDHELP)->ShowWindow(SW_HIDE) ; CCodePageInformation ccpi ; unsigned unumcps = ccpi.InstalledCount() ;
// Get the installed code page numbers and load them into the code page
// list box.
DWORD dwcp, dwdefcp ; dwdefcp = GetACP() ; TCHAR accp[32] ; int n ; ; for (unsigned u = 0 ; u < unumcps ; u++) { dwcp = ccpi.Installed(u) ;
// There are 3 code pages that seem to make MultiByteToWideChar() to
// fail. Don't let the user choose one of those code pages unless
// he knows the secret password (ie, undocument command line switch
// 'CP').
if (dwcp == 1361 || dwcp == 28595 || dwcp == 28597) continue ;
wsprintf(accp, "%5d", dwcp) ; n = m_ccbCodepages.AddString(accp) ; if (dwcp == 1252) // change dwdefcp to 1252 due to not support DBCS.
m_ccbCodepages.SetCurSel(n) ; } ;
return CPropertyPage::OnSetActive(); }
extern "C" BOOL BConvertCTT2GTT( IN HANDLE hHeap, IN PTRANSTAB pCTTData, IN DWORD dwCodePage, IN WCHAR wchFirst, IN WCHAR wchLast, IN PBYTE pCPSel, IN PBYTE pCPUnSel, IN OUT PUNI_GLYPHSETDATA *ppGlyphSetData, IN DWORD dwGlySize);
extern "C" PUNI_GLYPHSETDATA PGetDefaultGlyphset( IN HANDLE hHeap, IN WORD wFirstChar, IN WORD wLastChar, IN DWORD dwCodePage) ;
bool CConvCttDlg::ConvCTTToGTT() {
CString csCodePage ; DWORD dwCodePage ; m_ccbCodepages.GetLBText(m_ccbCodepages.GetCurSel(),csCodePage) ; dwCodePage = atoi(csCodePage) ;
// Creating the UFM Path
UpdateData() ; SECURITY_ATTRIBUTES st; st.nLength = sizeof(SECURITY_ATTRIBUTES); st.lpSecurityDescriptor = NULL; st.bInheritHandle = FALSE ;
WIN32_FIND_DATA wfd32 ; HANDLE hDir = FindFirstFile(m_csGttDir,&wfd32) ; if (hDir == INVALID_HANDLE_VALUE) { if (!CreateDirectory(m_csGttDir,&st) ) { CString csmsg ; csmsg = _T("Fail to create the template directory") ; AfxMessageBox(csmsg) ; return false ; } } ;
for (int i = 0 ; i < m_csaCttFiles.GetSize() ; i ++ ) { // load the cTT files
CString csCTTPath = m_csaCttFiles[i] ; CByteArray cbaCTT ; try { CFile cfLoad(csCTTPath, CFile::modeRead | CFile::shareDenyWrite); cbaCTT.SetSize(cfLoad.GetLength()); cfLoad.Read(cbaCTT.GetData(), cfLoad.GetLength()); } catch (CException *pce) { pce -> ReportError(); pce -> Delete(); cbaCTT.RemoveAll(); return false ; }
PBYTE pbCTT = cbaCTT.GetData() ; HANDLE hheap ; if( !(hheap = HeapCreate(HEAP_NO_SERIALIZE, 10 * 1024, 256 * 1024 ))) { CString csErr ; csErr.Format(IDS_HeapCFailed,csCTTPath) ; AfxMessageBox(csErr ,MB_ICONEXCLAMATION); return false ; } // call the convert extern function
UNI_GLYPHSETDATA *pGTT = new UNI_GLYPHSETDATA ; if(NULL == pGTT){ HeapDestroy(hheap); return false; } if (!BConvertCTT2GTT(hheap, (PTRANSTAB)pbCTT, dwCodePage, 0x20, 0xff, NULL, NULL, &pGTT, 0)){ delete pGTT; // raid fix 692536 prefix
HeapDestroy(hheap); // raid 116619 prefix
return false ; }
// store the GTT files
CString csGTTName = csCTTPath.Mid(csCTTPath.ReverseFind(_T('\\') )+1 ) ; csGTTName = csGTTName.Left(csGTTName.ReverseFind(('.')) ) ; CString csGTTPath = m_csGttDir + _T("\\") + csGTTName + _T(".GTT") ; csGTTName.MakeUpper() ; try { CFile cfGTT; if (!cfGTT.Open(csGTTPath, CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive)) return false; cfGTT.Write(pGTT, pGTT->dwSize); cfGTT.Close() ; }
catch (CException *pce) { pce -> ReportError(); pce -> Delete(); delete pGTT; HeapDestroy(hheap); return false ; } if (pGTT ) delete pGTT ; HeapDestroy(hheap); } return true ; } /////////////////////////////////////////////////////////////////////////////
// CConvertCTT
IMPLEMENT_DYNAMIC(CConvertCTT, CPropertySheet)
CConvertCTT::CConvertCTT(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { }
CConvertCTT::CConvertCTT(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { AddPage(&m_cccd) ;
SetWizardMode() ;
}
CConvertCTT::~CConvertCTT() { }
BEGIN_MESSAGE_MAP(CConvertCTT, CPropertySheet) //{{AFX_MSG_MAP(CConvertCTT)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConvertCTT message handlers
/////////////////////////////////////////////////////////////////////////////
// CNewConvert property page
IMPLEMENT_DYNCREATE(CNewConvert, CPropertyPage)
CNewConvert::CNewConvert() : CPropertyPage(CNewConvert::IDD) { //{{AFX_DATA_INIT(CNewConvert)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CNewConvert::~CNewConvert() { }
void CNewConvert::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNewConvert)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNewConvert, CPropertyPage) //{{AFX_MSG_MAP(CNewConvert)
ON_BN_CLICKED(IDC_CONVERT, OnPrjConvert) ON_BN_CLICKED(IDC_CONV_PFM, OnPFMConvert) ON_BN_CLICKED(IDC_CONV_CTT, OnCTTConvert) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNewConvert message handlers
/*************************************************************************************
void CNewConvert::OnPrjConvert() Creat Doc-> call Convert Wizard -> Creat frame -> Create View by updatefram
**************************************************************************************/ void CNewConvert::OnPrjConvert() { // Invoke the wizard.
m_pcps->ShowWindow(SW_HIDE) ; CMultiDocTemplate* pcmdt = ThisApp().WorkspaceTemplate() ;
CDocument* pcdWS = pcmdt->CreateNewDocument() ;
if (!pcdWS || !pcdWS -> OnNewDocument()) { if (pcdWS) { delete pcdWS; m_pcps->EndDialog(1) ; } return; } pcmdt->SetDefaultTitle(pcdWS) ; CFrameWnd* pcfw = pcmdt->CreateNewFrame(pcdWS,NULL) ;
if (pcfw) pcmdt->InitialUpdateFrame(pcfw,pcdWS) ;
m_pcps->EndDialog(1) ;
}
/*************************************************************************************
void CNewConvert::OnPFMConvert()
**************************************************************************************/
void CNewConvert::OnPFMConvert() { CConvertPFM cnp ( _T("PFM Convert To UFM ") ) ;
m_pcps->ShowWindow(SW_HIDE) ;
INT_PTR ret = cnp.DoModal() ; if (ret == (INT_PTR)IDD_ConvertPFM ) m_pcps->ShowWindow(SW_RESTORE) ; else m_pcps->EndDialog(1) ; }
/*************************************************************************************
void CNewConvert::OnCTTConvert()
**************************************************************************************/
void CNewConvert::OnCTTConvert() { CConvertCTT ccc ( _T("GTT Converter ") ) ;
m_pcps->ShowWindow(SW_HIDE) ;
INT_PTR ret = ccc.DoModal() ; if (ret == (INT_PTR)IDD_ConvertCTT ) m_pcps->ShowWindow(SW_RESTORE) ; else m_pcps->EndDialog(1) ; }
/***************************************************************************************
BOOL CNewConvert::OnSetActive() Do. ****************************************************************************************/ BOOL CNewConvert::OnSetActive() { return CPropertyPage::OnSetActive(); }
/***************************************************************************************
BOOL CNewConvert::OnInitDialog() Do; Getting perent pointer
****************************************************************************************/ BOOL CNewConvert::OnInitDialog() { CPropertyPage::OnInitDialog(); m_pcps = DYNAMIC_DOWNCAST(CPropertySheet,GetOwner() ) ; return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
|