问题描述
- 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坐标进行剪裁。
解决方案三:
你要保证你调用函数传递的参数都是类型跟定义的是一致的,不然就可能会报类型不匹配。
时间: 2024-09-20 22:38:39