想直接在窗口显示屏幕截图,但如下代码只能显示窗口化的一部分截图,试问各位大神怎么修改就可以显示全屏,或者说改哪些数据就可以获取屏幕其他部分的截图????
我是直接建立一个基本对话框实现这段代码,然后希望各位大神能指点一下,谢谢各位大神了,麻烦了,万分感激!!!!
HDC m_hDC=::GetDC(NULL);
//创建关联
HDC m_MemDC=CreateCompatibleDC(m_hDC);
//获得X\Y
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
//创建画布
HBITMAP MemPic=::CreateCompatibleBitmap(m_hDC,x,y);
::SelectObject(m_MemDC,MemPic);
//拷贝到内存
::BitBlt(m_MemDC,0,0,x,y,m_hDC,0,0,SRCCOPY);
//开始保存
HDC m_MainDC=::GetDC(m_hWnd);
::BitBlt(m_MainDC,0,0,x,y,m_MemDC,0,0,SRCCOPY);
::ReleaseDC(m_hWnd,m_MainDC);
::DeleteObject(MemPic);
::DeleteDC(m_MemDC);
::ReleaseDC(NULL,m_hDC);
我是直接建立一个基本对话框实现这段代码,然后希望各位大神能指点一下,谢谢各位大神了,麻烦了,万分感激!!!!
HDC m_hDC=::GetDC(NULL);
//创建关联
HDC m_MemDC=CreateCompatibleDC(m_hDC);
//获得X\Y
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
//创建画布
HBITMAP MemPic=::CreateCompatibleBitmap(m_hDC,x,y);
::SelectObject(m_MemDC,MemPic);
//拷贝到内存
::BitBlt(m_MemDC,0,0,x,y,m_hDC,0,0,SRCCOPY);
//开始保存
HDC m_MainDC=::GetDC(m_hWnd);
::BitBlt(m_MainDC,0,0,x,y,m_MemDC,0,0,SRCCOPY);
::ReleaseDC(m_hWnd,m_MainDC);
::DeleteObject(MemPic);
::DeleteDC(m_MemDC);
::ReleaseDC(NULL,m_hDC);
解决方案 »
- 怎样给控制台程序传递命令行参数呀?
- 写了个读内存的小程序,为什么第一次读取的内存列表中就没有被读取内存中的1004的地址那??
- 到底什么算是工作经验呢?
- 疑惑:(请北京的朋友帮忙)德信无线委托联合创新招人,技术培训是否应该交一笔巨额培训费? 急!!在线等!
- 我把一个C++类做成动态库,外部程序怎样调用他生成一个对象呢?大家说说
- 在listbox控件中画图的问题,特别急,高手请进!!!!
- 一个很菜的问题~~
- 怎么编程切断本机的网络连接啊!
- 那位高人能告诉我:哪里能得到GB2312/GBK的编码表?先行谢过!
- waitformultiobject 线程同步问题
- 求助 cannot convert parameter 4 from 'char [260]' to 'LPCTSTR'
- 在没有联网的状态下,怎么验证InstallShield Limited Edition for Visual Studio
void CMyDlg::OnButton1()
{
HDC hDC=::GetDC(NULL);
//创建关联
HDC MemDC=CreateCompatibleDC(hDC);
//获得X\Y
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
//创建画布
HBITMAP MemPic=::CreateCompatibleBitmap(hDC,x,y);
::SelectObject(MemDC,MemPic);
//拷贝到内存
::BitBlt(MemDC,0,0,x,y,hDC,0,0,SRCCOPY);
//开始保存
HDC MainDC=::GetDC(m_hWnd);
CRect rc;
GetClientRect(&rc);
SetStretchBltMode(MainDC,HALFTONE);
::StretchBlt(MainDC,0,0,rc.Width(),rc.Height(),MemDC,0,0,x,y,SRCCOPY);
// ::BitBlt(MainDC,0,0,x,y,MemDC,0,0,SRCCOPY);
::ReleaseDC(m_hWnd,MainDC);
::DeleteObject(MemPic);
::DeleteDC(MemDC);
::ReleaseDC(NULL,hDC);
1 不必要 的 m_ 已删除
2 开始保存, 使用 当前窗口 size
HDC MainDC=::GetDC(m_hWnd);
CRect rc;
GetClientRect(&rc);
SetStretchBltMode(MainDC,HALFTONE);
::StretchBlt(MainDC,0,0,rc.Width(),rc.Height(),MemDC,0,0,x,y,SRCCOPY);
// ::BitBlt(MainDC,0,0,x,y,MemDC,0,0,SRCCOPY);
//创建关联
HDC m_MemDC=CreateCompatibleDC(m_hDC);
//获得X\Y
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
//创建画布
HBITMAP MemPic=::CreateCompatibleBitmap(m_hDC,x,y);
::SelectObject(m_MemDC,MemPic);
//拷贝到内存
::BitBlt(m_MemDC,0,0,x,y,m_hDC,0,0,SRCCOPY);
//到这里,你已经将窗口数据拷贝到了m_MemDC //开始保存
HDC m_MainDC=::GetDC(m_hWnd);
::BitBlt(m_MainDC,0,0,x,y,m_MemDC,0,0,SRCCOPY);
//你的窗口没有办法显示整个位图,超出窗口部分被裁剪了
::ReleaseDC(m_hWnd,m_MainDC);
::DeleteObject(MemPic);
::DeleteDC(m_MemDC);
::ReleaseDC(NULL,m_hDC);