📄 gdi.c
字号:
void GDI_FillArc_BottomLeft(BYTE bRegionId, PARM_ARC *pParm){ PARM_RECT rect; DWORD i, dwIndex; BYTE bShading=0; rect.bColor = pParm->bColor; dwIndex = 0; if (bRegionId & GDI_SHADING_OPERATION) { bRegionId = bRegionId -GDI_SHADING_OPERATION; bShading = 1; } for (i=0; i<pParm->bArc; i++) { rect.rect.wTop = rect.rect.wBottom = pParm->wY+i; rect.rect.wLeft = pParm->wX+ _ArcOffsetPtr[i]; //aArc_15[i]; rect.rect.wRight = pParm->wX+pParm->bArc-1; if (bShading) { rect.bColor = pParm->bShadePtr[dwIndex]; } GDI_FillRect(bRegionId, &rect); if (dwIndex < pParm->bColor-1) { dwIndex++; } }}void GDI_FillArc_BottomRight(BYTE bRegionId, PARM_ARC *pParm){ PARM_RECT rect; DWORD i, dwIndex; BYTE bShading=0; rect.bColor = pParm->bColor; dwIndex = 0; if (bRegionId & GDI_SHADING_OPERATION) { bRegionId = bRegionId -GDI_SHADING_OPERATION; bShading = 1; } for (i=0; i<pParm->bArc; i++) { rect.rect.wTop = rect.rect.wBottom = pParm->wY+i; rect.rect.wLeft = pParm->wX; rect.rect.wRight = pParm->wX+pParm->bArc-1-_ArcOffsetPtr[i]; if (bShading) { rect.bColor = pParm->bShadePtr[dwIndex]; } GDI_FillRect(bRegionId, &rect); if (dwIndex < pParm->bColor-1) { dwIndex++; } }}void GDI_FillArc_TopLeft(BYTE bRegionId, PARM_ARC *pParm){ PARM_RECT rect; DWORD i, dwArc, dwIndex; BYTE bShading=0; dwArc = pParm->bArc; rect.bColor = pParm->bColor; dwIndex = 0; if (bRegionId & GDI_SHADING_OPERATION) { bRegionId = bRegionId -GDI_SHADING_OPERATION; bShading = 1; } //printf("GDI_FillArc_TopLeft\n"); for (i=0; i<dwArc; i++) { rect.rect.wTop = rect.rect.wBottom = pParm->wY+i; rect.rect.wLeft = pParm->wX+_ArcOffsetPtr[dwArc-i-1]; rect.rect.wRight = pParm->wX+dwArc-1; if (bShading) { rect.bColor = pParm->bShadePtr[dwIndex]; } GDI_FillRect(bRegionId, &rect); if (dwIndex < pParm->bColor-1) { dwIndex++; } //printf("x = %d, y = %d\n", rect.rect.wLeft, rect.rect.wTop); }}void GDI_FillArc_TopRight(BYTE bRegionId, PARM_ARC *pParm){ PARM_RECT rect; DWORD i, dwArc, dwIndex; BYTE bShading=0; dwArc = pParm->bArc; rect.bColor = pParm->bColor; dwIndex = 0; if (bRegionId & GDI_SHADING_OPERATION) { bRegionId = bRegionId -GDI_SHADING_OPERATION; bShading = 1; } for (i=0; i<dwArc; i++) { rect.rect.wTop = rect.rect.wBottom = pParm->wY+i; rect.rect.wLeft = pParm->wX; rect.rect.wRight = pParm->wX+dwArc-1-_ArcOffsetPtr[dwArc-i-1]; if (bShading) { rect.bColor = pParm->bShadePtr[dwIndex]; } GDI_FillRect(bRegionId, &rect); if (dwIndex < pParm->bColor-1) { dwIndex++; } //printf("x = %d, y = %d\n", rect.rect.wRight, rect.rect.wTop); }}BYTE * _GDI_SetArcPointer(BYTE bArc){ BYTE *ptr; if (bArc & GDI_SHADING_OPERATION) { bArc = bArc -GDI_SHADING_OPERATION; // remove the shading bit } switch (bArc) { case 13: ptr = _aArc_13; break; case 15: ptr = _aArc_15; break; case 17: ptr = _aArc_17; break; case 19: ptr = _aArc_19; break; case 21: ptr = _aArc_21; break; case 23: ptr = _aArc_23; break; case 25: ptr = _aArc_25; break; default: ptr = _aArc_15;#ifndef GDI_NO_PRINTF printf("Incorrect Arc size\n");#endif } return ptr;}// *********************************************************************// Function : GDI_FillRoundRect// Description : This function fills a round rectangle// Arguments : bRegionId: the region ID// : bArc : the arc size: can be one of the value 13, 15, 17 1,9, 21, 23, 25// : pParm points to the PARM_RECT// Return : none// Side Effect :// Note :// *********************************************************************void GDI_FillRoundRect(BYTE bRegionId, BYTE bArc, PARM_RECT *pParm){ PARM_ARC parmArc; PARM_RECT parmRect; BYTE *bPtr; // set arc data pointer _ArcOffsetPtr =_GDI_SetArcPointer(bArc); bPtr = pParm->bShadePtr; // fill top-left arc parmArc.bArc = bArc; parmArc.bColor = pParm->bColor; parmArc.wX = pParm->rect.wLeft; parmArc.wY = pParm->rect.wTop; parmArc.bShadePtr = bPtr; GDI_FillArc_TopLeft(bRegionId, &parmArc); // fill top rect parmRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft + bArc; parmRect.rect.wTop = pParm->rect.wTop; parmRect.rect.wRight = pParm->rect.wRight - bArc; parmRect.rect.wBottom = pParm->rect.wTop + bArc - 1; parmRect.bShadePtr =bPtr; GDI_FillRect(bRegionId, &parmRect); // fill top-right arc //parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = parmRect.rect.wRight + 1; //parmArc.wY = pParm->rect.wTop; GDI_FillArc_TopRight(bRegionId, &parmArc); bPtr +=bArc; // fill center rect //pamRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft; parmRect.rect.wTop = parmRect.rect.wBottom + 1; parmRect.rect.wRight = pParm->rect.wRight; parmRect.rect.wBottom = pParm->rect.wBottom - bArc; parmRect.bShadePtr =bPtr; GDI_FillRect(bRegionId, &parmRect); bPtr += (parmRect.rect.wBottom - parmRect.rect.wTop + 1); // fill bottom-left arc //parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = pParm->rect.wLeft; parmArc.wY = parmRect.rect.wBottom + 1; parmArc.bShadePtr = bPtr; GDI_FillArc_BottomLeft(bRegionId, &parmArc); // fill bottom rect //pamRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft + bArc; parmRect.rect.wTop = parmArc.wY; parmRect.rect.wRight = pParm->rect.wRight - bArc; parmRect.rect.wBottom = pParm->rect.wBottom; parmRect.bShadePtr =bPtr; GDI_FillRect(bRegionId, &parmRect); // fill bottom-right arc //parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = parmRect.rect.wRight + 1; //parmArc.wY = pParm->rect.wTop; GDI_FillArc_BottomRight(bRegionId, &parmArc);}// *********************************************************************// Function : GDI_FillRoundRectTop// Description : This function fills a rectangle with top round corner// Arguments : bRegionId: the region ID// : bArc : the arc size: can be one of the value 13, 15, 17 1,9, 21, 23, 25// : pParm points to the PARM_RECT// Return : none// Side Effect :// Note :// *********************************************************************void GDI_FillRoundRectTop(BYTE bRegionId, BYTE bArc, PARM_RECT *pParm){ PARM_ARC parmArc; PARM_RECT parmRect; // set arc data pointer _ArcOffsetPtr = _GDI_SetArcPointer(bArc); // fill top-left arc parmArc.bArc = bArc; parmArc.bColor = pParm->bColor; parmArc.wX = pParm->rect.wLeft; parmArc.wY = pParm->rect.wTop; parmArc.bShadePtr = pParm->bShadePtr; GDI_FillArc_TopLeft(bRegionId, &parmArc); // fill top rect parmRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft + bArc; parmRect.rect.wTop = pParm->rect.wTop; parmRect.rect.wRight = pParm->rect.wRight - bArc; parmRect.rect.wBottom = pParm->rect.wTop + bArc - 1; parmRect.bShadePtr = pParm->bShadePtr; GDI_FillRect(bRegionId, &parmRect); // fill top-right arc //parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = parmRect.rect.wRight + 1; //parmArc.wY = pParm->rect.wTop; GDI_FillArc_TopRight(bRegionId, &parmArc); // fill center rect if (bRegionId & GDI_SHADING_OPERATION) { if (parmRect.bColor > bArc) { parmRect.bColor -= bArc; } } parmRect.rect.wLeft = pParm->rect.wLeft; parmRect.rect.wTop = parmRect.rect.wBottom + 1; parmRect.rect.wRight = pParm->rect.wRight; parmRect.rect.wBottom = pParm->rect.wBottom; parmRect.bShadePtr = pParm->bShadePtr + bArc; GDI_FillRect(bRegionId, &parmRect);}// *********************************************************************// Function : GDI_FillRoundRectBottom// Description : This function fills a rectangle with bottom round corner// Arguments : bRegionId: the region ID// : bArc : the arc size: can be one of the value 13, 15, 17 1,9, 21, 23, 25// : pParm points to the PARM_RECT// Return : none// Side Effect :// Note :// *********************************************************************void GDI_FillRoundRectBottom(BYTE bRegionId, BYTE bArc, PARM_RECT *pParm){ PARM_ARC parmArc; PARM_RECT parmRect; DWORD dwInc=0; // set arc data pointer _ArcOffsetPtr = _GDI_SetArcPointer(bArc); // fill center rect parmRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft; parmRect.rect.wTop = pParm->rect.wTop; parmRect.rect.wRight = pParm->rect.wRight; parmRect.rect.wBottom = pParm->rect.wBottom - bArc; parmRect.bShadePtr = pParm->bShadePtr; GDI_FillRect(bRegionId, &parmRect); if (bRegionId & GDI_SHADING_OPERATION) { dwInc = (parmRect.rect.wBottom - parmRect.rect.wTop +1); if (parmRect.bColor > dwInc) { parmRect.bColor -= dwInc; parmArc.bColor = parmRect.bColor; } else { dwInc = parmRect.bColor-1; parmRect.bColor = 1; parmArc.bColor = parmRect.bColor; } } else { parmArc.bColor = pParm->bColor; } // fill bottom-left arc parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = pParm->rect.wLeft; parmArc.wY = parmRect.rect.wBottom + 1; parmArc.bShadePtr = pParm->bShadePtr + dwInc; GDI_FillArc_BottomLeft(bRegionId, &parmArc); // fill bottom rect //pamRect.bColor = pParm->bColor; parmRect.rect.wLeft = pParm->rect.wLeft + bArc; parmRect.rect.wTop = parmArc.wY; parmRect.rect.wRight = pParm->rect.wRight - bArc; parmRect.rect.wBottom = pParm->rect.wBottom; parmRect.bShadePtr = parmArc.bShadePtr; GDI_FillRect(bRegionId, &parmRect); // fill bottom-right arc //parmArc.bArc = bArc; //parmArc.bColor = pParm->bColor; parmArc.wX = parmRect.rect.wRight + 1; //parmArc.wY = pParm->rect.wTop; GDI_FillArc_BottomRight(bRegionId, &parmArc);}// *********************************************************************// Function : GDI_FillRoundRectBottom// Description : This function draws a round rectangle// Arguments : bRegionId: the region ID// : bArcStart / bArcEnd : the arc size: can be one of the value 13, 15, 17 1,9, 21, 23, 25// : bArcStart must > bArcEnd// : pParm points to the PARM_RECT// Return : none// Side Effect :// Note :// *********************************************************************void GDI_DrawRoundRect(BYTE bRegionId, BYTE bArcStart, BYTE bArcEnd, PARM_RECT *pParm){ PARM_RECT rect; BYTE *pbArcStart, *pbArcEnd; DWORD i, dwRightArcStart, dwGap; // set arc data pointer pbArcStart = _GDI_SetArcPointer(bArcStart); pbArcEnd = _GDI_SetArcPointer(bArcEnd); dwRightArcStart = pParm->rect.wRight - pParm->rect.wLeft + 1 - bArcStart; dwGap = bArcStart - bArcEnd; rect.bColor = pParm->bColor; for (i= 0; i<=bArcStart - bArcEnd-1; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -