WinAPI sprawdzanie czy wybrany styl wystąpił

WinAPI sprawdzanie czy wybrany styl wystąpił
gswidwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 839
0

Witam. Jak mogę sprawdzić, czy dany styl kontrolki jest aktywny? Zrobiłem na razie coś takiego, ale nie działa.

Kopiuj
 
WINDOWINFO Info;
Info.cbSize = sizeof( WINDOWINFO );
GetWindowInfo(hwnd, &Info);
if( Info.dwStyle == ES_MULTILINE )
{
     MessageBox(NULL, "", "", MB_OK);
}
//nie działa

oraz próbowałem też tak

Kopiuj
UINT style = (UINT)GetWindowLong(hwnd, GWL_STYLE) ;
if( style == ES_MULTILINE )
{
     MessageBox(NULL, "", "", MB_OK);
}
//tez nie dziala

Myślę, że błędnie sprawdzam, czy występuje dany styl. spowodowane jest to pewnie tym, że występuje więc niż 1 styl. Jak konkretnie sprawdzić, czy istnieje jeden z nich?

edit:

Znalazłem taki artykuł:

Alternatywa bitowa

Wynikiem alternatywy bitowej jest na danej pozycji jedynka w tedy gdy przynajmniej w jednej zmiennej na danej pozycji jest jedynka. W przeciwnym wypadku jest 0.
01101011 - zmienna1
11001101 - zmienna2
11101111 - wynik
Działa on na argumentach całkowitych
Składnia:
zmienna1 | zmienna2

Czyli w takim razie powinienem zrobić mniejwiecej tak?

Kopiuj
 
UINT styl = (UINT)GetWindowLong(hwnd, GWL_STYLE
char kod1[sizeof(UINT)];
char kod2[sizeof(UINT)];
itoa(styl, kod1, 2);
itoa(ES_MULTILINE, kod2, 2);

//teraz sprawdzić, czy zgadza się wystapienie jedynek?

Niby to powinno działać, ale co zrobić, jeżeli kilka flag stworzy taki sam kod?
Musze tak zarządzić zmiennymi, aby do tego nie dopuścić?

gswidwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 839
0

Już znalazłem odpowiedź na tym forum ;D
Suma bitowa

Tylko jedno pytanie. Istnieje jakaś gotowa funkcja sprawdzająca, czy jakaś wartość jest składnikiem sumy bitowej?

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
1

Wykonaj bitowe and swojej sumy bitowej z tym, czego oczekujesz.

Jeśli masz 11001 na przykład i wykonasz bitowe and z 10000 to dostaniesz 10000, czyli pierwszy bit jest ustawiony na 1.
Jeśli masz 01000 na przykład i wykonasz bitowe and z 10000 to dostaniesz 00000, czyli 0, czyli pierwszy bit jest ustawiony na 0.

unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
1

pewnie
if(Info.dwStyle & ES_MULTILINE == ES_MULTILINE)

albo po prostu krócej
if(Info.dwStyle & ES_MULTILINE > 0)

bo pewnie maska jest pojedynczym przesuniętym bitem więc wynikiem będzie zero, albo ta maska właśnie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.