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

📄 wintern.h

📁 MinGUI 可视化程序代码
💻 H
字号:
//---------------------------------------------------------------------------#ifndef _WINTERN_H#define _WINTERN_H//---------------------------------------------------------------------------#define WNDPTR(hWnd)             ((PWND)hWnd)#define WndGetAttr(hWnd,Attr)    (((PWND)hWnd)->Style &  (Attr))#define WndAddAttr(hWnd,Attr)    (((PWND)hWnd)->Style |= (Attr))#define WndSubAttr(hWnd,Attr)    (((PWND)hWnd)->Style &=~(Attr))#define WndExtraData(hWnd)       (((PWND)hWnd)->ExtraLong[0])#define WndClsBuf(hWnd)          ((char *)&((PWND)hWnd)->ExtraLong[1])#define WndGetText(hWnd)         ( (((PWND)hWnd)->Caption.Info.Head==0xFF)?((PWND)hWnd)->Caption.Info.pText:((PWND)hWnd)->Caption.Text )//---------------------------------------------------------------------------#define WndPosX(hWnd)            ( ((PWND)hWnd)->WndRect.left - ((PWND)hWnd)->Parent->ClientRect.left )#define WndPosY(hWnd)            ( ((PWND)hWnd)->WndRect.top - ((PWND)hWnd)->Parent->ClientRect.top )#define crWidth(hWnd)            ( ((PWND)hWnd)->ClientRect.right - ((PWND)hWnd)->ClientRect.left )#define crHeight(hWnd)           ( ((PWND)hWnd)->ClientRect.bottom - ((PWND)hWnd)->ClientRect.top )#define absWidth(hWnd)            ( ((PWND)hWnd)->WndRect.right - ((PWND)hWnd)->WndRect.left )#define absHeight(hWnd)           ( ((PWND)hWnd)->WndRect.bottom - ((PWND)hWnd)->WndRect.top )//---------------------------------------------------------------------------#define ResetForeground(dc)      ((TWndCanvas *)(dc))->Foreground= ((TWndCanvas *)(dc))->Owner->Foreground#define ResetBackground(dc)      ((TWndCanvas *)(dc))->Background= ((TWndCanvas *)(dc))->Owner->Background//---------------------------------------------------------------------------#define GUI_MARK_WND             0x51775277L#define GUI_MARK_TMR             0x77527751L//---------------------------------------------------------------------------#define IsWnd(wnd)              ( wnd && *((DWORD *)(wnd) +5)==GUI_MARK_WND )#define IsTmr(tmr)              ( tmr && ((TGUITimer *)tmr)->Mark==GUI_MARK_TMR )//---------------------------------------------------------------------------#if (LCD_RANGE_CHECK==true)#define  LCD_RECT_ADJUST(ACanvas,x,y,width,height,LcdX,LcdY)\{ if(width>0 && height>0)\  { LcdX=ACanvas->Vram->Left+ACanvas->VX + x;\    LcdY=ACanvas->Vram->Top+ACanvas->VY + y;\    if(LcdX<LCD_WIDTH && LcdY<LCD_HEIGHT)\    { if(LcdX<0)\      { width+=LcdX;\        if(width<=0)return;\        else {LcdX=0;x=-ACanvas->Vram->Left-ACanvas->VX;}\      } \      if(LcdX+width>=LCD_WIDTH)\      { width=LCD_WIDTH-LcdX;\        if(width<=0)return;\      }\      if(LcdY<0)\      { height+=LcdY;\        if(height<=0)return;\        else {LcdY=0;y=-ACanvas->Vram->Top-ACanvas->VY;}\      }\      if(LcdY+height>=LCD_HEIGHT)\      { height=LCD_HEIGHT-LcdY;\        if(height<=0)return;\      }\    }else return;\  }else return;\}#else#define  LCD_RECT_ADJUST(ACanvas,x,y,width,height,LcdX,LcdY)\{  LcdX=ACanvas->Vram->Left+ACanvas->VX + x;\   LcdY=ACanvas->Vram->Top+ACanvas->VY + y;\}#endif//---------------------------------------------------------------------------//GetNextLine 获取指定行的下一行的相同列像素的物理地址#define GetNextLinePos(pixelPos,vram) ( (pixelPos)+( vram )->UnitPerLine )//---------------------------------------------------------------------------//GetNextPixelPosition 获取指定像素的下一个像素的物理地址#define GetNextPixelPosition(NextPixelPos, NewBitOffset, PixelPos, BitOffset )\{ if( (BitOffset)<PIXEL_UNIT-BITS_PER_PIXEL   ) \  { *(NextPixelPos) = PixelPos; *(NewBitOffset) = (BitOffset) + BITS_PER_PIXEL;}\  else { *(NextPixelPos) = (PixelPos) +1; *(NewBitOffset) =0;}\}//---------------------------------------------------------------------------#define GetPrevPixelPosition(NextPixelPos, NewBitOffset, PixelPos, BitOffset )\{ if( BITS_PER_PIXEL<=(BitOffset) ) \  { *(NextPixelPos) = PixelPos; *(NewBitOffset) = (BitOffset) - BITS_PER_PIXEL;}\  else { *(NextPixelPos) = (PixelPos) -1; *(NewBitOffset) = PIXEL_UNIT- BITS_PER_PIXEL;}\}//---------------------------------------------------------------------------#define GetOffsetPixelPosition(NextPixelPos, NewBitOffset, PixelPos, BitOffset,OffsetX)\{ int temp_new_bitoffset=(BitOffset)+((OffsetX)<<LOG_PIXEL_BITS);\  if(temp_new_bitoffset>=8)\  { *(NextPixelPos) = (PixelPos)+(temp_new_bitoffset>>3);\    temp_new_bitoffset&=0x7;\  }\  else\  { *(NextPixelPos) = PixelPos;\  }\  *(NewBitOffset)=temp_new_bitoffset;\} //---------------------------------------------------------------------------#define SET_PIXEL_LOGIC( TargetPos, OriginPixel, NewPixel,dwRop)\  switch( dwRop )\  {  case PL_REPLACE: *(TargetPos) = (NewPixel); break;\     case PL_XOR:     *(TargetPos) = (OriginPixel)^(NewPixel); break;\     case PL_AND:     *(TargetPos) = (OriginPixel)&(NewPixel); break;\     case PL_OR:      *(TargetPos) = (OriginPixel)|(NewPixel); break;\  }//---------------------------------------------------------------------------#define PIXEL_SET_LOGIC( destPos, srcPixel,dwRop)\  switch( dwRop )\  {  case PL_REPLACE: *(destPos) =  (srcPixel); break;\     case PL_XOR:     *(destPos) ^= (srcPixel); break;\     case PL_AND:     *(destPos) &= (srcPixel); break;\     case PL_OR:      *(destPos) |= (srcPixel); break;\  }//---------------------------------------------------------------------------#define SET_3BYTE_LOGIC( TargetPos,srcByte1,srcByte2,srcByte3,dwRop)\  switch( dwRop )\  {  case PL_REPLACE: *(BYTE *)(TargetPos) = (BYTE)(srcByte1);\                      *((BYTE *)(TargetPos)+1) = (BYTE)(srcByte2);\					  *((BYTE *)(TargetPos)+2) = (BYTE)(srcByte3);\                      break;\     case PL_XOR:     *(BYTE *)(TargetPos) ^= (BYTE)(srcByte1);\					  *((BYTE *)(TargetPos)+1) ^= (BYTE)(srcByte2);\					  *((BYTE *)(TargetPos)+2) ^= (BYTE)(srcByte3);\                      break;\     case PL_AND:     *(BYTE *)(TargetPos)  &= (BYTE)(srcByte1);\					  *((BYTE *)(TargetPos)+1) &= (BYTE)(srcByte2);\					  *((BYTE *)(TargetPos)+2) &= (BYTE)(srcByte3);\                      break;\     case PL_OR:      *(BYTE *)(TargetPos) |= (BYTE)(srcByte1);\					  *((BYTE *)(TargetPos)+1) |= (BYTE)(srcByte2);\					  *((BYTE *)(TargetPos)+2) |= (BYTE)(srcByte3);\                      break;\  }//---------------------------------------------------------------------------#define NODE_REMOVE(node)\{ (node)->Next->Prev=(node)->Prev;\  (node)->Prev->Next=(node)->Next;\}//---------------------------------------------------------------------------#define NODE_PREV_INSERT(node,objlist)\{ (node)->Next=objlist;\  (node)->Prev=(objlist)->Prev;\  (node)->Next->Prev=node;\  (node)->Prev->Next=node;\}//---------------------------------------------------------------------------#define NODE_NEXT_INSERT(node,objlist)\{ (node)->Next=(objlist)->Next;\  (node)->Prev=objlist;\  (node)->Next->Prev=node;\  (node)->Prev->Next=node;\}//---------------------------------------------------------------------------typedef struct t_guitimer{ struct t_guitimer *Next,*Prev;  HWND         RecvWnd;  void (*TimerProc)(HWND);  DWORD        InitialTime;  DWORD        RescheduleTime;  TWndDateTime DueTime;  DWORD        Mark;  BOOL         Enabled;}TGUITimer;//--------------------------------------------------------------------------- typedef struct t_winctrl    TWND,*PWND;//---------------------------------------------------------------------------typedef struct{ int	  Left,Top;               //VRAM左上角对应LCD左上角的偏移位置 (unit:pixel)  int	  Width,Height;           //VRAM 的宽度与高度 (unit:pixel)  int	  BytePerLine;            //一行VRAM占的字节数  int     UnitPerLine;            //一行VRAM占的存储单元数  int     GroupOperation;  TREGION ExposeRegion;           //相对屏幕的绝对坐标  PIXEL	 *FrameBuffer;  DWORD   FrameBufferSize;  BOOL    FrameBufferOwned;         /*FrameBuffer是谁创建的,由谁释放*/}VRAM,*PVRAM;//---------------------------------------------------------------------------typedef struct t_wndcanvas  /*TWndCanvas::该结构内各数据域顺序不要改变*/{ DWORD  Mode;               /* offset:0 */  PIXEL  Foreground;         /* offset:12 */  PIXEL  Background;         /* offset:12 + sizeof(PIXEL)*/  VRAM  *Vram;  int    VX,VY;             /*vram offset*/  TRECT  ClipRect;          /**/  PWND   Owner;  struct t_wndcanvas *Prev,*Next;}TWndCanvas;//---------------------------------------------------------------------------#define   dcMode(dc)        *(DWORD *)(dc)//---------------------------------------------------------------------------typedef struct{ char  *startaddress,*endaddress;  char  *readpos,*writepos;  int    messagesize;  BOOL   Waiting;  DWORD  Semaphore;         /*消息信号量*/}TMsgQueue;//---------------------------------------------------------------------------#define FixedWndTextSize    8 /*must bigger than 8*/typedef union{  struct   { BYTE Head;     BYTE Stop;     WORD Size;     char *pText;   }Info;   char Text[FixedWndTextSize];}TVariantText;//---------------------------------------------------------------------------typedef struct  t_windowclass{   TWNDCLASS  WC;   /*TWNDCLASS在TWINDOWCLASS结构内偏移量为零*/    char       ClassName[40];    struct     t_windowclass  *Prev,*Next;}TWINDOWCLASS;//---------------------------------------------------------------------------typedef struct{ PWND  TopWnd,HisFocus;  BOOL  CanvasChanged;  VRAM  *Vram;}TWndFamily;//--------------------------------------------------------------------------- /* window*/struct t_winctrl{/////////////////////////////////////////////////////  struct t_winctrl  *Prev,*Next,*Parent,*Children;  DWORD         ID;                  /*窗体的唯一ID标号*/  DWORD         Mark;                /*窗体资源标志(结构内偏移20B)*/  DWORD         Style;               /*窗口样式和状态*/  TBitmap      *Logo;                /*窗口图标*/  TVariantText  Caption;             /*窗口标题*/  TWndCanvas    *Canvas;              /*指向主窗体的画布,(结构内偏移48B:HDC)放在WndRect下面*/  TWNDCLASS    *WinClass;		     /* window class*/    TWndFamily   *Family;  TWNDHOOK      HookProc;  UINT          HookMessage;  TRECT	        WndRect;	         /* window rect in screen coords*/  TRECT	        ClientRect;             /* client rect in screen coords*/  PIXEL         Foreground,Background;  int           TabOrder;  int		    unmapcount;	         /* count of reasons not really mapped */  long          UserData;   long          ExtraLong[1];        /* window extra bytes - must be last*/};//---------------------------------------------------------------------------extern PWND g_CurrentFocus; /*当前焦点*/extern PWND g_LastFocus;    /*上次焦点*/extern PWND g_RootWnd;			/* root window pointer */extern TWndCanvas *g_ScreenCanvas;extern VRAM   *g_LcdFrameVram;extern TWndCanvas *DC_FreeList;//---------------------------------------------------------------------------#define CMD_NotifyParent(hWnd,eventcode)   SendMessage((HWND)WNDPTR(hWnd)->Parent, WM_COMMAND, (WPARAM)MAKELONG(WNDPTR(hWnd)->ID,eventcode), (LPARAM)(hWnd))//------------------------------------------------------------------------------VRAM *CreateVRAM(int LcdOffsetX,int LcdOffsetY, int width, int height,PIXEL *FrameBuffer,BOOL ZeroInitialize);void  FreeVRAM(VRAM *vram );void  CanvasCopy(TWndCanvas *TgtCanvas,int tgtx,int tgty,TWndCanvas *SrcCanvas,int srcx,int srcy,int width,int height);void  GetPixelPosition( PIXEL **PixelPos, int *BitOffset, TWndCanvas *ACanvas, int X, int Y );void  WriteToLCD(TWndCanvas *ACanvas, int X, int Y, int width, int height);//---------------------------------------------------------------------------HWND CM_GetNextTabStop(HWND hWnd);HWND CM_GetPrevTabStop(HWND hWnd);BOOL CM_AllocateWindowText(PWND pWnd,LPCSTR lpString,int heap_size);void CM_FreeWindowText(PWND pWnd);//---------------------------------------------------------------------------#define  SaveWindowText(hWnd,lpString) CM_AllocateWindowText(hWnd,(LPCSTR)(lpString),0)//---------------------------------------------------------------------------#endif

⌨️ 快捷键说明

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