如何在wince 6.0中获得alphablending?以及如何在wince 6.0中删除背景图像?

时间:2009-12-16 07:44:04

标签: windows-mobile windows-ce winapi

如何在wince 6.0中为特定子窗口多次获取alphablend图像? 例如,如果我有一个用于音量增加的音量条形图窗口&点击vol +或Vol-按钮后改变的减少所以如果我想在wince 6.0中将vol bar graph窗口保持为alphablend图像那么我该如何获得?因为我已经在win32应用程序中尝试过并且我能够做到但是我无法在wince 6.0中执行相同的操作?

我在wince 6.0中使用了以下函数为volBarGraph绘制图像

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'的数据成员。

我的结构'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;

};

//以下函数用于调用volBarGraph的AdjustAlphablendImage函数。

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中删除背景图片?

请回复

由于

2 个答案:

答案 0 :(得分:1)

仅仅因为桌面上的某些功能并不意味着它可以在Windows CE下运行。此外,由于CE是模块化操作系统,如果它在一台设备上运行,并不意味着它可以在另一台设备上运行。

是否在CE图像中添加了Alpha混合? 您的系统的显示驱动程序是否支持alpha混合?

在你甚至可以向前迈进之前,这两者的答案必须是“是”。

如果答案是“是”,那么我们需要查看您已尝试过的代码。

答案 1 :(得分:0)

我无法从文档中看到为什么AlphaBlend不能用于WinCE的原因 - 但是CE有时会喜欢给你一个惊喜! 一个替代方案,稍微笨重但几乎可以保证工作,是回到旧的三元光栅操作码并做一个部分blit,即使用画笔修改blit,以便不显示所有像素。这是我从Win 3.1开始使用的一种老技术,据我所知,它可以在所有CE平台上运行 - 所以挖出你的旧Petzold编程书,看看你能找到什么!