есть функция
hWnd = CreateWindow(szWindowClass, "Task1", WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN ^WS_MAXIMIZEBOX,
hWndRect.left, hWndRect.top, hWndRect.right-hWndRect.left, hWndRect.bottom-hWndRect.top, NULL, NULL, hInstance, NULL);
хочется понять часть "WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN ^WS_MAXIMIZEBOX"
что означает каждый из этих стилей, и почему первые разделены |, а последние ^?? я понимаю, что в одном случае это побитовое, а в другом - побитовое исключающее или, а в чем отличие? почему его тут использовали? и как оно вообще работает? заранее огромное спасибо всем откликнувшимся
Другие языки программирования и технологии
Вопрос по программированию C++
Здесь - никак! Если представить предопределённые константы, которые имеют тип long, в двоичном представлении, то рисуется следующая картина маслом, пардон, столбиком:
Вначале будет выполнена операция исключающее битовое ИЛИ, которая имеет более высокий приоритет.
000 0010 0000 0000 0000 0000 0000 0000 // двоичное представление WS_CLIPCHILDREN
^
000 0000 0000 0001 0000 0000 0000 0000 // двоичное представление WS_MAXIMIZEBOX
=
000 0010 0000 0001 0000 0000 0000 0000 // результат операции в двоичном представлении
Затем первое битовое ИЛИ.. .
000 0000 1100 1111 0000 0000 0000 0000 // двоичное представление WS_OVERLAPPEDWINDOW
|
000 0100 0000 0000 0000 0000 0000 0000 // двоичное представление WS_CLIPSIBLINGS
=
000 0100 1100 1111 0000 0000 0000 0000 // результат операции в двоичном представлении
И наконец второе битовое ИЛИ.. .
000 0100 1100 1111 0000 0000 0000 0000
|
000 0010 0000 0001 0000 0000 0000 0000
=
000 0110 1100 1111 0000 0000 0000 0000
Можно заметить, что операнд WS_MAXIMIZEBOX никак не влияет на конечный результат.
И это логично потому как константа WS_OVERLAPPEDWINDOW уже включает WS_MAXIMIZEBOX
WS_OVERLAPPEDWINDOW (
WS_OVERLAPPED |
WS_CAPTION |
WS_SYSMENU |
WS_THICKFRAME |
WS_MINIMIZEBOX |
WS_MAXIMIZEBOX
)
Все эти и многие другие константы определены в заголовочном файле WinUser.h и там можно посмотреть на их значения в шестнадцатеричном представлении.
Вначале будет выполнена операция исключающее битовое ИЛИ, которая имеет более высокий приоритет.
000 0010 0000 0000 0000 0000 0000 0000 // двоичное представление WS_CLIPCHILDREN
^
000 0000 0000 0001 0000 0000 0000 0000 // двоичное представление WS_MAXIMIZEBOX
=
000 0010 0000 0001 0000 0000 0000 0000 // результат операции в двоичном представлении
Затем первое битовое ИЛИ.. .
000 0000 1100 1111 0000 0000 0000 0000 // двоичное представление WS_OVERLAPPEDWINDOW
|
000 0100 0000 0000 0000 0000 0000 0000 // двоичное представление WS_CLIPSIBLINGS
=
000 0100 1100 1111 0000 0000 0000 0000 // результат операции в двоичном представлении
И наконец второе битовое ИЛИ.. .
000 0100 1100 1111 0000 0000 0000 0000
|
000 0010 0000 0001 0000 0000 0000 0000
=
000 0110 1100 1111 0000 0000 0000 0000
Можно заметить, что операнд WS_MAXIMIZEBOX никак не влияет на конечный результат.
И это логично потому как константа WS_OVERLAPPEDWINDOW уже включает WS_MAXIMIZEBOX
WS_OVERLAPPEDWINDOW (
WS_OVERLAPPED |
WS_CAPTION |
WS_SYSMENU |
WS_THICKFRAME |
WS_MINIMIZEBOX |
WS_MAXIMIZEBOX
)
Все эти и многие другие константы определены в заголовочном файле WinUser.h и там можно посмотреть на их значения в шестнадцатеричном представлении.
http://msdn.microsoft.com/en-us/library/ms632600(v=vs.85).aspx
Похожие вопросы
- Вопрос по языку программирования C# (СиШарп) (очень простой вопрос)
- Стоит ли изучать язык программирования C++ ?И какое преимущество этого языка? Где он мне пригодится ?
- Основные различия языка программирования C# от С++.
- Добрый день, у меня вопросы о языке программирования C.
- Язык программирования C.
- Язык программирования C#
- Сложно ли будет изучить язык программирования C#?
- Я учусь в 5 классе и хочу научится языку программирования C++.
- Функции в языке программирования C.
- Программирование, C++, курсовая работа по C++ на тему список студентов