调用GetAttachedSurface不成功
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
//Modified code begin
DDSURFACEDESC ddsd;
DDSCAPS ddscaps;
HRESULT ddrval;
HDC hdc;
char buf[256];
//create a window
hWnd = CreateWindowEx(
WS_EX_TOPMOST,
szWindowClass,
szTitle,
WS_POPUP,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CXSCREEN),
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
//create the main DirectDraw object
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
if (ddrval == DD_OK)
{
//Get exclusive mode
ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
if (ddrval == DD_OK)
{
ddrval = lpDD->SetDisplayMode(640, 480, 8);
if (ddrval == DD_OK)
{
//create the primary surface with 1 back buffer
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|
DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL);
if (ddrval == DD_OK)
{
//Get a pointer to the back buffer
ZeroMemory(&ddscaps, sizeof(DDSCAPS));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
if (ddrval = DD_OK)
{
//draw some text
if (lpDDSPrimary->GetDC(&hdc) == DD_OK)
{
SetBkColor(hdc, RGB(0, 0, 255));
SetTextColor(hdc, RGB(255, 255, 0));
TextOut(hdc, 0, 0, szMsgBack, lstrlen(szMsgBack));
lpDDSBack->ReleaseDC(hdc);
}
//create a timer to flip the pages
if (SetTimer(hWnd, TIME_ID, TIMER_RATE, NULL))
{
return TRUE;
}
}
}
}
}
}
wsprintf(buf, "Direct Draw Init Failed (%08lx)\n", ddrval);
MessageBox(hWnd, buf, "ERROR", MB_OK);
DestroyDirectDrawObjects();
DestroyWindow(hWnd);
return FALSE;
//Modified code end
}运行结果为:Direct Draw Init Failed (00000000)
考虑过也为ddsd初始化内存,仍然出错,调试发现ddrval得不到GetAttachedSurface应该返回的5个值的其中一个,求各位大神帮忙。。。
相关推荐
精彩编程与编程技巧-DirectX7.0使用心得(2)...
精彩编程与编程技巧-DirectX7.0使用心得(2) ...
VC++ DirectDraw显示图片实战:解决GDI闪烁与双缓冲
在Windows图形编程中,屏幕闪烁是高频刷新场景下的经典难题。GDI绘图直接写前台缓冲区,BitBlt贴图在窗口拖动或快速更新时会产生残影和闪烁。双缓冲技术通过后备表面预渲染再进行一次翻转,能有效消除视觉撕裂。DirectDraw作为早期DirectX的2D接口,正是实现双缓冲和表面翻转的轻量级方案,它在显存管理、页翻转和离屏表面等底层操作上比GDI更高效,适合工控界面、老游戏维护及固定分辨率下的图片快速显示。本文围绕VC++环境下的DirectDraw应用,讲解从创建主表面、后备表面到BMP加载与翻转上
工业互联网工控安全与工业质检AI大模型建设方案.pptx
工业互联网工控安全与工业质检AI大模型建设方案.pptx
2024 《计算机网络》实验教学指导书.doc
2024 《计算机网络》实验教学指导书.doc
不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)
内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。


