MAKEROP4 макрос создает четвертичную растровый код операции для использования с MaskBlt функции. Макрос принимает два троичных кода операций растра в качестве входных данных, один для переднего плана и один для фона, и упаковывает их индексы логических операций в старшее слово 32-битного значения. Слово младшего разряда этого значения будет игнорироваться.
- Код: Выделить всё
void MAKEROP4(
fore,
back
);
Как я понимаю надо здесь с битовыми операциями провернуть. Но из-за машиного перевода не понимаю что нужно сделать.
То что я понял. Есть Long и в старших восьми битах хранятся значения. Как они там расположены и какие значения писать не понимаю!
Приблизительный код:
- Код: Выделить всё
Public Function MakeRop4(byval fore as ????,byval back as ????) as Long
'Сооброжу как запихать fore & back в Long только какого они типа??
end function
Если честно подставлял значения отсюда https://docs.microsoft.com/ru-ru/windows/desktop/gdi/ternary-raster-operations
но эффекта никакого. Суть в том что MaskBlt вообще ничего не рисует. Ставлю значение dwRop = 0, то отрисовывает просто черный квадрат
- Код: Выделить всё
Create combined ROP for MaskBlt
Function MakeRop4(ropFore As Long, ropBack As Long) As Long
' MakeRop4 = ((ropBack SHL 8) And &HFF000000) Or ropFore
#If 1 Then
MakeRop4 = (MBytes.LShiftDWord(ropBack, 8) And &HFF000000) Or ropFore
#Else
' Hack to do same shift in Basic
If ropBack And &H800000 Then
Dim ropTmp As Long
' Remove high bit
ropTmp = (ropBack And &HFF7FFFFF)
' Do calculation
ropTmp = ((ropTmp * 256) And &HFF000000) Or ropFore
' Put high bit back in
MakeRop4 = ropTmp Or &H80000000
Else
MakeRop4 = ((ropBack * 256) And &HFF000000) Or ropFore
End If
#End If
End Function
Нашел на просторах. Как я понял #if для исполнения из под ide или в скомпиленом виде так? То есть это все что после #else и есть нужный код? Объясните пжлста, мне можно вообще убрать #if then #else?