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

📄 mainfrm.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
				nMenuHeight += 9;
			else
				nMenuHeight += 19;
		}
	}

	// Left Width
	int nLeftWidth = rectButton.Height();
	for (int i=0; i<pBar->GetCount(); i++)
	{
		if (pBar->GetButtonStyle(i) == TBSTYLE_BUTTON)
		{
			CRect rectItem;
			pBar->GetToolBarCtrl().GetRect(i, &rectItem);
			nLeftWidth = rectItem.Width();
			break;
		}
	}

	// Track Point
	CPoint	pt;
	if (cyScreen-rectButton.bottom-2 >= nMenuHeight
		|| rectButton.top-2 < nMenuHeight)
	{
		pt.x = rectButton.left + nLeftWidth;
		pt.y = rectButton.bottom + 1;
	}
	else
	{
		pt.x = rectButton.left + nLeftWidth;
		pt.y = rectButton.top - 1;
	}

	return pt;
}

void CMainFrame::InitMenuPopup(CMenu* pPopupMenu)
{
	if (NULL == pPopupMenu || NULL == pPopupMenu->GetSafeHmenu())
		return;

	for (UINT nMenu=0; nMenu<pPopupMenu->GetMenuItemCount(); nMenu++)
	{
		if (ID_SLIST_GROUP1 == pPopupMenu->GetMenuItemID(nMenu))
		{
			pPopupMenu->ModifyMenu(nMenu, MF_BYPOSITION | MF_GRAYED, ID_SLIST_GROUP1, (LPCTSTR)NULL);
			for (UINT k=pPopupMenu->GetMenuItemCount()-1; k>nMenu; k--)
				pPopupMenu->DeleteMenu(k, MF_BYPOSITION);
			AfxMenuInsertGroup(pPopupMenu, nMenu+1, ID_SLIST_GROUP_START, ID_SLIST_GROUP_END, TRUE);
			break;
		}
		else if (ID_SLIST_DOMAIN1 == pPopupMenu->GetMenuItemID(nMenu))
		{
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			AfxMenuInsertDomain(pPopupMenu, nMenu, ID_SLIST_DOMAIN_START, ID_SLIST_DOMAIN_END);
			break;
		}
		else if (ID_OPTION_ADDTOGROUP == pPopupMenu->GetMenuItemID(nMenu))
		{
			pPopupMenu->ModifyMenu(nMenu, MF_BYPOSITION | MF_GRAYED, ID_OPTION_ADDTOGROUP, (LPCTSTR)NULL);
			for (UINT k=pPopupMenu->GetMenuItemCount()-1; k>nMenu; k--)
				pPopupMenu->DeleteMenu(k, MF_BYPOSITION);
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			AfxMenuInsertGroup(pPopupMenu, nMenu+1, ID_OPTION_ADDTOGROUP_START, ID_OPTION_ADDTOGROUP_END,
						pView && (pView->IsKindOf(RUNTIME_CLASS(CSListView))||pView->IsKindOf(RUNTIME_CLASS(CGraphView))||pView->IsKindOf(RUNTIME_CLASS(CBaseView))));
			break;
		}
		else if (ID_VIEW_TECHKLINE == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			for (UINT nID = STT_KLINE_MAX; nID >= STT_KLINE_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHTREND == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			for (UINT nID = STT_TREND_MAX; nID >= STT_TREND_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHENERGY == pPopupMenu->GetMenuItemID(nMenu))
		{
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			for (UINT nID = STT_ENERGY_MAX; nID >= STT_ENERGY_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHSWING == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			for (UINT nID = STT_SWING_MAX; nID >= STT_SWING_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHOTHER == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			for (UINT nID = STT_OTHER_MAX; nID >= STT_OTHER_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHCLK == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			for (UINT nID = STT_CLK_MAX; nID >= STT_CLK_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID, AfxGetSTTFullName(nID));
			}
		}
		else if (ID_VIEW_TECHUSER == pPopupMenu->GetMenuItemID(nMenu))
		{
			CView * pView = AfxGetStaticDoc()->GetActiveView();
			UINT	nFlags	=	((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
			pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
			
			UINT nTechUserCount	=	CTechUser::GetTechUserCount();
			UINT nIDEnd = STT_USER_MIN+nTechUserCount-1;
			if (nIDEnd > STT_USER_MIN+14)
				nIDEnd	=	STT_USER_MIN+14;
			for (UINT nID = nIDEnd; nID >= STT_USER_MIN; nID --)
			{
				UINT	nFlagsLocal	=	nFlags;
				if (AfxGetProfile().IsGraphTechShow(nID))	nFlagsLocal	|=	MF_CHECKED;
				pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START+nID-STT_USER_MIN+1+STT_MAX, AfxGetSTTFullName(nID));
			}
		}
	}
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	if (TIMER_TIME == nIDEvent)
	{
		CSPTime	time	=	CSPTime::GetCurrentTime();
		CString	string	=	(LPCTSTR)AfxGetTimeString(time.GetTime(), "%H:%M:%S,", FALSE);
		m_wndStatusBar.SetPaneText(3, string);
	}
	else if (TIMER_STOCKINDEXREFRESH == nIDEvent)
	{
		CString strSHTipFmt, strSZTipFmt;
		strSHTipFmt.LoadString(IDS_MAINFRAME_SHINDEXTIP);
		strSZTipFmt.LoadString(IDS_MAINFRAME_SZINDEXTIP);

		double dDevided = 100000000;
#ifdef CLKLAN_ENGLISH_US
		dDevided = 1000000000;
#endif

		CString	string;
		double	dDiff = 0;
		CStockInfo	info;
		COLORREF	clrRise		=	AfxGetProfile().GetColor(CColorClass::clrRise);
		COLORREF	clrFall		=	AfxGetProfile().GetColor(CColorClass::clrFall);

		if (AfxGetStockContainer().GetStockInfo(STKLIB_CODE_SZZS, &info))
		{
			info.GetDiff(&dDiff,info.m_datetech,1);
			string.Format(strSHTipFmt, info.m_fClose, dDiff, info.m_fAmount/dDevided);
			// m_wndStatusBar.SetPaneColor(dDiff > 0 ? clrRise : clrFall);
			m_wndStatusBar.SetPaneText(1, string);
		}
		if (AfxGetStockContainer().GetStockInfo(STKLIB_CODE_SZNCZ, &info))
		{
			info.GetDiff(&dDiff,info.m_datetech,1);
			string.Format(strSZTipFmt, info.m_fClose, dDiff, info.m_fAmount/dDevided);
			// m_wndStatusBar.SetPaneColor(dDiff > 0 ? clrRise : clrFall);
			m_wndStatusBar.SetPaneText(2, string);
		}

		PostMessage(WM_APP_STKRECEIVER_ALARM, STKRCV_ALARM_REFRESH, 0);
	}
	// 检测是否有新版本,自动升级
	else if (TIMER_AUTOUPDATE == nIDEvent)
	{
		KillTimer(TIMER_AUTOUPDATE);

		CInternetSession m_cis;
		CHttpConnection* m_chc;
		m_cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5);
		m_chc = m_cis.GetHttpConnection(AfxGetProfile().GetHTTPServerDomain());

		CHttpFile* pFile = m_chc->OpenRequest(CHttpConnection::HTTP_VERB_GET, "/download/update.ini");
		if (!pFile->SendRequest())
		{
			pFile->Close();
			AfxMessageBox("SendRequest Error");
		}

		char szPath[256];
		CString strPath;
		GetModuleFileName(NULL, szPath, 256);
		strPath = szPath;
		if (strPath.ReverseFind('\\') >= 0)
			strPath = strPath.Left(strPath.ReverseFind('\\'));
		strPath += "\\update.ini";

		CStdioFile csf;
		csf.Open(strPath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
		char buf[2048];
		int n;
		while ((n = pFile->Read(buf, 2048)) >0)
			csf.Write(buf, n);
		csf.Close();
		pFile->Close();
		char szVer[16];
		GetPrivateProfileString("TsKing", "Version", "2", szVer, 16, strPath);
		if (atof(szVer) > float(theApp.m_nVersion[3]))
		{
			int nRet = AfxMessageBox("已经有新的版本,是否需要升级?", MB_YESNO);
			if (nRet = IDOK)
			{
				// 启动升级对话框
				CUpgradeDlg* dlg = new CUpgradeDlg;
				dlg->Create(CUpgradeDlg::IDD, this);
				dlg->SetAutoDelete(TRUE);
				dlg->CenterWindow(this);
				dlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOSIZE);
				dlg->OnOK();
			}
		}
		//else
		//{
		//	CString strText;
		//	strText.Format("%s %d", szVer, theApp.m_nVersion[3]);
		//	AfxMessageBox(strText);
		//}
	}
	else if (TIMER_SHOWNETINFO == nIDEvent)
	{
		static	unsigned	long	countShow	=	0;
		countShow	++;
		if (countShow == 10)
		{
			KillTimer(TIMER_SHOWNETINFO);
			CNetInfoDlg	dlg;
			dlg.DoModal();
			if (AfxGetProfile().HasNewVersion()
				&& IDYES == AfxMessageBox(IDS_DOWNLOAD_UPGRADENOW, MB_YESNO))
			{
				CUpgradeDlg	* dlg = new CUpgradeDlg;
				dlg->Create(CUpgradeDlg::IDD, this);
				dlg->SetAutoDelete(TRUE);
				dlg->SetAutoRun(TRUE);
				dlg->CenterWindow(this);
				dlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOSIZE);
			}
		}
	}

	CMDIFrameWnd::OnTimer(nIDEvent);
}

// 判断软件是否合法函数
LRESULT CMainFrame::CreateValid(WPARAM wParam, LPARAM lParam)
{
	if (wParam < 100)
	{
		if (AfxGetSView().IsEva() && AfxGetSView().GetLeft() < 30)
		{
			PostMessage(WM_USER_CHECKSN, 250);
		}
	}
	else if (wParam >= 100 && wParam < 200)
	{
		PostMessage(lParam);
	}
	else
	{
		AfxAssertQuit();
	}
	return wParam;
}

LRESULT CMainFrame::OnUpdateBarMenu(WPARAM wParam, LPARAM lParam)
{
	return 0;
}

LRESULT CMainFrame::OnNifMessage(WPARAM wParam, LPARAM lParam)
{
	static BOOL g_bQuoteTipVisited = FALSE;

	if (WM_LBUTTONDOWN == lParam)
	{
		if (!IsIconic())
		{
			ShowWindow(SW_MINIMIZE);
			if (AfxGetProfile().GetNotifyIcon())
				ShowWindow(SW_HIDE);
		}
		else
		{
			BOOL bQuoteTipVisible = CQuoteTipDlg::GetInstance().IsWindowVisible();
			CQuoteTipDlg::GetInstance().Hide();
			SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
			ShowWindow(SW_RESTORE);
			UpdateWindow();

			if (!g_bQuoteTipVisited || bQuoteTipVisible)
			{
			}
			g_bQuoteTipVisited = FALSE;
			RecalcLayout();
		}
	}
	else if (WM_RBUTTONDOWN == lParam)
	{
		// 临时刷新一下行情
		CStockContainer & container = AfxGetSListStockContainer();
		AfxGetStkReceiver().RequestStockData(CStock::dataReport, container.GetData(), container.GetSize(), 0, 0);

		// Show Quote
		CQuoteTipDlg::GetInstance().ShowGradual();
		CQuoteTipDlg::GetInstance().SetAutoHide(5, TRUE);
		g_bQuoteTipVisited = TRUE;
	}
	return 0;
}

LRESULT CMainFrame::OnInitDates(WPARAM wParam, LPARAM lParam)
{
	return 0;
}

LRESULT CMainFrame::OnUpdateSlistView(WPARAM wParam, LPARAM lParam)
{
	AfxGetSListStockContainer().ReRetrieveFromStatic(AfxGetActiveStrategy());
	AfxGetStaticDoc()->UpdateAllViews(NULL, UPDATE_HINT_SLISTVIEW, NULL);
	return 0;
}

LRESULT CMainFrame::OnStkReceiverAlarm(WPARAM wParam, LPARAM lParam)
{
	if (STKRCV_ALARM_WARNING == wParam)
	{
		CAlarmTipDlg::GetInstance().ShowGradual();
		CAlarmTipDlg::GetInstance().SetAutoHide(5, TRUE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -