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

📄 afxcore.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
// 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 + -