📄 wintern.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 + -