• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张纯睿
博客园    首页    新随笔    联系   管理    订阅  订阅

DirectX 截屏,抓图,截图

http://alaskaxinx.blog.163.com/blog/static/976173772008527105142242/

http://www.pin5i.com/showtopic-26129.html
http://blog.sina.com.cn/s/blog_6e04a8350100ng5u.html


void CComputerRobotTestDlg::OnBnClickedButton3()
{
 HWND hWnd = (HWND)0x000D013A;

 // init 3d  http://alaskaxinx.blog.163.com/blog/static/976173772008527105142242/
 LPDIRECT3D9    g_pD3D  =NULL;
 LPDIRECT3DDEVICE9   g_pd3dDevice =NULL;
 LPDIRECT3DVERTEXBUFFER9   g_pVB  =NULL;
 //创建Direct3D对象
 if (NULL == (g_pD3D =Direct3DCreate9(D3D_SDK_VERSION)))
 {
  return;
 }

 D3DPRESENT_PARAMETERS d3dpp;
  ZeroMemory(&d3dpp,sizeof(d3dpp));
  d3dpp.Windowed = TRUE;
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;


 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
    D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
 {
  return;
 }


 

 BOOL hrRes = 0;
 LPDIRECT3DDEVICE9 lpDevice = g_pd3dDevice;
 TCHAR fileName[255] = _T("c:\\output4.bmp");
 // BOOL ScreenShot(LPDIRECT3DDEVICE9 lpDevice, HWND hWnd, TCHAR* fileName)  http://www.pin5i.com/showtopic-26129.html
 // 需要 http://blog.sina.com.cn/s/blog_6e04a8350100ng5u.html
 // #pragma comment(lib,"d3d9.lib")
 // #pragma comment(lib,"d3dx9.lib")
 // #项目(菜单上)->XX属性(也就是下拉菜单中最后一项)->配置属性->链接->常规,然后设置“附加库目录”
 //  "C:\Program Files\Microsoft DirectX SDK (August 2007)\Include"
 //  #include "C:\\Program Files\\Microsoft DirectX SDK (August 2007)\\Include\\D3dx9tex.h"


 {
   HRESULT hr;
  
   // Get adapter display mode
   D3DDISPLAYMODE mode;
   if (FAILED(hr = lpDevice->GetDisplayMode(0, &mode)))
    return ;

    // Create the surface to hold the screen image data
    LPDIRECT3DSURFACE9 surf;
    if (FAILED(hr = lpDevice->CreateOffscreenPlainSurface(mode.Width,
     mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surf, NULL))) //注意第四个参数不能是D3DPOOL_DEFAULT
    {
     return ;
    }

    // Get the screen data
    if (FAILED(hr = lpDevice->GetFrontBufferData(0, surf)))
    {
     surf->Release() ;
     return ;
    }

    // area to capture
    RECT *rect = NULL ;

    WINDOWINFO windowInfo ;
    windowInfo.cbSize = sizeof(WINDOWINFO) ;

    if(hWnd) // capture window
    {
     ::GetWindowInfo(hWnd, &windowInfo) ;
     rect = &windowInfo.rcWindow ;
    }

    // Save the screen date to file
    hr = D3DXSaveSurfaceToFile(fileName, D3DXIFF_BMP, surf, NULL, rect);

    surf->Release() ;

    return ;
 }
}

posted @ 2011-06-27 14:50  张纯睿  阅读(1066)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3