?? stock.cpp
字號:
if (bCtrl)
{
KBegine-=5;
}
else
{
KBegine--;
}
if (bKLine==TRUE)
{
Invalidate();
}
break;
case VK_UP:
KDay+=10;
if (bKLine==TRUE)
{
Invalidate();
}
break;
case VK_DOWN:
if (KDay>1)
{
KDay-=10;
}
if (bKLine==TRUE)
{
Invalidate();
}
break;
case VK_CONTROL:
bCtrl=TRUE;
break;
default:
break;
}
}
void CMyFrame::OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags )
{
switch(nChar)
{
case VK_CONTROL:
bCtrl=FALSE;
break;
default:
break;
}
}
void CMyFrame::OnDayLine()
{
bKLine = FALSE;
Invalidate();
}
void CMyFrame::OnKLine()
{
bKLine = TRUE;
ExchangeK();
Invalidate();
}
void CMyFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
static int lx=0,ly=0;
int x=0,y=0,i;
char chName[100];
CClientDC dc(this);
CPen dashpen(PS_DOT,1,RGB(200,200,0));
CPen blackpen(PS_DOT,1,RGB(0,0,0));
dc.SetBkMode(TRANSPARENT);
dc.SelectObject(&dashpen);
x = point.x;
y = point.y;
if ( x>80 && x < 80+480 )
{
dc.SelectObject(&dashpen);
dc.MoveTo(x,40+2);
dc.LineTo(x,40+300-2);
dc.SelectObject(&blackpen);
dc.MoveTo(lx,40+2);
dc.LineTo(lx,40+300-2);
}
/*for(i=0;i<=m;i++)//有問題
{
if(Point[i][0]==x||Point[i][1]==y)
{
sprintf(chName, "%8s%6.2f", "價格",Price[i]);
dc.TextOut(800, 530, chName, lstrlen(chName)-1);
}
}*/
lx = point.x;
ly = point.y;
}
void CMyFrame::OnCreate()
{
m_hLibrary = ::LoadLibrary("..\\Fstrcv\\Debug\\fstrcv.dll");//裝庫
INITCARD* lpfunction = (INITCARD*)::GetProcAddress(m_hLibrary, "InitCard");
unsigned int uiCardNumber = (*lpfunction)((this->m_hWnd), WM_IRQSTOCK);
m_EnableMessage = (ENABLEMESSAGE*)::GetProcAddress(m_hLibrary, "EnableMessage");
//m_MyCount = (READMYCOUNT*)::GetProcAddress(m_hLibrary, "ReadMyCount");
m_ReceiveInfo = (RECEIVEINFO*)::GetProcAddress(m_hLibrary, "ReceiveInfo");
m_DataAcquisition = (DATAACQUISITION*)::GetProcAddress(m_hLibrary, "DataAcquisition");
}
///////////////////////////////////////////////////
/// 畫圖消息
///
void CMyFrame::OnDrawCommon(WPARAM wParam,LPARAM lParam)//畫公共動態數據
{
CClientDC dc(this);
CRect rect;
char chName[300];
CPoint client;
GetClientRect (&rect);
client.x=rect.right;
client.y=rect.bottom;
dc.SetBkMode(OPAQUE);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(RGB(255,255,255));
//賣
rect.left = client.x-199;
rect.top = 60;
rect.right = client.x-11;
rect.bottom = 60+60;
dc.SelectStockObject(BLACK_BRUSH);
dc.Rectangle(&rect);
sprintf(chName, "%8s%10.2f%10.2f\n", "賣一",(float)m_Stock.Psell1,(float)m_Stock.Vsell1);
dc.TextOut(client.x-198, 60, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%10.2f%10.2f\n", "賣二",(float)m_Stock.Psell2,(float)m_Stock.Vsell2);
dc.TextOut(client.x-198, 60+20, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%10.2f%10.2f\n", "賣三",(float)m_Stock.Psell3,(float)m_Stock.Vsell3);
dc.TextOut(client.x-198, 60+40, chName, lstrlen(chName)-1);
//買
rect.left = client.x-199;
rect.top = 140;
rect.right = client.x-11;
rect.bottom = 140+60;
dc.SelectStockObject(BLACK_BRUSH);
dc.Rectangle(&rect);
sprintf(chName, "%8s%10.2f%10.2f\n", "買一",(float)m_Stock.Pbuy1,(float)m_Stock.Vbuy1);
dc.TextOut(client.x-198, 140, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%10.2f%10.2f\n", "買二",(float)m_Stock.Pbuy2,(float)m_Stock.Vbuy2);
dc.TextOut(client.x-198, 140+20, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%10.2f%10.2f\n", "買三",(float)m_Stock.Pbuy3,(float)m_Stock.Vbuy3);
dc.TextOut(client.x-198, 140+40, chName, lstrlen(chName)-1);
//動態信息
rect.left = client.x-199;
rect.top = 220;
rect.right = client.x-11;
rect.bottom = 220+120;
dc.SelectStockObject(BLACK_BRUSH);
dc.Rectangle(&rect);
dc.SetBkMode(TRANSPARENT);
sprintf(chName, "%8s%6.2f%8s%6.2f\n", "開盤價",m_Stock.fOpen,"最新價",m_Stock.fNew);
dc.TextOut(client.x-205, 220, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%6.2f%8s%6.2f\n", "最高價",m_Stock.fHigh,"最低價",m_Stock.fLow);
dc.TextOut(client.x-205, 220+20, chName, lstrlen(chName)-1);
sprintf(chName, "%8s%6d%10s%6.2f\n", "筆 數",m,"價格增量",M);
dc.TextOut(client.x-205, 220+40, chName, lstrlen(chName)-1);
sprintf(chName, "%12s%6.0f\n","最大成交量",VolMax);
dc.TextOut(client.x-205, 220+60, chName, lstrlen(chName)-1);
if (bKLine)
{
sprintf(chName, "%18s%8.0f\n","最大天成交(萬元)",KAmountMax/10000);
dc.TextOut(client.x-205, 220+80, chName, lstrlen(chName)-1);
}
/*int temp = (*m_MyCount)();
sprintf(chName, "%10s%5d\n","發送數量",temp);
dc.TextOut(client.x-205, 220+100, chName, lstrlen(chName)-1);*/
}
void CMyFrame::OnDrawDayLine(WPARAM wParam,LPARAM lParam)
{
int i=0;
float M6=0,price=0;
float percent=0;
int V6=0;
int voly=0;
CClientDC dc(this);
CRect rect;
char chName[300];
CPoint client;
CPen whitepen(PS_SOLID,1,RGB(255,255,255));
CPen yellowpen(PS_SOLID,1,RGB(255,255,0));
CPen blackpen(PS_SOLID,1,RGB(0,0,0));
dc.SetBkMode(OPAQUE);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(RGB(255,255,255));
//畫坐標值
M6=M/6;
if ( m>0 )
{
for ( i=0; i<13; i++ )
{
//左邊
price=M6*(6-i)+m_Stock.fClose;
sprintf(chName, "%10.2f", price);
dc.TextOut(15, 33+i*25, chName, lstrlen(chName));
//右邊
percent=(M6*(6-i)/m_Stock.fClose)*100;
sprintf(chName, "%10.2f%%", percent);
dc.TextOut(560, 33+i*25, chName, lstrlen(chName));
}
}
//畫分時線
dc.SetBkMode(TRANSPARENT);
dc.SelectObject(&whitepen);
dc.MoveTo(Point[0][0],Point[0][1]);
for( i=1; i<m; i++ )
{
dc.LineTo(Point[i][0],Point[i][1]);
}
//加權平均線
dc.SelectObject(&yellowpen);
dc.MoveTo(PointAver[0][0],PointAver[0][1]);
for( i=1; i<m; i++ )
dc.LineTo(PointAver[i][0],PointAver[i][1]);
//畫成交量線
dc.SelectObject(&yellowpen);
for( i=0; i<m; i++ )
{
dc.MoveTo(80+i*2,487);
dc.LineTo(VPoint[i][0],VPoint[i][1]);
}
//畫成交量坐標值
V6 = VolMax/6;
if ( m>0 )
{
dc.SelectObject(&blackpen);
rect.top = 57+300;
rect.bottom = 57+300+5*25;
rect.left = 15;
rect.right = 75;
dc.SelectStockObject(BLACK_BRUSH);
dc.Rectangle(&rect);
for ( i=0; i<5; i++ )
{
voly=VolMax-V6*(i+1);
sprintf(chName, "%10.2d", voly);
dc.TextOut(10, 57+300+i*25, chName, lstrlen(chName));
}
}
}
void CMyFrame::OnDrawKLine(WPARAM wParam,LPARAM lParam)
{
int i=0;
int a=0,b=0;
CClientDC dc(this);
CRect rect;
RECT kRect,kaRect;
CPoint client;
CPen whitepen(PS_SOLID,1,RGB(255,255,255));
CPen blackpen(PS_SOLID,1,RGB(0,0,0));
CPen cyanPen(PS_SOLID,1,RGB(116,245,240));
CBrush cyanBrush(RGB(116,245,240));
CPen redPen(PS_SOLID,1,RGB(220,112,116));
CBrush blackBrush(RGB(0,0,0));
char chName[200];
GetClientRect(&rect);
client.x = rect.Width();
client.y = rect.Height();
a = (client.y-120)/2 -20;//垂直高度
b = client.x - 220 - 80;//水平寬度
//畫K線
ExchangeK();
ExchangeKAmount();
dc.SetBkMode(OPAQUE);
int n = KPointArray.GetSize();
//for( i=KBegine; (i<KBegine+KDay) && (i<n) ; i++ )
for( i=0; i<n ; i++ )
{
if (KPointArray[i].close.y<KPointArray[i].open.y) //升了,用紅色線
{
dc.SelectObject(&redPen);
dc.SelectObject(&blackBrush);
}
else //降了,用青色線
{
dc.SelectObject(&cyanPen);
dc.SelectObject(&cyanBrush);
}
if ( KPointArray[i].high.x + KBegine*(b/KDay) > 80 && KPointArray[i].high.x + KBegine*(b/KDay) < 80+b )
{
dc.MoveTo(KPointArray[i].high.x + KBegine*(b/KDay), KPointArray[i].high.y ); //畫最高價與最底價
dc.LineTo(KPointArray[i].low.x + KBegine*(b/KDay), KPointArray[i].low.y );
kRect.left = KPointArray[i].open.x + KBegine*(b/KDay);
kRect.top = KPointArray[i].open.y ;
kRect.right = KPointArray[i].close.x + KBegine*(b/KDay);
kRect.bottom = KPointArray[i].close.y ;
dc.Rectangle(&kRect); //畫矩形
kaRect.left = KAmountPointArray[i].top.x + KBegine*(b/KDay);
kaRect.top = KAmountPointArray[i].top.y ;
kaRect.right = KAmountPointArray[i].bottom.x + KBegine*(b/KDay);
kaRect.bottom = KAmountPointArray[i].bottom.y ;
dc.Rectangle(&kaRect); //畫矩形
}
}
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
//畫K線坐標值
for ( i=0; i<6; i++ )
{
sprintf(chName, "%10.2f", KHighMax-(KM/5)*i);
dc.TextOut(18, 65+i*(a/5-2), chName, lstrlen(chName));
}
//畫K線成交金額坐標值
dc.SetBkMode(OPAQUE);
dc.SetBkColor(RGB(0,0,0));
dc.SetTextColor(RGB(255,255,255));
for ( i=0; i<3; i++ )
{
sprintf(chName, "%8.0f", (KAmountMax-(KAmountMax/2)*i)/10000);
dc.TextOut(18, 290+i*43, chName, lstrlen(chName));
}
}
void CMyFrame::OnPaint()//畫靜態信息
{
int i=0;
CPaintDC dc(this);
CRect rect;
char chName[300];
CPoint client;
CPen redpen(PS_SOLID,2,RGB(153,0,0));
CPen dashpen(PS_DOT,1,RGB(255,255,255));
if ( bKLine == FALSE ) //分時線狀態,畫分時線的靜態數據
{
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
GetClientRect (&rect);
client.x=rect.right;
client.y=rect.bottom;
rect.bottom = 40;
rect.top = 20;
rect.left = client.x-200;
rect.right = client.x-10;
dc.DrawText(_T("G浦發 600000"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
rect.bottom = 40;
rect.top = 20;
rect.left = client.x-220;
rect.right = 20;
dc.DrawText(_T("G浦發 600000.sh"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
//右外邊框
dc.SelectObject(&redpen);
dc.MoveTo (client.x-200, 50);
dc.LineTo (client.x-10, 50);
dc.LineTo (client.x-10, client.y-50);
dc.LineTo (client.x-200, client.y-50);
dc.LineTo (client.x-200, 50);
//左外邊框
dc.MoveTo (10, 10);
dc.LineTo (client.x-220, 10);
dc.LineTo (client.x-220, client.y-50);
dc.LineTo (10, client.y-50);
dc.LineTo (10, 10);
//右外邊框中的橫線
/*for(i=0;i<4;i++)
{
dc.MoveTo (client.x-200, (i+1)*(client.y-100)/4+50);
dc.LineTo (client.x-10, (i+1)*(client.y-100)/4+50);
}*/
dc.MoveTo (client.x-200, 130);
dc.LineTo (client.x-10, 130);
dc.MoveTo (client.x-200, 210);
dc.LineTo (client.x-10, 210);
dc.MoveTo (client.x-200, 350);
dc.LineTo (client.x-10, 350);
//背景虛線
dc.SelectObject(&dashpen);
for ( i=0; i<17; i++ )
{
dc.MoveTo( 80, 40+(i+1)*25 );
dc.LineTo( 80+120*4, 40+(i+1)*25 );
}
//畫左邊框日線邊框
dc.SelectObject(&redpen);
rect.left = 80;
rect.top = 40;
rect.right = 560;
rect.bottom = 490;
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(&rect);
//畫下邊框
rect.left = 10;
rect.top = 525;
rect.right = client.x-10;
rect.bottom = client.y-5;
dc.Rectangle(&rect);
//畫下邊框內文字
sprintf(chName, "%8s", "◆金花股份收購西商行面臨兩大法律障礙");
dc.TextOut(15, 535, chName, lstrlen(chName));
//畫橫中間實線
for ( i =0; i<2; i++ )
{
dc.MoveTo( 80, 40+(i+1)*150 );
dc.LineTo( 80+120*4, 40+(i+1)*150 );
}
//畫中間豎實線
for ( i =0; i<3; i++ )
{
dc.MoveTo( 80+(i+1)*120, 40 );
dc.LineTo( 80+(i+1)*120, 40+150*3 );
}
//畫時間信息
sprintf(chName, "%s%26s%26s%26s%26s", "09:30","10:30","13:00","14:00","15:00");
dc.TextOut(62, 490, chName, lstrlen(chName));
//畫動態分時線
SendMessage(WM_DrawCommon,NULL,NULL);
SendMessage(WM_DrawDayLine,NULL,NULL); //畫動態信息
}
else //畫K線
{
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
GetClientRect (&rect);
client.x=rect.right;
client.y=rect.bottom;
rect.bottom = 40;
rect.top = 20;
rect.left = client.x-200;
rect.right = client.x-10;
dc.DrawText(_T("G浦發 600000"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
/////////////////右外邊框
dc.SelectObject(&redpen);
dc.MoveTo (client.x-200, 50);
dc.LineTo (client.x-10, 50);
dc.LineTo (client.x-10, client.y-50);
dc.LineTo (client.x-200, client.y-50);
dc.LineTo (client.x-200, 50);
//右外邊框中的橫線
dc.MoveTo (client.x-200, 130);
dc.LineTo (client.x-10, 130);
dc.MoveTo (client.x-200, 210);
dc.LineTo (client.x-10, 210);
dc.MoveTo (client.x-200, 350);
dc.LineTo (client.x-10, 350);
//////////////////////////////左邊
//左外邊框
dc.MoveTo (10, 10);
dc.LineTo (client.x-220, 10);
dc.LineTo (client.x-220, client.y-50);
dc.LineTo (10, client.y-50);
dc.LineTo (10, 10);
//畫所有橫線
//上第一橫線
dc.MoveTo (10,50);
dc.LineTo (client.x-220, 50);
//上短線
dc.MoveTo (80,70);
dc.LineTo (client.x-220, 70);
//中間第一橫線
dc.MoveTo (10,client.y-70);
dc.LineTo (client.x-220,client.y-70);
//下邊橫線
dc.MoveTo (10, 50+(client.y-120)/2);
dc.LineTo (client.x-220, 50+(client.y-120)/2);
//下短線1
dc.MoveTo (80,50+(client.y-120)/2+20);
dc.LineTo (client.x-220,50+(client.y-120)/2+20);
//下短線2
dc.MoveTo (80, 50+(client.y-120)*3/4);
dc.LineTo (client.x-220, 50+(client.y-120)*3/4);
//下短線3
dc.MoveTo (80,50+(client.y-120)*3/4+20);
dc.LineTo (client.x-220, 50+(client.y-120)*3/4+20);
//豎紅線
dc.MoveTo( 80, 50 );
dc.LineTo( 80, client.y-70 );
//背景虛線
dc.SelectObject(&dashpen);
for ( i=0; i<4; i++ )
{
dc.MoveTo( 80, 70+(i+1)*( ( (client.y-120)/2-20 )/5 ) );
dc.LineTo( client.x-220, 70+(i+1)*( ( (client.y-120)/2-20 )/5 ) );
}
//下方虛線
dc.MoveTo (80, 50+(client.y-120)/2+20+( (client.y-120)/4-20 )/2 + (client.y-120)/4 );
dc.LineTo (client.x-220, 50+(client.y-120)/2+20+( (client.y-120)/4-20 )/2 + (client.y-120)/4 );
dc.MoveTo (80, 50+(client.y-120)/2+20+( (client.y-120)/4-20 )/2 );
dc.LineTo (client.x-220, 50+(client.y-120)/2+20+( (client.y-120)/4-20)/2 );
//畫下邊框
dc.SelectStockObject(NULL_BRUSH);
dc.SelectObject(&redpen);
rect.left = 10;
rect.top = 525;
rect.right = client.x-10;
rect.bottom = client.y-5;
dc.Rectangle(&rect);
//畫下邊框內文字
sprintf(chName, "%8s", "◆金花股份收購西商行面臨兩大法律障礙");
dc.TextOut(15, 535, chName, lstrlen(chName));
//畫動態分時線
SendMessage(WM_DrawCommon,NULL,NULL);
SendMessage(WM_DrawKLine,NULL,NULL);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -