如何在wince 6.0中为特定子窗口多次获取alphablend图像? 例如,如果我有一个用于音量增加的音量条形图窗口&点击vol +或Vol-按钮后改变的减少所以如果我想在wince 6.0中将vol bar graph窗口保持为alphablend图像那么我该如何获得?因为我已经在win32应用程序中尝试过并且我能够做到但是我无法在wince 6.0中执行相同的操作?
void AdjustAlphablendImage(int imgId,char axis_id)
{
LogEntry(L"Entered in AdjustAlphablendImage Function");
BLENDFUNCTION bf;
bf.BlendOp=AC_SRC_OVER;
bf.BlendFlags=0;
bf.SourceConstantAlpha=55;
bf.AlphaFormat=0;
HBITMAP bmp = LoadBitmap(handles.hInstance,
MAKEINTRESOURCE(imgId));
HDC wdc = GetWindowDC(handles.parent);
HDC tdc = CreateCompatibleDC(wdc);
SelectObject(tdc,bmp);
AlphaBlend(wdc ,
imgs[axis_id].x,
imgs[axis_id].y,
imgs[axis_id].width ,
imgs[axis_id].height,
tdc ,0 ,0 ,
imgs[axis_id].widthSrc,
imgs[axis_id].heightSrc,
bf);
DeleteDC(wdc);
DeleteDC(tdc);
DeleteObject(bmp);
ReleaseDC(handles.parent,wdc);
LogEntry(L"Exited from AdjustAlphablendImage Function");
}
这里'handles'是'HANDLES'类型的对象,'parent'是'HWND'类型'HANDLES'的数据成员。
struct HANDLES
{
HINSTANCE hInstance;
HWND parent;
HWND volUp;
HWND volDown;
HWND volOnOff;
HWND chUp;
HWND chDown;
HWND tvOnOff;
HWND tvTitle;
HWND volBarGraph; // I am doing alphablending on this...................
HWND chNo;
HWND chNoBcg;
HWND audioStatus;
HWND subTitleStatus;
HWND message;
HWND prevHandle;
WNDPROC oldButtonWndProc;
HWND pressedButton;
int prevButtonId;
char prevButtonAxis;
char screenMode;
};
AdjustAlphablendImage(
volumeStatus.volume + volumeStatus.status + INITIAL_VOLUME, // This is used for taking proper image on particular click of vol+ or vol- Button.
AXIS_VOL_BAR_GRAPH
);
如何在wince 6.0中删除背景图片?
请回复
由于
答案 0 :(得分:1)
仅仅因为桌面上的某些功能并不意味着它可以在Windows CE下运行。此外,由于CE是模块化操作系统,如果它在一台设备上运行,并不意味着它可以在另一台设备上运行。
是否在CE图像中添加了Alpha混合? 您的系统的显示驱动程序是否支持alpha混合?
在你甚至可以向前迈进之前,这两者的答案必须是“是”。
如果答案是“是”,那么我们需要查看您已尝试过的代码。
答案 1 :(得分:0)
我无法从文档中看到为什么AlphaBlend不能用于WinCE的原因 - 但是CE有时会喜欢给你一个惊喜! 一个替代方案,稍微笨重但几乎可以保证工作,是回到旧的三元光栅操作码并做一个部分blit,即使用画笔修改blit,以便不显示所有像素。这是我从Win 3.1开始使用的一种老技术,据我所知,它可以在所有CE平台上运行 - 所以挖出你的旧Petzold编程书,看看你能找到什么!