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

📄 arc.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
#include <w32k.h>#define NDEBUG#include <debug.h>static BOOL FASTCALLIntArc( DC *dc, int LeftRect, int TopRect, int RightRect, int BottomRect,        int XStartArc, int YStartArc, int XEndArc, int YEndArc, ARCTYPE arctype){  return TRUE;}BOOL FASTCALLIntGdiArcInternal(          ARCTYPE arctype,          DC  *dc,          int LeftRect,          int TopRect,          int RightRect,          int BottomRect,          int XStartArc,          int YStartArc,          int XEndArc,          int YEndArc){  INT rx, ry;  RECT rc, rc1;  if(PATH_IsPathOpen(dc->w.path))  {    INT type = arctype;    if (arctype == GdiTypeArcTo) type = GdiTypeArc;    return PATH_Arc(dc, LeftRect, TopRect, RightRect, BottomRect,                    XStartArc, YStartArc, XEndArc, YEndArc, type);  }  IntGdiSetRect(&rc, LeftRect, TopRect, RightRect, BottomRect);  IntGdiSetRect(&rc1, XStartArc, YStartArc, XEndArc, YEndArc);  if (dc->w.flags & DCX_WINDOW) //window rectangle instead of client rectangle  {    HWND hWnd;    PWINDOW_OBJECT Window;    hWnd = IntWindowFromDC(dc->hSelf);    Window = UserGetWindowObject(hWnd);    if(!Window) return FALSE;    rc.left += Window->ClientRect.left;    rc.top += Window->ClientRect.top;    rc.right += Window->ClientRect.left;    rc.bottom += Window->ClientRect.top;    rc1.left += Window->ClientRect.left;    rc1.top += Window->ClientRect.top;    rc1.right += Window->ClientRect.left;    rc1.bottom += Window->ClientRect.top;  }  rx = (rc.right - rc.left)/2 - 1;  ry = (rc.bottom - rc.top)/2 -1;  rc.left += rx;  rc.top += ry;  return  IntArc( dc, rc.left, rc.top, rx, ry,          rc1.left, rc1.top, rc1.right, rc1.bottom, arctype);}BOOLSTDCALLNtGdiArcInternal(        ARCTYPE arctype,        HDC  hDC,        int  LeftRect,        int  TopRect,        int  RightRect,        int  BottomRect,        int  XStartArc,        int  YStartArc,        int  XEndArc,        int  YEndArc){  DC *dc;  BOOL Ret;  dc = DC_LockDc (hDC);  if(!dc)  {    SetLastWin32Error(ERROR_INVALID_HANDLE);    return FALSE;  }  if (dc->IsIC)  {    DC_UnlockDc(dc);    /* Yes, Windows really returns TRUE in this case */    return TRUE;  }  if (arctype == GdiTypeArcTo)  {    // Line from current position to starting point of arc    if ( !IntGdiLineTo(dc, XStartArc, YStartArc) )    {      DC_UnlockDc(dc);      return FALSE;    }  }  Ret = IntGdiArcInternal(                  arctype,                  dc,                  LeftRect,                  TopRect,                  RightRect,                  BottomRect,                  XStartArc,                  YStartArc,                  XEndArc,                  YEndArc);  if (arctype == GdiTypeArcTo)  {    // If no error occured, the current position is moved to the ending point of the arc.    if(Ret)      IntGdiMoveToEx(dc, XEndArc, YEndArc, NULL);  }  DC_UnlockDc( dc );  return Ret;}

⌨️ 快捷键说明

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