DirectX中的SetColorKey函数可以在MFC中使用吗?

answerear 2003-08-20 05:57:59
我最近用mfc构造好了应用程序框架,然后用dx创建页面,但创建离屏页面时加上颜色键的设置就不行了,总是出错,哪位高手知道怎么解决吗?
还有,在mfc中使用bitblt函数时,可以想dx中使用blt或者bltfast函数那样设置颜色键吗?
...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluestar 2003-08-22
  • 打赏
  • 举报
回复
你包含了头文件和库文件,照样使用。
Napoleo 2003-08-22
  • 打赏
  • 举报
回复
其实mfc还是很好的
VCP4 2003-08-21
  • 打赏
  • 举报
回复
呵哈哈,现在没有人这样用的。
不是有个ddutil.h和ddutil.cpp的MS已编好的函数,里面一个函数就OK了。
MFC也可以用的,不过你要像WIN32中一样Link上相应的lib和#include 头文件。
UnixXp 2003-08-21
  • 打赏
  • 举报
回复
首先申明:本人不是高手。我是这样用的:
DWORD
DDColorMatch(IDirectDrawSurface7 * pdds, COLORREF rgb)
{
COLORREF rgbT;
HDC hdc;
DWORD dw = CLR_INVALID;
DDSURFACEDESC2 ddsd;
HRESULT hres;

//
// Use GDI SetPixel to color match for us
//
if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
SetPixel(hdc, 0, 0, rgb); // Set our value
pdds->ReleaseDC(hdc);
}
//
// Now lock the surface so we can read back the converted color
//
ddsd.dwSize = sizeof(ddsd);
while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
;
if (hres == DD_OK)
{
dw = *(DWORD *) ddsd.lpSurface; // Get DWORD
if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; // Mask it to bpp
pdds->Unlock(NULL);
}
//
// Now put the color that was there back.
//
if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
SetPixel(hdc, 0, 0, rgbT);
pdds->ReleaseDC(hdc);
}//*/
return dw;
}

HRESULT
DDSetColorKey(IDirectDrawSurface7 * pdds, COLORREF rgb)
{
DDCOLORKEY ddck;

ddck.dwColorSpaceLowValue = DDColorMatch(pdds, rgb);
ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue;
return pdds->SetColorKey(DDCKEY_SRCBLT, &ddck);
}

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧