24,854
社区成员
发帖
与我相关
我的任务
分享
#include "MyDirectDraw.h"
#include <string>
#define TIMER_ID 1
#define TIMER_RATE 500
MyDirectDraw::MyDirectDraw(){
m_pDD=NULL;
m_pDDSFront=NULL;
m_pDDSBack=NULL;
}
void __stdcall MyDirectDraw::timer_proc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
//HDC hdc;
//HRESULT ddrval=m_pDDSFront->GetDC(&hdc);
//SetBkColor( hdc,RGB(0,0,255) );
//SetTextColor( hdc,RGB(255,255,0) );
//std::string str("Hello");
//TextOut( hdc,200,200,str.c_str(),str.length() );
//m_pDDSFront->ReleaseDC(hdc);
}
void MyDirectDraw::Paint(HWND hwnd)
{
HRESULT ddrval=DirectDrawCreate( NULL,&m_pDD,NULL );
if( DD_OK!=ddrval )
{
//::MessageBox(NULL,_T("DirectDrawCreate Failed."),_T("DirectDrawCreate"),MB_OK);
return;
}
ddrval=m_pDD->SetCooperativeLevel( hwnd,DDSCL_NORMAL );
ddrval=m_pDD->SetDisplayMode( 1600,900,24 );
DDSURFACEDESC ddsd;
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount=1;
ddrval=m_pDD->CreateSurface( &ddsd,&m_pDDSFront,NULL );
if( DD_OK!=ddrval )
{
::MessageBox(NULL,"CreateSurface Failed.","CreateSurface",MB_OK);
::PostMessage(hwnd, WM_CLOSE, 0, 0);
return;
}
DDSCAPS ddscaps;
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=m_pDDSFront->GetAttachedSurface( &ddscaps,&m_pDDSBack );
SetTimer( hwnd,TIMER_ID,TIMER_RATE,timer_proc );
//HDC hdc;
//ddrval=m_pDDSFront->GetDC(&hdc);
//SetBkColor( hdc,RGB(0,0,255) );
//SetTextColor( hdc,RGB(255,255,0) );
//std::string str("Hello");
//TextOut( hdc,200,200,str.c_str(),str.length() );
//m_pDDSFront->ReleaseDC(hdc);
//RECT rcClient={100.0,100,400,300};
//m_pDDSFront->Blt( &rcClient,m_pDDSFront,NULL,DDBLT_WAIT,NULL );
}
#include "MyDirectDraw.h"
#include <string>
#define TIMER_ID 1
#define TIMER_RATE 500
MyDirectDraw::MyDirectDraw(){
m_pDD=NULL;
m_pDDSFront=NULL;
m_pDDSBack=NULL;
}
void __stdcall MyDirectDraw::timer_proc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
//HDC hdc;
//HRESULT ddrval=m_pDDSFront->GetDC(&hdc);
//SetBkColor( hdc,RGB(0,0,255) );
//SetTextColor( hdc,RGB(255,255,0) );
//std::string str("Hello");
//TextOut( hdc,800,400,str.c_str(),str.length() );
//m_pDDSFront->ReleaseDC(hdc);
}
void MyDirectDraw::Paint(HWND hwnd)
{
HRESULT ddrval=DirectDrawCreate( NULL,&m_pDD,NULL );
if( DD_OK!=ddrval )
{
//::MessageBox(NULL,_T("DirectDrawCreate Failed."),_T("DirectDrawCreate"),MB_OK);
return;
}
ddrval=m_pDD->SetCooperativeLevel( hwnd,DDSCL_NORMAL );
ddrval=m_pDD->SetDisplayMode( 1600,900,24 );
DDSURFACEDESC ddsd;
memset(&ddsd,0,sizeof(DDSURFACEDESC));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
ddrval=m_pDD->CreateSurface( &ddsd,&m_pDDSFront,NULL );
if( DD_OK!=ddrval )
{
::MessageBox(NULL,"CreateSurface Failed.","CreateSurface",MB_OK);
::PostMessage(hwnd, WM_CLOSE, 0, 0);
return;
}
HDC hdc;
ddrval=m_pDDSFront->GetDC(&hdc);
SetBkColor( hdc,RGB(0,0,255) );
SetTextColor( hdc,RGB(255,255,0) );
std::string str("Hello");
TextOut( hdc,800,400,str.c_str(),str.length() );
//m_pDDSFront->ReleaseDC(hdc);
//DDSCAPS ddscaps;
//ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
//ddrval=m_pDDSFront->GetAttachedSurface( &ddscaps,&m_pDDSBack );
SetTimer( hwnd,TIMER_ID,TIMER_RATE,timer_proc );
}
经过修改,不要 //m_pDDSFront->ReleaseDC(hdc);这句就可以在屏幕上输出.
但前面的两个DDSURFACE为什么不能建立成功呢?