类qq截图解决方案
类qq截图
在做类qq截图软件,当开始截图时不能出现qq截图那种遮罩整个屏幕,只有截取了区域对能遮罩,而且移动选择的区域时屏幕又不出现遮罩了,我是在OnPaint函数中进行的处理。
------解决方案--------------------
这个我写过,开始截图的步骤应该是:
1.先复制屏幕DC保存到变量里(必须在你的截图窗口创建/显示前执行这一步)
2.创建/显示截图窗口,也就是你的(CDialogCapture),并设置全屏、总在最上层
可以在创建时加入WS_EX_TOPMOST或创建后SetWindowPos(HWND_TOPMOST...)
3.CDialogCapture::OnPaint()里面,先把第一步保存的屏幕DC复制到你的窗口DC上,再AlphaBlend
------解决方案--------------------
http://download.****.net/detail/dancen/2452118
这里有个,不知道对你有用不?
在做类qq截图软件,当开始截图时不能出现qq截图那种遮罩整个屏幕,只有截取了区域对能遮罩,而且移动选择的区域时屏幕又不出现遮罩了,我是在OnPaint函数中进行的处理。
void CDialogCapture::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialogEx::OnPaint()
CDC* pDC = GetDC();
//绘制子窗口的背景,用主窗口的背景填充,实现透明效果
CDC memdc;
CBitmap bmp, *pOldBitmap;
memdc.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC, cxScreen, cyScreen); //该函数创建与指定的设备环境相关的设备兼容的位图。cxScreen屏幕的宽,cyScreen屏幕的高
pOldBitmap = memdc.SelectObject(&bmp); //选择一对象到指定的设备上下文环境中
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
memdc.SelectObject(brush);
memdc.FillSolidRect(0,0,cxScreen,cyScreen,RGB(0,0,0)); //用指定的固体色填充矩形。
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0x5f; //半透明(0-ff,透明度从全透明到不透明)
bf.AlphaFormat = 0;
pDC->AlphaBlend(0,0,cxScreen,cyScreen,&memdc,0,0,cxScreen,cyScreen,bf); //0,0表示在对话框显示的坐标
//m_RectTracker为橡皮筋类对象
pDC->StretchBlt (m_RectTracker.m_rect.left,
m_RectTracker.m_rect.top,
m_RectTracker.m_rect.Width(),
m_RectTracker.m_rect.Height(),
&mem1DC, //前面保存的屏幕位图
m_RectTracker.m_rect.left,
m_RectTracker.m_rect.top,
m_RectTracker.m_rect.Width(),
m_RectTracker.m_rect.Height(),
SRCCOPY);
m_RectTracker.Draw(&dc);
}
------解决方案--------------------
这个我写过,开始截图的步骤应该是:
1.先复制屏幕DC保存到变量里(必须在你的截图窗口创建/显示前执行这一步)
2.创建/显示截图窗口,也就是你的(CDialogCapture),并设置全屏、总在最上层
可以在创建时加入WS_EX_TOPMOST或创建后SetWindowPos(HWND_TOPMOST...)
3.CDialogCapture::OnPaint()里面,先把第一步保存的屏幕DC复制到你的窗口DC上,再AlphaBlend
------解决方案--------------------
http://download.****.net/detail/dancen/2452118
这里有个,不知道对你有用不?