游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1823|回复: 2

用 DirectDraw 显示的问题

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-10-6 09:11:00 | 显示全部楼层 |阅读模式

  1. int APIENTRY WinMain(HINSTANCE hInstance,
  2.                      HINSTANCE hPrevInstance,
  3.                      LPSTR     lpCmdLine,
  4.                      int       nCmdShow)
  5. {
  6.      // TODO: Place code here.
  7.     MSG msg;
  8.     HACCEL hAccelTable;

  9.     // Initialize global strings
  10.     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  11.     LoadString(hInstance, IDC_TEST, szWindowClass, MAX_LOADSTRING);
  12.     MyRegisterClass(hInstance);

  13.     // Perform application initialization:
  14.     if (!InitInstance (hInstance, nCmdShow))
  15.     {
  16.         return FALSE;
  17.     }

  18.     hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST);

  19.     ///
  20.     /**
  21.     * 创建一个 DirectDraw 对象
  22.     */
  23.     LPDIRECTDRAW _lpDD = NULL;
  24.     HRESULT ddrval = DirectDrawCreate(NULL, &_lpDD, NULL);
  25.     if (FAILED(ddrval))
  26.     {
  27.         MessageBox(NULL, "Failed to DirectDrawCreate", NULL, MB_OK);
  28.         return FALSE;
  29.     }

  30.     LPDIRECTDRAW lpDDraw = NULL;
  31.     if(FAILED(_lpDD->QueryInterface(IID_IDirectDraw, (LPVOID *)&lpDDraw)))
  32.     {
  33.         MessageBox(NULL,TEXT("DirectDraw QueryInterface error!"), TEXT("Wrong!"), MB_OK);
  34.         return(0);
  35.     }

  36.     /**//**
  37.         * 设置执行模式
  38.     */
  39.     if (FAILED(lpDDraw->SetCooperativeLevel(g_hwnd, DDSCL_NORMAL  )))
  40.     {
  41.         MessageBox(NULL,TEXT("DirectDraw SetCooperativeLevel error!"), TEXT("Wrong!"), MB_OK);
  42.         return(0);
  43.     }
  44.     /**//**
  45.         * 创建一个表层
  46.     */
  47.     DDSURFACEDESC ddsd;
  48.     LPDIRECTDRAWSURFACE lpDDSPrimary;
  49.     ddsd.dwSize = sizeof(ddsd);
  50.     ddsd.dwFlags = DDSD_CAPS ;
  51.     ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
  52.     ddsd.dwBackBufferCount = 1;
  53.     ddrval = lpDDraw->CreateSurface(&ddsd, &lpDDSPrimary, NULL);
  54.     if (FAILED(ddrval))
  55.     {
  56.         MessageBox(NULL, "Failed to CreateSurface", NULL, MB_OK);
  57.         return FALSE;
  58.     }

  59.     LPDIRECTDRAWCLIPPER  lpddclipper  = NULL;
  60.     if( FAILED( _lpDD->CreateClipper(0,&lpddclipper,NULL) ) )
  61.     {
  62.         MessageBox(NULL,TEXT("DirectDraw CreateClipper error!"), TEXT("Wrong!"), MB_OK);
  63.         return(0);
  64.     }

  65.     if( FAILED( lpddclipper->SetHWnd(0, g_hwnd) ) )
  66.     {
  67.         MessageBox(NULL,TEXT("DirectDraw SetHWnd error!"), TEXT("Wrong!"), MB_OK);
  68.         return(0);
  69.     }
  70.    
  71.     if( FAILED( lpDDSPrimary->SetClipper(lpddclipper) ))
  72.     {
  73.         MessageBox(NULL,TEXT("DirectDraw SetClipper error!"), TEXT("Wrong!"), MB_OK);
  74.         return(0);
  75.     }

  76.     HDC hdc;
  77.     if(lpDDSPrimary->GetDC(&hdc) == DD_OK)
  78.     {
  79.         SetBkColor(hdc, RGB(0,0,255));
  80.         SetTextColor( hdc,RGB(255,255,0 ) );
  81.         TextOut( hdc, 0, 0, "test", lstrlen("test"));
  82.         lpDDSPrimary->ReleaseDC(hdc);
  83.     }



  84.     // Main message loop:
  85.     while (GetMessage(&msg, NULL, 0, 0))
  86.     {
  87.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  88.         {
  89.             TranslateMessage(&msg);
  90.             DispatchMessage(&msg);
  91.         }
  92.     }

  93.     return msg.wParam;
  94. }

复制代码

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-10-6 09:11:00 | 显示全部楼层

Re:用 DirectDraw 显示的问题

初接触 DirectDraw,在网上找了一些资料,写了这个程序

现在有几个问题,我需要做一个窗体(非全屏),然后用它来显示一些动画
我现在 TextOut 的内容为什么在窗体外呢?

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2008-10-9 10:26:00 | 显示全部楼层

Re:用 DirectDraw 显示的问题

窗口模式下 你DirectDraw程序的主表面仍旧是整个显示屏幕 而不仅是程序窗口 你需要用GetWindowRect函数获取客户区坐标 然后在客户区坐标内textout 要是显示一些动画还涉及到剪裁的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 04:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表