想直接在窗口显示屏幕截图,但如下代码只能显示窗口化的一部分截图,试问各位大神怎么修改就可以显示全屏,或者说改哪些数据就可以获取屏幕其他部分的截图????
我是直接建立一个基本对话框实现这段代码,然后希望各位大神能指点一下,谢谢各位大神了,麻烦了,万分感激!!!!
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);

解决方案 »

  1.   


    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);
      

  2.   

     WINAPI 拷贝指定的hDC的lpRect部分到文件Dstfile中(BMP文件格式)
      

  3.   

    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);
          //到这里,你已经将窗口数据拷贝到了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);