c++大手进,新手求助!

c++大手帮忙,有一个方法,大手看看怎么用,再帮我推断下nEnd,nMakeSpac的意思,方法的作用是可以绘制窗体阴影,看了半天,也没理解前两个参数怎么用。winx-call是编译协议不用管,第四个参数是整型变量,后面的值是宏定义。这个方法作用是为窗口画阴影效果。

inline VOID winx_call DrawShadow(

HDC hDCIn, HDC hDCOut, const RECT& rc, const INT cxShadow = WINX_SM_CXSHADOW)

{

int x;

for ( x = 0; x < rc.right-1; x++ )

{

   int nEnd = ( x > rc.right-cxShadow*2 ) ? rc.right-cxShadow-x : cxShadow;

   for ( int y = ( x < 2 ) ? 2-x : x > rc.right-cxShadow-3 ? x-rc.right+cxShadow+3 : 0; y < nEnd; y++ )

   {

       int nMakeSpec = 78+(3-(x==0?0:(x==1?(y<2?0:1):(x==2?(y<2?y:2):y))))*5;

       COLORREF cr = ::GetPixel(hDCIn, x+cxShadow, rc.bottom-y-1);

       COLORREF cr2 = RGB(((nMakeSpec * int(GetRValue(cr))) / 100),

              ((nMakeSpec * int(GetGValue(cr))) / 100),

              ((nMakeSpec * int(GetBValue(cr))) / 100));

::SetPixel(hDCOut, x+cxShadow, rc.bottom-y-1, cr2);

   }

}

for ( x = 0; x < cxShadow; x++ )

{

   for ( int y = ( x < 2 ) ? 2-x : 0; y < rc.bottom-x-cxShadow-((x>0)?1:2); y++ )

   {

       int nMakeSpec = 78+(3-(y==0?0:(y==1?(x<2?0:1):(y==2?(x<2?x:2):x))))*5;

       COLORREF cr = ::GetPixel (hDCIn, rc.right-x-1, y+cxShadow);

       COLORREF cr2 = RGB(((nMakeSpec * int(GetRValue(cr))) / 100),

              ((nMakeSpec * int(GetGValue(cr))) / 100),

              ((nMakeSpec * int(GetBValue(cr))) / 100));

::SetPixel(hDCOut, rc.right-x-1, y+cxShadow, cr2);

   }

}

}

nMakeSpec看上去是一个比例参数,用来控制给颜色整体增亮或者变暗
nEnd看上去是对图片y坐标进行剪裁。

你要保证你调用函数传递的参数都是类型跟定义的是一致的,不然就可能会报类型不匹配。