clq
浏览(0) +
2010-05-24 14:49:11 发表
编辑
关键字:
最简单的 DirectDraw 程序
只生成一个表面并关联到窗口句柄就可以,然后就可以使用 gdi 函数进行操作了.(不过直接用 gdi 函数似乎速度并不高?--尚未看到权威说明)
clq
HDC create_dx2(HWND h, LPDIRECTDRAWSURFACE * pdds)
{
HWND hwnd = h;
IDirectDraw *dd;
//IDirectDrawSurface *dds0;//LPDIRECTDRAWSURFACE 是 IDirectDrawSurface *
// IDirectDrawSurface * dds0 = * pdds;
DDSURFACEDESC ddsd;
HDC hddDC;
RECT rect;
DirectDrawCreate(NULL, &dd, NULL);
//dd->SetCooperativeLevel(hwnd, DDSCL_NORMAL | DDSCL_NOWINDOWCHANGES);
dd->SetCooperativeLevel(hwnd, DDSCL_NORMAL);
memset(&ddsd, 0, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(DDSURFACEDESC);
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
ddsd.dwFlags = DDSD_CAPS;
// dd->CreateSurface(&ddsd, &dds0, NULL);
dd->CreateSurface(&ddsd, pdds, NULL);
IDirectDrawSurface * dds0 = * pdds;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwHeight = 32;
ddsd.dwWidth = 32;
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
dds0->GetDC(&hddDC);//clq add test
// SaveDC(hddDC);//好象不要也可以
rect.left = rect.top = 0;
rect.right = rect.bottom = 32;
FillRect(hddDC, &rect, (HBRUSH)(COLOR_WINDOW + 1));
SelectObject(hddDC, GetStockObject(BLACK_BRUSH));
SelectObject(hddDC, GetStockObject(BLACK_PEN));
//Ellipse(hddDC, 0, 0, 32, 32);
TextOut(hddDC, 5, 1, _T("abbb"), 3);
// RestoreDC(hddDC, -1);//好象不要也可以
dds0->ReleaseDC(hddDC); //clq add test
//--------------------------------------------------
::Sleep(200);
return hddDC;
}
clq
ddsd.dwHeight = 1024;//320;//32;
ddsd.dwWidth = 1024;//320;//32;
好象比较重要,要大于 blt 使用时的块大小. blt 是缩放操作能硬件加速的关键.
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.