Получение стиля окна

Я пытаюсь проверить, имеет ли окно определенный стиль, используя GetWindowLong(hWnd, GWL_STYLE), но это дает мне переменную типа LONG. Как бы вы проверили конкретный стиль, скажем, типа константного значения 'WS_CAPTION'?

2 ответа

Решение

Используйте побитовый оператор & для сравнения с этим длинным типом,

пример

if (szLng & WS_CAPTION){
    // that window has caption
}

Большинство стилей окна WS_ являются однобитными значениями; то есть каждый из них занимает только один бит в dwStyles.

Вот dwStyles можно получить из: DWORD dwStyles = CWnd::GetStyle();

Но некоторые из стилей WS_, такие как WS_CAPTION, WS_OVERLAPPEDWINDOW,WS_POPUPWINDOW, объединить несколько однобитовых стилей.

Тестовый код ниже подходит для однобитовых стилей окна, но не OK для комбинированных стилей.

DWORD dwSomeStyle = WS_... ;
BOOL bSomeStyleIsPresentForThisWnd;

if (dwStyles & dwSomeStyle)
  bSomeStyleIsPresentForThisWnd = TRUE;
else
  bSomeStyleIsPresentForThisWnd = FALSE;
Другие вопросы по тегам