MFC界面编程1:GDI+实现不规则窗体
VC++玩转炫酷悬浮窗3---GDI+完美实现不规则窗体
1.UpdateLayeredWindow
更新的位置、大小、形状、内容和半透明的分层窗口。
BOOL WINAPI UpdateLayeredWindow(
_In_ HWND hwnd,//窗口句柄
_In_opt_ HDC hdcDst,//屏幕上下文DC
_In_opt_ POINT *pptDst,//窗口相对于屏幕的位置的POINT结构的指针
_In_opt_ SIZE *psize,//显示窗口大小
_In_opt_ HDC hdcSrc,//窗口上下文DC
_In_opt_ POINT *pptSrc,//窗口绘图表面在设备上下文位置的POINT结构的指针
_In_ COLORREF crKey,
_In_opt_ BLENDFUNCTION *pblend,//透明混合参数
_In_ DWORD dwFlags
);
2.BLENDFUNCTION structure
BLENDFUNCTION结构混合控制混合通过指定源和目标位图的功能。
typedef struct _BLENDFUNCTION {
BYTE BlendOp;//AC_SRC_OVER
BYTE BlendFlags;//0
BYTE SourceConstantAlpha;//
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
BlendOp:指定AC_SRC_OVER
BlendFlags:必须为0
SourceConstantAlpha:指定一个alpha透明度值被用于整个源位图。SourceConstantAlpha值加上任何在源位图的alpha值。假设你的图像是透明的,SourceConstantAlpha设置为0。SourceConstantAlpha值设置为255(不透明的)。
AlphaFormat:这个参数控制源和目标的解析方式,使用AC_SRC_ALPHA
AC_SRC_ALPHA这个值在源有Alpha通道时(也就是操作的图本身带有透明通道信息时),提醒系统API调用函数前必须预先乘以alpha值,也就是说位图上某个像素位置的red、green、blue通道值必须先与alpha相乘。例如,如果alpha透明值是x,那么red、green、blue三个通道的值必须乘以x并且再除以255(因为alpha的值的范围是0~255),之后才能被调用。
demo: http://download.csdn.net/detail/greless/9885566
VC++玩转炫酷悬浮窗3---GDI+完美实现不规则窗体
1.UpdateLayeredWindow
更新的位置、大小、形状、内容和半透明的分层窗口。
BOOL WINAPI UpdateLayeredWindow(
_In_ HWND hwnd,//窗口句柄
_In_opt_ HDC hdcDst,//屏幕上下文DC
_In_opt_ POINT *pptDst,//窗口相对于屏幕的位置的POINT结构的指针
_In_opt_ SIZE *psize,//显示窗口大小
_In_opt_ HDC hdcSrc,//窗口上下文DC
_In_opt_ POINT *pptSrc,//窗口绘图表面在设备上下文位置的POINT结构的指针
_In_ COLORREF crKey,
_In_opt_ BLENDFUNCTION *pblend,//透明混合参数
_In_ DWORD dwFlags
);
2.BLENDFUNCTION structure
BLENDFUNCTION结构混合控制混合通过指定源和目标位图的功能。
typedef struct _BLENDFUNCTION {
BYTE BlendOp;//AC_SRC_OVER
BYTE BlendFlags;//0
BYTE SourceConstantAlpha;//
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
BlendOp:指定AC_SRC_OVER
BlendFlags:必须为0
SourceConstantAlpha:指定一个alpha透明度值被用于整个源位图。SourceConstantAlpha值加上任何在源位图的alpha值。假设你的图像是透明的,SourceConstantAlpha设置为0。SourceConstantAlpha值设置为255(不透明的)。
AlphaFormat:这个参数控制源和目标的解析方式,使用AC_SRC_ALPHA
AC_SRC_ALPHA这个值在源有Alpha通道时(也就是操作的图本身带有透明通道信息时),提醒系统API调用函数前必须预先乘以alpha值,也就是说位图上某个像素位置的red、green、blue通道值必须先与alpha相乘。例如,如果alpha透明值是x,那么red、green、blue三个通道的值必须乘以x并且再除以255(因为alpha的值的范围是0~255),之后才能被调用。
demo: http://download.csdn.net/detail/greless/9885566