📄 afxcore.cpp.svn-base
字号:
// AfxCore.cpp : implementation of the AfxCore Functions
//
#include "stdafx.h"
#include "AfxCore.h"
#include <math.h>
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
void DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CSPTime& value)
{
CTime tm = value.GetTime();
DDX_DateTimeCtrl(pDX, nIDC,tm);
value = tm.GetTime();
}
CFont * AfxSelectDCFont( CDC * pDC, int nHeight )
{
static CFont font;
font.DeleteObject();
#ifdef CLKLAN_ENGLISH_US
if( nHeight <= 15 )
{
CFont *pFont = CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
return pDC->SelectObject( pFont );
}
else
{
return NULL;
}
#else
font.CreateFont(nHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH,
"楷体" );
return pDC->SelectObject( &font );
#endif
}
UINT AfxRecalculateYield( int nDays, BOOL bReport )
{
// 计算市场年平均收益率
double market_yield_average = 0.0, market_yield_d = 0.0;
double market_dayyield_average = 0.0, market_dayyield_d = 0.0;
CKData & kdayMain = AfxGetStockMain().GetKDataDay();
if( kdayMain.GetSize() <= nDays )
{
if( bReport )
AfxMessageBox( IDS_RECALYIELD_NOSZZS, MB_OK | MB_ICONINFORMATION );
return 0;
}
BOOL bmarket_yield_ok = CalculateYieldYear( kdayMain, &market_yield_average, &market_yield_d, nDays );
BOOL bmarket_dayyield_ok = CalculateYieldDay( kdayMain, &market_dayyield_average, &market_dayyield_d, nDays );
if( !bmarket_yield_ok && !bmarket_dayyield_ok )
{
if( bReport )
AfxMessageBox( IDS_RECALYIELD_NOSZZS, MB_OK | MB_ICONINFORMATION );
}
// 开始生成结果数据
CStockContainer & container = AfxGetStockContainer();
int nCount = 0;
// 等待对话框
CWaitDlg * pWait = NULL;
if( bReport )
{
pWait = new CWaitDlg( AfxGetMainWnd() );
pWait->SetProgressRange( 0, container.GetSize()-1 );
}
for( int i=0; i<container.GetSize(); i++ )
{
if( pWait )
{
pWait->SetProgress( i );
if( pWait->WaitForCancel( ) )
break;
}
CStockInfo & info = container.ElementAt(i);
LONG stocktype = info.GetType();
if( CStock::typeshIndex != stocktype && CStock::typeshA != stocktype && CStock::typeshB != stocktype
&& CStock::typeszIndex != stocktype && CStock::typeszA != stocktype && CStock::typeszB != stocktype )
continue;
CStock stock;
stock.SetStockInfo( &info );
AfxPrepareStockData(&AfxGetDB(),stock,CKData::ktypeDay,CKData::formatXDRup,CKData::mdtypeClose,TRUE,TRUE);
CKData & kday = stock.GetKDataDay();
info.m_fYield_average = (float)STKLIB_DATA_INVALID;
info.m_fYield_stddev = (float)STKLIB_DATA_INVALID;
info.m_fBeite = (float)STKLIB_DATA_INVALID;
double yield_average = 0., yield_d = 0., beite = 0. ;
if( CalculateYieldYear( kday, &yield_average, &yield_d, nDays ) )
{
info.m_fYield_average = (float)( 100. * yield_average );
info.m_fYield_stddev = (float)( 100. * yield_d );
if( bmarket_yield_ok && CalculateBeiteYear( kday, kdayMain, market_yield_average, market_yield_d, &beite, nDays ) )
info.m_fBeite = (float)( beite );
else if( bmarket_dayyield_ok && CalculateBeiteDay( kday, kdayMain, market_dayyield_average, market_dayyield_d, &beite, nDays ) )
info.m_fBeite = (float)( beite );
}
else if( CalculateYieldDay( kday, &yield_average, &yield_d, nDays ) )
{
info.m_fYield_average = (float)( 100. * (pow(1+yield_average,STKLIB_DAYS_INONEYEAR)-1) );
info.m_fYield_stddev = (float)( 100. * sqrt((double)STKLIB_DAYS_INONEYEAR) * yield_d );
if( bmarket_dayyield_ok && CalculateBeiteDay( kday, kdayMain, market_dayyield_average, market_dayyield_d, &beite, nDays ) )
info.m_fBeite = (float)( beite );
}
nCount ++;
}
// 保存到硬盘文件
AfxGetDB().StoreBasetable( container );
// 关闭等待对话框和目标文件
if( pWait )
{
pWait->DestroyWindow();
delete pWait;
}
return nCount;
}
// 快捷键
void AfxExecuteAccelerator( UINT nAcce )
{
HWND hWnd = AfxGetMainFrame()->GetSafeHwnd();
switch( nAcce )
{
case ACCE_01: // 热键F1
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_REPORTDETAIL, 0 );
break;
case ACCE_02: // 热键F2
::PostMessage( hWnd, WM_COMMAND, ID_VIEW_SLIST, 0 );
break;
case ACCE_03: // 热键F3
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_VIEWSZZS, 0 );
break;
case ACCE_04: // 热键F4
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_VIEWSZNCZ, 0 );
break;
case ACCE_05: // 热键F5
{
CView * pView = AfxGetStaticDoc()->GetActiveView();
if( pView && pView->IsKindOf( RUNTIME_CLASS(CGraphView) ) )
::PostMessage( hWnd, WM_COMMAND, ID_VIEW_REALTIME, 0 );
else
::PostMessage( hWnd, WM_COMMAND, ID_VIEW_GRAPH, 0 );
}
break;
case ACCE_06: // 热键F6
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_GROUPSELF, 0 );
break;
case ACCE_07: // 热键F7
::PostMessage( hWnd, WM_COMMAND, ID_VIEW_MULTISORT, 0 );
break;
case ACCE_08: // 热键F8
break;
case ACCE_09: // 热键F9
break;
case ACCE_10: // 热键F10
::PostMessage( hWnd, WM_COMMAND, ID_VIEW_F10, 0 );
break;
case ACCE_1: // 上A报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHAA, 0 );
break;
case ACCE_2: // 上B报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHAB, 0 );
break;
case ACCE_3: // 深A报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNA, 0 );
break;
case ACCE_4: // 深B报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNB, 0 );
break;
case ACCE_5: // 上债报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHABOND, 0 );
break;
case ACCE_6: // 深债报价
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNBOND, 0 );
break;
case ACCE_61: // 上A涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHAASORTDP, 0 );
break;
case ACCE_62: // 上B涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHABSORTDP, 0 );
break;
case ACCE_63: // 深A涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNASORTDP, 0 );
break;
case ACCE_64: // 深B涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNBSORTDP, 0 );
break;
case ACCE_65: // 上债涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SHABONDSORTDP, 0 );
break;
case ACCE_66: // 深债涨跌
::PostMessage( hWnd, WM_COMMAND, ID_SLIST_SZNBONDSORTDP, 0 );
break;
case ACCE_71: // 上证信息
break;
case ACCE_72: // 深证信息
break;
case ACCE_73: // 券商信息
break;
case ACCE_81: // 上A综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZAG, 0 );
break;
case ACCE_82: // 上B综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZBG, 0 );
break;
case ACCE_83: // 深A综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZNAG, 0 );
break;
case ACCE_84: // 深B综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZNBG, 0 );
break;
case ACCE_85: // 上债综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZZQ, 0 );
break;
case ACCE_86: // 深债综合
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MSSZNZQ, 0 );
break;
case ACCE_LBDK: // 量比多空
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_LBDK, 0 );
break;
case ACCE_MMLD: // 买卖力道
::PostMessage( hWnd, WM_COMMAND, ID_REALTIME_MMLD, 0 );
break;
default:
ASSERT( FALSE );
}
}
AFX_STATIC_DATA const TCHAR _afxShellOpenFmt[] = _T("%s\\shell\\open\\%s");
AFX_STATIC_DATA const TCHAR _afxShellPrintFmt[] = _T("%s\\shell\\print\\%s");
AFX_STATIC_DATA const TCHAR _afxShellPrintToFmt[] = _T("%s\\shell\\printto\\%s");
AFX_STATIC_DATA const TCHAR _afxDefaultIconFmt[] = _T("%s\\DefaultIcon");
AFX_STATIC_DATA const TCHAR _afxShellNewFmt[] = _T("%s\\ShellNew");
#define DEFAULT_ICON_INDEX 0
AFX_STATIC_DATA const TCHAR _afxIconIndexFmt[] = _T(",%d");
AFX_STATIC_DATA const TCHAR _afxCommand[] = _T("command");
AFX_STATIC_DATA const TCHAR _afxOpenArg[] = _T(" \"%1\"");
AFX_STATIC_DATA const TCHAR _afxPrintArg[] = _T(" /p \"%1\"");
AFX_STATIC_DATA const TCHAR _afxPrintToArg[] = _T(" /pt \"%1\" \"%2\" \"%3\" \"%4\"");
AFX_STATIC_DATA const TCHAR _afxDDEArg[] = _T(" /dde");
AFX_STATIC_DATA const TCHAR _afxDDEExec[] = _T("ddeexec");
AFX_STATIC_DATA const TCHAR _afxDDEOpen[] = _T("[open(\"%1\")]");
AFX_STATIC_DATA const TCHAR _afxDDEPrint[] = _T("[print(\"%1\")]");
AFX_STATIC_DATA const TCHAR _afxDDEPrintTo[] = _T("[printto(\"%1\",\"%2\",\"%3\",\"%4\")]");
AFX_STATIC_DATA const TCHAR _afxShellNewValueName[] = _T("NullFile");
AFX_STATIC_DATA const TCHAR _afxShellNewValue[] = _T("");
void AfxUnregisterShellFileTypes()
{
CString strPathName, strTemp;
AfxGetModuleShortFileName(AfxGetInstanceHandle(), strPathName);
CString strMainFrame;
VERIFY(strMainFrame.LoadString( IDR_MAINFRAME ));
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
strTemp.Format(_afxDefaultIconFmt, (LPCTSTR)strFileTypeId);
AfxDeleteRegKey(strTemp);
// path\shell\open\command = path filename
strTemp.Format(_afxShellOpenFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
AfxDeleteRegKey(strTemp);
// path\shell\print\command = path /p filename
strTemp.Format(_afxShellPrintFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
AfxDeleteRegKey(strTemp);
// path\shell\printto\command = path /pt filename printer driver port
strTemp.Format(_afxShellPrintToFmt, (LPCTSTR)strFileTypeId,
(LPCTSTR)_afxCommand);
AfxDeleteRegKey(strTemp);
AfxExtractSubString( strFilterExt, strMainFrame, CDocTemplate::filterExt);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -