DDCOLORKEY colorkey;
//设置色彩键码
colorkey.dwColorSpaceLowValue=0;
colorkey.dwColorSpaceHighValue=100;
if(FAILED(lpDDopl->SetColorKey(DDCKEY_COLORSPACE,&colorkey)))
{
MessageBox(windHwnd,"设置色彩键失败!","警告",MB_OK);
return false;
}
其中:lpDDopl为一个指向后备区的指针(已经成功创建)
为什么运行后总是设置失败??????
如把colorkey的两个属性都设为黑色或白色,DDCKEY_COLORSPACE改为DDCKEY_SRCBLT则设置成功,但如不设为非黑白色则都会失败
请指教
//设置色彩键码
colorkey.dwColorSpaceLowValue=0;
colorkey.dwColorSpaceHighValue=100;
if(FAILED(lpDDopl->SetColorKey(DDCKEY_COLORSPACE,&colorkey)))
{
MessageBox(windHwnd,"设置色彩键失败!","警告",MB_OK);
return false;
}
其中:lpDDopl为一个指向后备区的指针(已经成功创建)
为什么运行后总是设置失败??????
如把colorkey的两个属性都设为黑色或白色,DDCKEY_COLORSPACE改为DDCKEY_SRCBLT则设置成功,但如不设为非黑白色则都会失败
请指教
解决方案 »
- vs2012如何添加web引用
- 为啥在ctreectrl控件中GetItemData()总是无法正确获得当前数据?
- Dsoframer支持Office2007和HttpPost的问题
- 听说在用vc编写64位程序时,int类型仍然默认是4字节?
- 执行SQL语句时出错,请问如何解决?
- 请教高手,怎么在改变菜单的焦点?
- 将选择的jpg和gif显示在 picture 控件上,问题不太难,急请朋友门帮忙
- 如何程序运行时改变Tab Order?
- 上次csdn论坛里整理后,我发现以前的我提的问题有些不知道那去找???
- 哪儿有softICE for win2000下载?给出好用的下载链结站点者给分!!!!!!!!!
- vc中,含有汉字和英文字母和数字的字符串,如何计算长度,准确截取一定长度的字符串呢?
- 大家推荐一个画图的组件
{
CTRY;
m_colorKey = keycolor; CHECK_BOOL(m_pPrimary); DDPIXELFORMAT ddpf;
ZeroMemory(&ddpf, sizeof ddpf);
ddpf.dwSize = sizeof ddpf;
CHECK_DDERR(m_pPrimary->GetPixelFormat(&ddpf));
HDC hdc;
CHECK_DDERR(m_pPrimary->GetDC(&hdc));
COLORREF colorSave = ::GetPixel(hdc, 0, 0);
::SetPixel(hdc, 0, 0, m_colorKey);
m_pPrimary->ReleaseDC(hdc); DDSURFACEDESC ddsd;
ZeroMemory(&ddsd, sizeof ddsd);
ddsd.dwSize = sizeof ddsd;
DDCOLORKEY ddck;
CHECK_DDERR(m_pPrimary->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_READONLY | DDLOCK_SURFACEMEMORYPTR, 0));
DWORD dwMask = (ddpf.dwRGBBitCount == 16) ? 0x0000ffff :
((ddpf.dwRGBBitCount == 24) ? 0x00ffffff : 0xffffffff);
m_dwKeyColor = dwMask & *((DWORD*) ddsd.lpSurface);
ddck.dwColorSpaceLowValue = ddck.dwColorSpaceHighValue = m_dwKeyColor;
m_pPrimary->Unlock(NULL); m_pPrimary->GetDC(&hdc);
::SetPixel(hdc, 0, 0, colorSave);
m_pPrimary->ReleaseDC(hdc);
CHECK_DDERR(m_pPrimary->SetColorKey(DDCKEY_DESTOVERLAY, &ddck)); if (IsWindow(m_hWnd))
Invalidate();
CCATCH;
return TRUE;
}
第二种情况下,不设区间,只设一个值(非黑白色,黑白色可以),不会报错,但后面用BltFast复制后,整个图、像都复制过去了,没变一点。
上面的代码没看懂,m_dwKeyColor = dwMask & *((DWORD*) ddsd.lpSurface);作用是什么
HRESULT hr= lpDDopl->SetColorKey(DDCKEY_COLORSPACE,&colorkey);
if(FAILED(hr))
{
const TCHAR* strHRESULT=DXGetErrorString9(x);
const TCHAR* strDescription= DXGetErrorDescription9( x );
}
const TCHAR* strDescription= DXGetErrorDescription9( x );
==>
const TCHAR* strHRESULT=DXGetErrorString9(hr);
const TCHAR* strDescription= DXGetErrorDescription9( hr );
再请问你一下:*((DWORD*) ddsd.lpSurface取出的是什么?我的理解是取出了第一点的色彩.但如是这样的话那跟COLORREF colorSave = ::GetPixel(hdc, 0, 0);取出的有什么不同???
谢谢啦