Получение стиля окна
Я пытаюсь проверить, имеет ли окно определенный стиль, используя 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;