|
|
希望各位大大别路过,多留点意见,谢谢了!!
[em17][em17][em17][em17][em17][em17][em17][em17][em17]
问题:
1. 当我的代码运行到创建显示表面时,就会出现内存报错,不知道是哪里设置不对...
2. 我在设置协作级别中分别试了全屏和窗口模式,然后分步运行时发现,设为全屏时似乎
并未调用SetCooperativeLevel函数,而如果将参数设为窗口模式(DDSCL_NORMAL)
该函数就会被执行,不知道这是否正常现象?
所用工具:
VC++6.0 D9.0_SDK
代码:
#include <ddraw.h>
#include <windows.h>
#include <iostream.h>
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"dxguid.lib")
int CCreate(HWND, LPDIRECTDRAW7); // 创建
int CRelease(LPDIRECTDRAW7); // 释放
int CShow(LPDIRECTDRAWSURFACE7, LPDIRECTDRAW7); // 显示
int main(void)
{
// 创建窗体句柄
HWND hWnd = NULL;
// 创建 DirectDraw7 接口指针
LPDIRECTDRAW7 lpDD7 = NULL;
// 创建 DirectDraw7 显示表面接口指针
LPDIRECTDRAWSURFACE7 lpDD7Primary = NULL;
CCreate(hWnd, lpDD7); // 创建窗口
CShow(lpDD7Primary, lpDD7); // 显示窗口
CRelease(lpDD7); // 释放窗口
return 0;
}
// 创建
int CCreate(HWND hWnd, LPDIRECTDRAW7 lpDD7)
{
// 对 DirectDraw7 接口的调用
if ( DD_OK == DirectDrawCreateEx(NULL, (void **)&lpDD7, IID_IDirectDraw7, NULL) )
{
cout << "Create" << endl;
// return E_FAIL;
}
// 设置协作级别
if ( DD_OK == lpDD7->SetCooperativeLevel(hWnd, DDSCL_FULLSCREEN |
DDSCL_ALLOWMODEX |
DDSCL_EXCLUSIVE |
DDSCL_ALLOWREBOOT) )
{
cout << "Do" << endl;
// return E_FAIL;
}
// 设置显示模式
if ( DD_OK == lpDD7->SetDisplayMode(1024, 768, 8, 0, 0) )
{
cout << "Show" << endl;
// return E_FAIL;
}
return S_OK;
}
// 显示
int CShow(LPDIRECTDRAWSURFACE7 lpDD7Primary,
LPDIRECTDRAW7 lpDD7)
{
// 声明并填充描述DirectDraw表面的结构体
DDSURFACEDESC2 ddsd;
// ※填充前记得要把结构体初始化为0(使用系统宏ZeroMemory或者函数memset)※
memset(&ddsd, 0, sizeof(ddsd));
// 填充
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if ( DD_OK == lpDD7->CreateSurface(&ddsd, &lpDD7Primary, NULL) )
{
cout << "CreateShow" << endl;
}
return 0;
}
// 销毁
int CRelease(LPDIRECTDRAW7 lpDD7)
{
if ( lpDD7 )
{
lpDD7->Release();
lpDD7 = NULL;
}
return 0;
} |
|