Win32窗口以及C++日志

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(&currenttime);
 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

Win32窗口以及C++日志的相关文章

Win32窗口消息机制 x Android消息机制 x 异步执行

如果你开发过Win32窗口程序,那么当你看到android代码到处都有的mHandler.sendEmptyMessage和 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_REPORT_PRIMARY_CLIP_CHANGED: reportPrimaryClipChanged(); }

win32窗口程序的过程

复习一下win32窗口程序 设计一个窗口类: 注册窗口类: 创建窗口: 显示及更新窗口. 消息循环,去获取消息: 窗口过程函数的消息响应. 设计窗口类: typedef struct _WNDCLASS { UINT style; //窗口类的类型 WNDPROC lpfnWndProc; //窗口过程函数(回调函数) int cbClsExtra; //为该类设定额外内存空间 int cbWndExtra; //为该窗口设定额外内存空间 HANDLE hInstance; //当前应用程序的实

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

解决WIN32窗口不响应WM_LBUTTONDBLCLK消息

原文链接: http://www.cnblogs.com/xukaixiang/archive/2012/05/27/2520059.html 今天在做一个软件时,发现win32创建的窗体不能响应WM_LBUTTONDBLCLK消息.在一番谷歌百度之后,终于找到了解决方法:废话少说,言归正传. 窗体不响应WM_LBUTTONDBLCLK消息,只要在注册窗口类的时候在WNDCLASS的style成员加上CS_DBLCLKS风格就行了. 下面是几种CS风格: CS_HREDRAW:当窗体的宽度发生变

WIN32窗口模板

1 // WINATLTest.cpp : 定义应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include "WINATLTest.h" 6 7 #define MAX_LOADSTRING 100 8 9 // 全局变量: 10 HINSTANCE hInst; // 当前实例 11 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 12 TCHAR szWindowClass[MAX_LOAD

win32 窗口缩放时出现闪屏

今天无意发现之前写的一个小工具在缩放窗口的时候,出现闪屏,主要有两个位置: 工具栏出一闪屏 右侧的控制面板出现闪屏 (这个控制面板与多层元件组合而成) 之前真没注意到这个问题,平时都是最大化/恢复窗口,没缩放窗口,所以没发现这样的问题. 网上搜索了一下,找到一些解决方案: [百度文库] VC窗口闪烁问题的解决 - http://wenku.baidu.com/view/3c7e747931b765ce0508146a.html 我遇到的问题属于第2种情况: 原因二:  复杂的界面有多层窗口组成,

[ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]

场景 有时候我们需要单独对某个窗口消息进行拦截,比如CEdit响应回车, 这时候就需要拦截窗口处理过程了. 当然MFC的界面可以重载: BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg){ 但是WTL的CEdit并不支持这种方式,WTL如果想在 PreTranslateMessage 里拦截消息,必须继承 CMessageFilter 后还要把这个控件注册到消息循环里才行,也就是必须写子类 或者从父窗口拦截这个CEdit的消息. CMessageLoop*

3.win32窗口类

1.窗口类 窗口类包含了窗口的各种参数信息的数据结构.每个窗口都具有窗口类,基于窗口类创建窗口.每个窗口类都具有一个名称,使用之前必须注册到系统. 2.窗口类的分类 1)系统窗口类 系统已经定义好的窗口类,所有应用程序都可以直接使用. 2)应用程序全局窗口类 由用户自己定义,当前应用程序所有模块都可以使用. 3)应用程序局部窗口类 由用户自己定义,当前应用程序中本模块可以使用. 3. 系统窗口类 注册窗口类的步骤必须要做,但是系统窗口类不需要(程序员)注册,直接使用窗口类即可.系统已经定义好的相

解决Duilib创建的win32窗口拖到屏幕上边缘自动最大化

转载:http://bbs.csdn.net/topics/390842294 使用Duilib创建窗口的时候,假如有这样一个需求: 1.窗口大小规定 2.不可拖拽改变窗口大小 3.双击标题栏禁止最大化 4.禁止拖拽窗口到屏幕上边沿最大化 针对以上四点,给出解决办法: 1.设置size="宽,高" 2.sizebox="0,0,0,0" 3.在HandleMessage中屏蔽掉WM_NCLBUTTONDBLCLK 1 case WM_NCLBUTTONDBLCLK: