📄 afxcore.cpp.svn-base
字号:
if (!strFilterExt.IsEmpty())
{
ASSERT(strFilterExt[0] == '.');
LONG lSize = _MAX_PATH * 2;
LONG lResult = ::RegQueryValue(HKEY_CLASSES_ROOT, strFilterExt,
strTemp.GetBuffer(lSize), &lSize);
strTemp.ReleaseBuffer();
if (lResult != ERROR_SUCCESS || strTemp.IsEmpty() ||
strTemp == strFileTypeId)
{
strTemp.Format(_afxShellNewFmt, (LPCTSTR)strFilterExt);
AfxDeleteRegKey(strTemp);
// no association for that suffix
AfxDeleteRegKey(strFilterExt);
}
}
}
}
void AfxRegisterShellFileTypes(BOOL bCompat)
{
CString strPathName, strTemp;
AfxGetModuleShortFileName(AfxGetInstanceHandle(), strPathName);
CString strOpenCommandLine = strPathName;
CString strPrintCommandLine = strPathName;
CString strPrintToCommandLine = strPathName;
CString strDefaultIconCommandLine = strPathName;
CString strMainFrame;
VERIFY(strMainFrame.LoadString( IDR_MAINFRAME ));
if (bCompat)
{
CString strIconIndex;
HICON hIcon = ::ExtractIcon(AfxGetInstanceHandle(), strPathName, 1);
if (hIcon != NULL)
{
strIconIndex.Format(_afxIconIndexFmt, 1);
DestroyIcon(hIcon);
}
else
{
strIconIndex.Format(_afxIconIndexFmt, DEFAULT_ICON_INDEX);
}
strDefaultIconCommandLine += strIconIndex;
}
CString strFilterExt, strFileTypeId, strFileTypeName;
if (AfxExtractSubString( strFileTypeId, strMainFrame,
CDocTemplate::regFileTypeId) && !strFileTypeId.IsEmpty())
{
// enough info to register it
if (!AfxExtractSubString( strFileTypeName, strMainFrame,
CDocTemplate::regFileTypeName))
strFileTypeName = strFileTypeId; // use id name
ASSERT(strFileTypeId.Find(' ') == -1); // no spaces allowed
// first register the type ID of our server
if (!AfxSetRegKey(strFileTypeId, strFileTypeName))
return; // just skip it
if (bCompat)
{
// path\DefaultIcon = path,1
strTemp.Format(_afxDefaultIconFmt, (LPCTSTR)strFileTypeId);
if (!AfxSetRegKey(strTemp, strDefaultIconCommandLine))
return; // just skip it
}
// path\shell\open\command = path filename
// path\shell\print\command = path /p filename
// path\shell\printto\command = path /pt filename printer driver port
strOpenCommandLine += _afxOpenArg;
if (bCompat)
{
strPrintCommandLine += _afxPrintArg;
strPrintToCommandLine += _afxPrintToArg;
}
// path\shell\open\command = path filename
strTemp.Format(_afxShellOpenFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
if (!AfxSetRegKey(strTemp, strOpenCommandLine))
return; // just skip it
if (bCompat)
{
// path\shell\print\command = path /p filename
strTemp.Format(_afxShellPrintFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
if (!AfxSetRegKey(strTemp, strPrintCommandLine))
return; // just skip it
// path\shell\printto\command = path /pt filename printer driver port
strTemp.Format(_afxShellPrintToFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
if (!AfxSetRegKey(strTemp, strPrintToCommandLine))
return; // just skip it
}
AfxExtractSubString( strFilterExt, strMainFrame, CDocTemplate::filterExt);
if (!strFilterExt.IsEmpty())
{
ASSERT(strFilterExt[0] == '.');
LONG lSize = _MAX_PATH * 2;
LONG lResult = ::RegQueryValue(HKEY_CLASSES_ROOT, strFilterExt,
strTemp.GetBuffer(lSize), &lSize);
strTemp.ReleaseBuffer();
if (lResult != ERROR_SUCCESS || strTemp.IsEmpty() ||
strTemp == strFileTypeId)
{
// no association for that suffix
if (!AfxSetRegKey(strFilterExt, strFileTypeId))
return;
if (bCompat)
{
strTemp.Format(_afxShellNewFmt, (LPCTSTR)strFilterExt);
(void)AfxSetRegKey(strTemp, _afxShellNewValue, _afxShellNewValueName);
}
}
}
}
}
#ifdef AFX_CORE3_SEG
#pragma code_seg(AFX_CORE3_SEG)
#endif
AFX_STATIC void AFXAPI _AfxAppendFilterSuffix(CString& filter, OPENFILENAME& ofn,
CString *pstrDefaultExt)
{
CString strMainFrame;
VERIFY(strMainFrame.LoadString( IDR_MAINFRAME ));
CString strFilterExt, strFilterName;
if (AfxExtractSubString(strFilterExt, strMainFrame, CDocTemplate::filterExt) &&
!strFilterExt.IsEmpty() &&
AfxExtractSubString(strFilterName, strMainFrame, CDocTemplate::filterName) &&
!strFilterName.IsEmpty())
{
// a file based document template - add to filter list
ASSERT(strFilterExt[0] == '.');
if (pstrDefaultExt != NULL)
{
// set the default extension
*pstrDefaultExt = ((LPCTSTR)strFilterExt) + 1; // skip the '.'
ofn.lpstrDefExt = (LPTSTR)(LPCTSTR)(*pstrDefaultExt);
ofn.nFilterIndex = ofn.nMaxCustFilter + 1; // 1 based number
}
// add to filter
filter += strFilterName;
ASSERT(!filter.IsEmpty()); // must have a file type name
filter += (TCHAR)'\0'; // next string please
filter += (TCHAR)'*';
filter += strFilterExt;
filter += (TCHAR)'\0'; // next string please
ofn.nMaxCustFilter++;
}
}
BOOL AfxDoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog )
{
CKSFileDialog dlgFile(bOpenFileDialog);
CString title;
VERIFY(title.LoadString(nIDSTitle));
dlgFile.m_ofn.Flags |= lFlags;
CString strFilter;
CString strDefault;
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn,&strDefault);
// append the "*.*" all files filter
CString allFilter;
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
strFilter += allFilter;
strFilter += (TCHAR)'\0'; // next string please
strFilter += _T("*.*");
strFilter += (TCHAR)'\0'; // last string
dlgFile.m_ofn.nMaxCustFilter++;
dlgFile.m_ofn.lpstrFilter = strFilter;
dlgFile.m_ofn.lpstrTitle = title;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);
int nResult = dlgFile.DoModal();
fileName.ReleaseBuffer();
CString strPath = dlgFile.GetPathName( );
return nResult == IDOK;
}
BOOL AfxDoSelectDirectory( CString & strSrc, HWND hWnd )
{
/* The Old Version */
/*
BROWSEINFO bi;
char szWorkDir[MAX_PATH+1] = "";
LPITEMIDLIST piidlRoot;
SHGetSpecialFolderLocation(hWnd, CSIDL_DRIVES, &piidlRoot);
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hWnd;
bi.pidlRoot = piidlRoot;
bi.pszDisplayName = szWorkDir;
CString strTitle;
strTitle.LoadString( IDS_SELECT_DIRECTORY );
if( GetSystemMetrics(SM_DBCSENABLED) )
{
bi.lpszTitle = strTitle.GetBuffer(strTitle.GetLength()+1);
}
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
LPITEMIDLIST piidlTarget = SHBrowseForFolder(&bi);
if( piidlTarget )
{
::SHGetPathFromIDList( piidlTarget, szWorkDir ) ;
strSrc = szWorkDir;
::CoTaskMemFree( piidlTarget );
return TRUE;
}
return FALSE;
*/
/* The New Version Using CPathDialog */
CString strCaption;
CString strTitle;
strCaption.LoadString( IDS_SELECT_DIRECTORY );
strTitle.LoadString( IDS_SELECT_DIRECTORY );
CPathDialog dlg(strCaption, strTitle, strSrc);
if(dlg.DoModal()==IDOK
&& CPathDialog::MakeSurePathExists(dlg.GetPathName())==0 )
{
strSrc = dlg.GetPathName();
return TRUE;
}
return FALSE;
}
CString AfxGetStrategyFileExt( )
{
CString strMainFrame;
strMainFrame.LoadString( IDR_MAINFRAME );
CString strExt;
VERIFY( AfxExtractSubString( strExt, strMainFrame,CDocTemplate::filterExt) );
ASSERT( !strExt.IsEmpty() && strExt[0] == '.');
return strExt;
}
CString AfxGetApplicationName( )
{
CString strMainFrame;
strMainFrame.LoadString( IDR_MAINFRAME );
CString strName;
VERIFY( AfxExtractSubString( strName, strMainFrame,CDocTemplate::windowTitle) );
return strName;
}
CString AfxGetStockIndexReportTip( )
{
CString strResult;
CString strSHTipFmt, strSZTipFmt;
strSHTipFmt.LoadString( IDS_MAINFRAME_SHINDEXTIP );
strSZTipFmt.LoadString( IDS_MAINFRAME_SZINDEXTIP );
double dDevided = 100000000;
#ifdef CLKLAN_ENGLISH_US
dDevided = 1000000000;
#endif
CStockInfo infoMain, infoMainSZN;
double dDiff;
CString strSH, strSZ;
if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAIN, &infoMain )
&& infoMain.GetDiff(&dDiff, infoMain.m_datetech ,1) )
strSH.Format( strSHTipFmt, infoMain.m_fClose, dDiff, infoMain.m_fAmount/dDevided );
if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAINSZN, &infoMainSZN )
&& infoMainSZN.GetDiff(&dDiff, infoMainSZN.m_datetech,1) )
strSZ.Format( strSZTipFmt, infoMainSZN.m_fClose, dDiff, infoMainSZN.m_fAmount/dDevided );
if( strSH.IsEmpty() && strSZ.IsEmpty() )
return AfxGetApplicationName();
strResult = strSH + " " + strSZ;
return strResult;
}
#ifdef AFX_CORE2_SEG
#pragma code_seg(AFX_CORE2_SEG)
#endif
#ifdef AFX_TERM_SEG
#pragma code_seg(AFX_TERM_SEG)
#endif
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -