winshow
// ShowWin.h: interface for the CShowWin class. // ////////////////////////////////////////////////////////////////////// #include <windows.h> #include <dos.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define DISPLEN 900 class CShowWin { public: void SetWinName(LPSTR winname); void AddContoDisp(char *pCon,WORD wLen,BOOL bRcv); void create(LPSTR ClassName,LPSTR WinName,HINSTANCE HInst); HWND m_hwnd; int DispLength; BOOL bStop; BYTE DispBuff[1024]; BOOL bColorBuf[1024]; void OutOneByte(WORD wBytePos,HDC hDC); static LRESULT CALLBACK WatchProc( HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam ); static UINT WatchThread(LPVOID *h); HWND CreateWin(); CShowWin(); HINSTANCE hInst; HMENU hMenu,hMenu1; virtual ~CShowWin(); LPSTR classname,windowname; };
CPP
// ShowWin.cpp: implementation of the CShowWin class. // ////////////////////////////////////////////////////////////////////// //#include "c103yx.h" #include "ShowWin.h" #include "winuser.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// //extern CShowWin myWin; CShowWin::CShowWin() { DispLength=0; } CShowWin::~CShowWin() { } void CShowWin::OutOneByte(WORD wBytePos,HDC hDC) { WORD wRow,wCol; wRow=wBytePos/30; wCol=wBytePos%30; if(bColorBuf[wBytePos]==TRUE) //发送的字节 { SetBkColor(hDC,RGB(192,192,192)); SetTextColor(hDC,RGB(0,0,0)); } else { SetBkColor(hDC,RGB(0,0,255)); SetTextColor(hDC,RGB(255,255,0)); } char DispText[8]; sprintf(DispText,"%02X",DispBuff[wBytePos]); TextOut(hDC,wCol*24,wRow*18,DispText,2); } LRESULT CALLBACK CShowWin::WatchProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { WORD i; HDC hDC; PAINTSTRUCT PtStr; WORD wNotifyCode; WORD wID ; CREATESTRUCT *p; //=(CShowWin *)lParam; // LPSTR name=mywin->classname; static CShowWin* mywin; switch(message) { case WM_CREATE: // SetTimer(hWnd,1,1000,NULL); p=(CREATESTRUCT *)lParam; mywin=(CShowWin*)p->lpCreateParams; break; case WM_TIMER: break; case WM_COMMAND: wNotifyCode = HIWORD(wParam); wID = LOWORD(wParam); /* if(wNotifyCode==0) { if(wID==0x345) { AfxMessageBox("hao"); } if(wID==0x346) { AfxMessageBox("bu"); } if(wID==0x347) { AfxMessageBox("ma"); } } //hwndCtl = (HWND) lParam; */ break; case WM_CHAR: //CTRL_C if(wParam == 3) { if(mywin->bStop) mywin->bStop = FALSE; else mywin->bStop = TRUE; } break; case WM_PAINT: // mywin=(CShowWin *)lParam; hDC=BeginPaint(hWnd,&PtStr); for(i=0;i<mywin->DispLength;i++) { mywin->OutOneByte(i,hDC); } EndPaint(hWnd,&PtStr); break; case WM_DESTROY: DestroyWindow(mywin->m_hwnd); mywin->m_hwnd=NULL; UnregisterClass(mywin->classname,mywin->hInst); PostQuitMessage ( 0 ); case WM_CLOSE: DestroyWindow(mywin->m_hwnd); break; default: return DefWindowProc(hWnd,message,wParam,lParam); } return (0L); } HWND CShowWin::CreateWin() { static WNDCLASS wndclass; HWND hWindow; wndclass.style = CS_HREDRAW|CS_VREDRAW|CS_PARENTDC|CS_CLASSDC; wndclass.lpfnWndProc = WatchProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = (HINSTANCE)hInst; wndclass.hIcon = NULL; wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszClassName = (LPSTR)classname; if(RegisterClass(&wndclass)) { //hMenu=CreateMenu(); //hMenu1=CreateMenu(); hWindow=CreateWindow((LPSTR)classname,(LPSTR)windowname,WS_OVERLAPPED|WS_MINIMIZEBOX|WS_THICKFRAME,100,100,600,400,NULL,NULL,(HINSTANCE)hInst,this); EnableMenuItem (GetSystemMenu(hWindow, FALSE), SC_CLOSE,MF_ENABLED); /*int bv=InsertMenu(hMenu, 0xFFFFFFFF, MF_BYCOMMAND |MF_BYPOSITION |MF_STRING|MF_POPUP , (unsigned int)hMenu1, "wweee"); bv=InsertMenu(hMenu1, 0xFFFFFFFF, MF_BYCOMMAND |MF_BYPOSITION |MF_STRING , 0x345, "wweee"); bv=InsertMenu(hMenu1, 0xFFFFFFFF, MF_BYCOMMAND |MF_BYPOSITION |MF_STRING , 0x346, "wweee1"); bv=InsertMenu(hMenu, 0xFFFFFFFF, MF_BYCOMMAND |MF_BYPOSITION |MF_STRING, 0x347, "wweee1"); DrawMenuBar(hWindow); */ ShowWindow(hWindow,SW_SHOW); return(hWindow); } return NULL; } UINT CShowWin::WatchThread(LPVOID *h) { MSG msg; CShowWin* mywin=(CShowWin *)h; if(mywin->m_hwnd!=NULL) return 1; mywin->m_hwnd=mywin->CreateWin(); // mywin->classname while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage((LPMSG)&msg); DispatchMessage((LPMSG)&msg); } return 0; } void CShowWin::create(LPSTR ClassName, LPSTR WinName, HINSTANCE HInst) { HANDLE hThread; DWORD dwThreadID ; classname=ClassName; windowname=WinName; hInst=HInst; hThread=CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)WatchThread, this, CREATE_SUSPENDED, &dwThreadID); if(hThread!=NULL) ResumeThread(hThread); //AfxMessageBox("sucess"); if(hThread==NULL) return ; } void CShowWin::AddContoDisp(char *pCon, WORD wLen, BOOL bRcv) { if(m_hwnd==NULL) return; if(bStop) return; int i; if((wLen + DispLength)>DISPLEN) { WORD wTotal = wLen + DispLength; WORD wDelete = 30; while(1) { if((wTotal-wDelete)<=DISPLEN) break; wDelete += 30; } WORD wLeft=wTotal-wDelete; if(wDelete < DispLength) { memmove(DispBuff,DispBuff+wDelete,DispLength - wDelete); // memmove(pComDev->szColorBuf,pComDev->szColorBuf+wDelete,pComDev->wDispPos - wDelete); for(i=wDelete;i<DispLength;i++) { bColorBuf[i-wDelete]=bColorBuf[i]; } memcpy(DispBuff + DispLength - wDelete,pCon,wLen); for(i=0;i<wLen;i++) { bColorBuf[DispLength-wDelete+i]=bRcv; } } else if(wDelete==DispLength) { memcpy(DispBuff,pCon,wLen); for(i=0;i<wLen;i++) { bColorBuf[i]=bRcv; } } else { memcpy(DispBuff,pCon+wDelete-DispLength,wLeft); for(i=0;i<wLeft;i++) { bColorBuf[i]=bRcv; } } DispLength=wLeft; HDC hDC=GetDC(m_hwnd); for(i=0;i<DispLength;i++) { OutOneByte(i,hDC); } ReleaseDC(m_hwnd,hDC); InvalidateRect(m_hwnd,NULL,TRUE); } else //直接写屏 { memcpy(&DispBuff[DispLength],pCon,wLen); // HDC hDC=GetDC(m_hwnd); // SelectObject(hDC, pComDev->hFont); for(i=0;i<wLen;i++) { bColorBuf[DispLength+i]=bRcv; } HDC hDC=GetDC(m_hwnd); for(i=0;i<wLen;i++) { OutOneByte(DispLength+i,hDC); } ReleaseDC(m_hwnd,hDC); DispLength += wLen; // InvalidateRect(m_hwnd,NULL,TRUE); } } void CShowWin::SetWinName(LPSTR winname) { windowname = winname; ::SetWindowText(m_hwnd, windowname); }
文件日志接口
#pragma once #include <string> using namespace std; extern wstring wlogfile; extern string logfile; bool WriteLogFile(char * filename, char *pCon, WORD wLen, BOOL bRcv); int wLog_info(wstring messagedata,string csourcefile,int line,wstring vlogfile = wlogfile); int Log_info(string messagedata,string csourcefile,int line,string vlogfile = logfile); #define wlogFile(message_data,logfilename)({ wLog_info(message_data,__FILE__,__LINE__,logfilename)}) #ifdef UNICODE #define loginfo(message_data) wLog_info(message_data,__FILE__,__LINE__) #else #define loginfo(message_data) Log_info(message_data,__FILE__,__LINE__) #endif
CPP:
#include "log.h" #include <time.h> #include <Windows.h> wstring wlogfile; string logfile; bool WriteLogFile(char * filename, char *pCon, WORD wLen, BOOL bRcv) { SYSTEMTIME currenttime; GetLocalTime(¤ttime); char spacechar = ‘\n‘; char spacechar2 = ‘ ‘; char RX[4] = {‘R‘,‘X‘,‘:‘,‘\0‘}; char TX[4] = {‘T‘,‘X‘,‘:‘,‘\0‘}; char timearray[100]; memset(timearray, 0 ,100); int i=0; FILE *fp; fp = fopen(filename,"a+"); if(fp!=NULL) { sprintf(timearray,"%04d-%02d-%02d %02d:%02d:%02d",currenttime.wYear,currenttime.wMonth,currenttime.wDay,currenttime.wHour,currenttime.wMinute,currenttime.wSecond); fwrite(timearray,sizeof(char),strlen(timearray),fp); fwrite(&spacechar2,sizeof(char),1,fp); if(bRcv) { fwrite(TX,sizeof(char),strlen(TX),fp); } else { fwrite(RX,sizeof(char),strlen(RX),fp); } memset(timearray, 0 ,100); for(i=0; i<wLen; i++) { sprintf(timearray,"%02X",(BYTE)pCon[i]); fwrite(timearray,sizeof(char),2,fp); fwrite(&spacechar2,sizeof(char),1,fp); } fwrite(&spacechar,sizeof(char),1,fp); fclose(fp); return true; } else { return false; } } int StringToWString(const std::string &str,std::wstring &wstr) { int nLen = (int)str.length(); wstr.resize(nLen,L‘ ‘); int nResult = MultiByteToWideChar(CP_ACP,0,(LPCSTR)str.c_str(),nLen,(LPWSTR)wstr.c_str(),nLen); if (nResult == 0) { return -1; } return 0; } int Log_info(wstring messagedata,string csourcefile,int line,wstring vlogfile) { if(vlogfile.empty()) wlogfile = vlogfile; wlogfile = vlogfile; FILE * fp = _wfopen(wlogfile.c_str(),L"a"); time_t t = time(0); wchar_t tmp[64]; wcsftime( tmp, sizeof(tmp), L"%Y-%m-%d %X %A ",localtime(&t) ); fputws(tmp,fp); fputws(L"At File ",fp); setlocale(LC_ALL,".936"); wstring csourcefil; StringToWString(csourcefile,csourcefil); fputws(csourcefil.c_str(),fp); fputws(L" -",fp); fputws(messagedata.c_str(),fp); fputws(L"\n",fp); fclose(fp); return 0; } int Log_info(string messagedata,string csourcefile,int line,string vlogfile) { if(vlogfile.empty()) logfile = vlogfile; logfile = vlogfile; FILE * fp = fopen(logfile.c_str(),"a"); time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y-%m-%d %X %A ",localtime(&t) ); fputs(tmp,fp); fputs("At File ",fp); setlocale(LC_ALL,".936"); fputs(csourcefile.c_str(),fp); fputs(" -",fp); fputs(messagedata.c_str(),fp); fputs("\n",fp); fclose(fp); return 0; } void WrPackettoFile(BYTE *ch, WORD wLen) { char buf[4096]; SYSTEMTIME LocalTime; GetLocalTime(&LocalTime); char filename[100]; sprintf(filename,"E:\\icandat\\%d日%d时%d分.txt",LocalTime.wDay,LocalTime.wHour,LocalTime.wMinute); FILE *hComFile=fopen(filename,"a"); if(hComFile!=NULL) { for(WORD i=0;i<wLen;i++) { sprintf(&buf[i*3],"%02X ",*(ch+i)); } fputs(buf,hComFile); } fclose(hComFile); } void WrStringtoFile(char *str) { SYSTEMTIME LocalTime; GetLocalTime(&LocalTime); char filename[100]; sprintf(filename,"E:\\icandat\\%d日%d时%d分.txt",LocalTime.wDay,LocalTime.wHour,LocalTime.wMinute); FILE *hComFile=fopen(filename,"a"); fputs(str,hComFile); fclose(hComFile); }
时间: 2024-10-10 08:58:16