как получить alphablending в wince 6.0? а как стереть фоновое изображение в wince 6.0? - PullRequest
0 голосов
/ 16 декабря 2009

Как получить изображение alphablend в wince 6.0 для определенного дочернего окна n раз? например, если у меня есть окно с графиком в виде волга, которое предназначено для увеличения и уменьшения громкости, которое изменяется по нажатию кнопки vol + или Vol-, поэтому, если я хочу сохранить окно в виде графика гистограммы как изображение с возможностью альпинирования в wince 6.0, то как мне получить ? Потому что я пробовал в приложении Win32, и я был в состоянии сделать, но я не смог выполнить то же самое в Wince 6.0?

Я использовал приведенную ниже функцию для рисования изображения для volBarGraph в 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");

}

здесь «дескрипторы» - это объект типа «РУЧКИ», а «родитель» - это элемент данных «РУЧКИ» типа «HWND».

Моя структура 'РУЧКИ' упомянута ниже

struct РУЧКИ

* * {Тысяча двадцать-один
    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 для volBarGraph.

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 ]

1 голос
/ 16 декабря 2009

То, что что-то работает на рабочем столе, не означает, что оно будет работать под Windows CE. Кроме того, поскольку CE является модульной ОС, если она работает на одном устройстве, это не значит, что она будет работать на другом.

Было ли добавлено альфа-смешение в изображение CE? Поддерживает ли драйвер дисплея вашей системы альфа-смешивание?

Ответ на эти два вопроса должен быть "Да", прежде чем вы сможете даже попытаться двигаться вперед.

Если ответ на них «да», то нам нужно увидеть код, который вы уже пробовали.

0 голосов
/ 17 декабря 2009

Я не вижу причин из документации, почему AlphaBlend не будет работать для WinCE - однако CE иногда любит вас удивлять! Альтернатива, немного грубоватая, но гарантированно работающая, - вернуться к старым кодам операций Ternary Raster и сделать частичный блик, то есть использовать кисть, чтобы изменить блит так, чтобы отображались не все пиксели. Это старая техника, которую я использовал с Win 3.1 дней, и, насколько я знаю, она работает на всех платформах CE - так что выкопайте свою старую книгу по программированию Petzold и посмотрите, что вы можете найти!

...