如何用MFC创建透明的背景,不透明的绘画
1,设置窗体为全屏幕显示
//获取屏幕的长和宽
int iWidth = ::GetSystemMetrics(SM_CXSCREEN);
int iHeight = ::GetSystemMetrics(SM_CYSCREEN);
//设置窗体位置和大小
SetWindowPos(NULL, 0, 0, iWidth, iHeight,SWP_NOZORDER|SWP_SHOWWINDOW);
2,设置窗体为透明状体,若将窗体设置为完全透明,则捕获不到鼠标事件,所以设置为近乎透明。
SetWindowLong(GetSafeHwnd(),
GWL_EXSTYLE,
::GetWindowLongPtr(GetSafeHwnd(), GWL_EXSTYLE) | WS_EX_LAYERED);
this->SetLayeredWindowAttributes(RGB(255,0,0), (255 * 0.5) / 100, LWA_ALPHA | ULW_COLORKEY);
SetLayeredWindowAttributes函数说明:
crKey:掩码颜色
bAlpha:透明度
dwFlags:可以为两个值:
LWA_ALPHA:掩码无效,全部设置为第二个参数的透明度。
LWA_COLORKEY:透明度无效,掩码颜色为透明
可以与运算
3,获取屏幕dc,OmMouseMove中
CWindowDC dc(GetDesktopWindow());
CPen pen;
pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
dc.SelectObject(&pen);
if (m_isDown)
{
dc.MoveTo(m_ptStart);
dc.LineTo(point);
m_ptStart = point;
}