📄 demo.c
字号:
Index.Volume=s3tol(PackedIndex.Volume);//// SHIndex++;// if(SHIndex>=SHMAX) SHIndex=0;// sprintf(SHData[SHIndex],// "[Index] %u %lx %lx %8.3f %8.3f %8.3f %8ld",// Index.TotalRows, Index.Date, Index.Time,Index.Index,// Index.AIndex,Index.BIndex,Index.Volume);// SHData[SHIndex][100]='\0'; } else // 各股 { if((RowNumber &0x8000)==0) // 不变量/微变量 { RowNumber = RowNumber & 0x7fff; if(RowNumber>=STOCKMAX) break; pShNode[RowNumber].RowNumber = RowNumber; memmove(IF.String,rs.Info,rs.InfoLength); pShNode[RowNumber].StockNo = s3tol(IF.CR[0].StockNumber); memmove(pShNode[RowNumber].StockName,IF.CR[0].StockName,8); pShNode[RowNumber].StockName[8]='\0'; pShNode[RowNumber].LastClose=(unsigned short)IF.String[14]; pShNode[RowNumber].LastClose<<=8; pShNode[RowNumber].LastClose|=(unsigned short)IF.String[13]; pShNode[RowNumber].Open=(unsigned short)IF.String[16]; pShNode[RowNumber].Open<<=8; pShNode[RowNumber].Open|=(unsigned short)IF.String[15]; pShNode[RowNumber].flag = 0x01; if(rs.InfoLength >= sizeof(IF.CR[0]) *2) { RowNumber = IF.CR[1].RowNumber & 0xfff; if(RowNumber>=STOCKMAX) break; pShNode[RowNumber].RowNumber=RowNumber; memmove(IF.String,rs.Info,rs.InfoLength); pShNode[RowNumber].StockNo = s3tol(IF.CR[1].StockNumber); memmove(pShNode[RowNumber].StockName,IF.CR[1].StockName,8); pShNode[RowNumber].StockName[8]='\0'; pShNode[RowNumber].LastClose=(unsigned short)IF.String[31]; pShNode[RowNumber].LastClose<<=8; pShNode[RowNumber].LastClose|=IF.String[30]; pShNode[RowNumber].Open=(unsigned short)IF.String[33]; pShNode[RowNumber].Open<<=8; pShNode[RowNumber].Open|=IF.String[32]; pShNode[RowNumber].flag = 0x01; } } else // 变化量 { memmove(IF.String,rs.Info,rs.InfoLength); RowNumber = IF.VR.RowNumber & 0x7fff; if(RowNumber>=STOCKMAX) break; pShNode[RowNumber].Volume = (unsigned long)IF.String[4]; pShNode[RowNumber].Volume <<= 8; pShNode[RowNumber].Volume |= (unsigned long)IF.String[3]; if(IF.VR.Factor & 1) pShNode[RowNumber].Volume *= 100L; pShNode[RowNumber].Amount = (unsigned long)IF.String[6]; pShNode[RowNumber].Amount <<= 8; pShNode[RowNumber].Amount |= (unsigned long)IF.String[5]; if(IF.VR.Factor & 2) pShNode[RowNumber].Amount *=10L; pShNode[RowNumber].Highest = (unsigned long)IF.String[8]; pShNode[RowNumber].Highest <<= 8; pShNode[RowNumber].Highest |= (unsigned long)IF.String[7]; pShNode[RowNumber].Lowest = (unsigned long)IF.String[10]; pShNode[RowNumber].Lowest <<= 8; pShNode[RowNumber].Lowest |= (unsigned long)IF.String[9]; pShNode[RowNumber].Newest = (unsigned long)IF.String[12]; pShNode[RowNumber].Newest <<= 8; pShNode[RowNumber].Newest |= (unsigned long)IF.String[11]; pShNode[RowNumber].Buy = (unsigned long)IF.String[14]; pShNode[RowNumber].Buy <<= 8; pShNode[RowNumber].Buy |= (unsigned long)IF.String[13]; pShNode[RowNumber].Sell = (unsigned long)IF.String[16]; pShNode[RowNumber].Sell <<= 8; pShNode[RowNumber].Sell |= (unsigned long)IF.String[15]; pShNode[RowNumber].BuyHands1 = (unsigned short)IF.String[18]; pShNode[RowNumber].BuyHands1 <<= 8; pShNode[RowNumber].BuyHands1 |= (unsigned short)IF.String[17]; pShNode[RowNumber].BuyHands2 = (unsigned short)IF.String[20]; pShNode[RowNumber].BuyHands2 <<= 8; pShNode[RowNumber].BuyHands2 |= (unsigned short)IF.String[19]; pShNode[RowNumber].BuyHands3 = (unsigned short)IF.String[22]; pShNode[RowNumber].BuyHands3 <<= 8; pShNode[RowNumber].BuyHands3 |= (unsigned short)IF.String[21]; pShNode[RowNumber].BuyPrice2 = pShNode[RowNumber].Buy - (unsigned long)IF.String[23]; pShNode[RowNumber].BuyPrice3 = pShNode[RowNumber].Buy - (unsigned long)IF.String[24]; pShNode[RowNumber].SellHands1 = (unsigned short)IF.String[26]; pShNode[RowNumber].SellHands1 <<= 8; pShNode[RowNumber].SellHands1 |= (unsigned short)IF.String[25]; pShNode[RowNumber].SellHands2 = (unsigned short)IF.String[28]; pShNode[RowNumber].SellHands2 <<= 8; pShNode[RowNumber].SellHands2 |= (unsigned short)IF.String[27]; pShNode[RowNumber].SellHands3 = (unsigned short)IF.String[30]; pShNode[RowNumber].SellHands3 <<= 8; pShNode[RowNumber].SellHands3 |= (unsigned short)IF.String[29]; pShNode[RowNumber].SellPrice2 = pShNode[RowNumber].Sell + (unsigned long)IF.String[31]; pShNode[RowNumber].SellPrice3 = pShNode[RowNumber].Sell + (unsigned long)IF.String[32]; pShNode[RowNumber].flag |= 2; tn=pShNode[RowNumber]; if(tn.flag == 3) { SHIndex++; if(SHIndex>=SHMAX) SHIndex=0; sprintf(SHData[SHIndex], "%06ld %s %7.2f %7.2f %7.2f %7.2f %7.2f %10ld %10ld", tn.StockNo, tn.StockName, Divide100(tn.LastClose), Divide100(tn.Open), Divide100(tn.Highest), Divide100(tn.Lowest), Divide100(tn.Newest), tn.Volume, tn.Amount); SHData[SHIndex][100]='\0'; } } } } else if( (rs.Address == 0x3L) && (rs.AL == 1) ) { RowNumber = rs.Info[1]; RowNumber <<=8; RowNumber |= rs.Info[0]; if(RowNumber == 0) // 指数 { memmove(IndexStr.str,rs.Info,rs.InfoLength); PackedIndex = IndexStr.Index; Index.RowNumber=RowNumber; Index.TotalRows=PackedIndex.TotalRows; Index.Date=s3tol(PackedIndex.Date); Index.Time=s3tol(PackedIndex.Time); Index.Index=s3tol(PackedIndex.Index); Index.AIndex=s3tol(PackedIndex.AIndex); Index.BIndex=s3tol(PackedIndex.BIndex); Index.Volume=s3tol(PackedIndex.Volume);// SZIndex++;// if(SZIndex>=SZMAX) SZIndex=0;// sprintf(SZData[SZIndex],"[Index] %u %lx %lx %8.3f %8.3f %8.3f %8ld",// Index.TotalRows,Index.Date,Index.Time,Index.Index,// Index.AIndex,Index.BIndex,Index.Volume);// SZData[SZIndex][100]='\0'; } else // 各股 { if((RowNumber &0x8000)==0) // 不变量/微变量 { RowNumber = RowNumber & 0x7fff; if(RowNumber>=STOCKMAX) break; pSzNode[RowNumber].RowNumber = RowNumber; memmove(IF.String,rs.Info,rs.InfoLength); pSzNode[RowNumber].StockNo = s3tol(IF.CR[0].StockNumber); memmove(pSzNode[RowNumber].StockName,IF.CR[0].StockName,8); pSzNode[RowNumber].StockName[8]='\0'; pSzNode[RowNumber].LastClose=(unsigned short)IF.String[14]; pSzNode[RowNumber].LastClose<<=8; pSzNode[RowNumber].LastClose|=(unsigned short)IF.String[13]; pSzNode[RowNumber].Open=(unsigned short)IF.String[16]; pSzNode[RowNumber].Open<<=8; pSzNode[RowNumber].Open|=(unsigned short)IF.String[15]; pSzNode[RowNumber].flag = 0x01; if(rs.InfoLength >= sizeof(IF.CR[0]) *2) { RowNumber = IF.CR[1].RowNumber & 0x7fff; if(RowNumber>=STOCKMAX) break; pSzNode[RowNumber].RowNumber=RowNumber; memmove(IF.String,rs.Info,rs.InfoLength); pSzNode[RowNumber].StockNo = s3tol(IF.CR[1].StockNumber); memmove(pSzNode[RowNumber].StockName,IF.CR[1].StockName,8); pSzNode[RowNumber].StockName[8]='\0'; pSzNode[RowNumber].LastClose=(unsigned short)IF.String[31]; pSzNode[RowNumber].LastClose<<=8; pSzNode[RowNumber].LastClose|=IF.String[30]; pSzNode[RowNumber].Open=(unsigned short)IF.String[33]; pSzNode[RowNumber].Open<<=8; pSzNode[RowNumber].Open|=IF.String[32]; pSzNode[RowNumber].flag = 0x01; } } else // 变化量 { memmove(IF.String,rs.Info,rs.InfoLength); RowNumber = IF.VR.RowNumber & 0x7fff; if(RowNumber>=STOCKMAX) break; pSzNode[RowNumber].Volume = (unsigned short)IF.String[4]; pSzNode[RowNumber].Volume <<= 8; pSzNode[RowNumber].Volume |= (unsigned short)IF.String[3]; if(IF.VR.Factor & 1) pSzNode[RowNumber].Volume *= 100L; pSzNode[RowNumber].Amount = (unsigned short)IF.String[6]; pSzNode[RowNumber].Amount <<= 8; pSzNode[RowNumber].Amount |= (unsigned short)IF.String[5]; if(IF.VR.Factor & 2) pSzNode[RowNumber].Amount *=10L; pSzNode[RowNumber].Highest = (unsigned short)IF.String[8]; pSzNode[RowNumber].Highest <<= 8; pSzNode[RowNumber].Highest |= (unsigned short)IF.String[7]; pSzNode[RowNumber].Lowest = (unsigned short)IF.String[10]; pSzNode[RowNumber].Lowest <<= 8; pSzNode[RowNumber].Lowest |= (unsigned short)IF.String[9]; pSzNode[RowNumber].Newest = (unsigned short)IF.String[12]; pSzNode[RowNumber].Newest <<= 8; pSzNode[RowNumber].Newest |= (unsigned short)IF.String[11]; pSzNode[RowNumber].Buy = (unsigned short)IF.String[14]; pSzNode[RowNumber].Buy <<= 8; pSzNode[RowNumber].Buy |= (unsigned short)IF.String[13]; pSzNode[RowNumber].Sell = (unsigned short)IF.String[16]; pSzNode[RowNumber].Sell <<= 8; pSzNode[RowNumber].Sell |= (unsigned short)IF.String[15]; pSzNode[RowNumber].BuyHands1 = (unsigned short)IF.String[18]; pSzNode[RowNumber].BuyHands1 <<= 8; pSzNode[RowNumber].BuyHands1 |= (unsigned short)IF.String[17]; pSzNode[RowNumber].BuyHands2 = (unsigned short)IF.String[20]; pSzNode[RowNumber].BuyHands2 <<= 8; pSzNode[RowNumber].BuyHands2 |= (unsigned short)IF.String[19]; pSzNode[RowNumber].BuyHands3 = (unsigned short)IF.String[22]; pSzNode[RowNumber].BuyHands3 <<= 8; pSzNode[RowNumber].BuyHands3 |= (unsigned short)IF.String[21]; pSzNode[RowNumber].BuyPrice2 = pSzNode[RowNumber].Buy - (unsigned short)IF.String[23]; pSzNode[RowNumber].BuyPrice3 = pSzNode[RowNumber].Buy - (unsigned short)IF.String[24]; pSzNode[RowNumber].SellHands1 = (unsigned short)IF.String[26]; pSzNode[RowNumber].SellHands1 <<= 8; pSzNode[RowNumber].SellHands1 |= (unsigned short)IF.String[25]; pSzNode[RowNumber].SellHands2 = (unsigned short)IF.String[28]; pSzNode[RowNumber].SellHands2 <<= 8; pSzNode[RowNumber].SellHands2 |= (unsigned short)IF.String[27]; pSzNode[RowNumber].SellHands3 = (unsigned short)IF.String[30]; pSzNode[RowNumber].SellHands3 <<= 8; pSzNode[RowNumber].SellHands3 |= (unsigned short)IF.String[29]; pSzNode[RowNumber].SellPrice2 = pSzNode[RowNumber].Sell + (unsigned short)IF.String[31]; pSzNode[RowNumber].SellPrice3 = pSzNode[RowNumber].Sell + (unsigned short)IF.String[32]; pSzNode[RowNumber].flag |= 2; tn=pSzNode[RowNumber]; if(tn.flag == 3) { SZIndex++; if(SZIndex>=SZMAX) SZIndex=0; sprintf(SZData[SZIndex], "%04ld %s %7.2f %7.2f %7.2f %7.2f %7.2f %10ld %10ld", tn.StockNo, tn.StockName, Divide100(tn.LastClose), Divide100(tn.Open), Divide100(tn.Highest), Divide100(tn.Lowest), Divide100(tn.Newest), tn.Volume, tn.Amount); SZData[SZIndex][100]='\0'; } } } } else if( (rs.Address >= 0x0L) && (rs.Address <= 0x7L) && (rs.AL == 2) ) { i++; } } }// lpFunction = GetProcAddress(hLibrary, "CtrlIntr");// (* lpFunction)(1); InvalidateRect(hWnd, &SHDataRect, FALSE); // 画提示信息. InvalidateRect(hWnd, &SZDataRect, FALSE); // 画提示信息. InvalidateRect(hWnd, &TotalRect, FALSE); // 画提示信息. break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_ABOUT: DialogBox(hInst, "ABOUTBOX", hWnd, About); break; case IDM_QUIT: PostQuitMessage(0); break; } break; case WM_DESTROY: lpFunction = GetProcAddress(hLibrary, "RetrieveCard"); (* lpFunction)(); FreeLibrary(hLibrary); PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0);}//---------------------------------------------------------------------------------BOOL CALLBACK About(HWND hDlg, UINT message, UINT wParam, LONG lParam){ switch (message) { case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, TRUE); return (TRUE); } return (TRUE); } return (FALSE); UNREFERENCED_PARAMETER(lParam);}void ExpandData(unsigned long * target, unsigned char * source, int Factor){ int i; long l; l=0; Factor = 3 - Factor; for(i = 2; i >= 0; i--) { l <<= 8; l |= source[i]; } for(i=0; i<Factor; i++) l *= 10; *target = l; return;}unsigned long s3tol(unsigned char string[]){ int i; unsigned long l=0L; unsigned long l1; for(i=0;i<3;i++) { l1 = string[i]; l1 <<= 8*(2-i); l |= l1; } return l;}float Divide100(unsigned long Number){ return((float)(Number/100.0));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -