|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
10.10.2016, 17:56
|
#1
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Как разложить Hex значение на константы
Чет не знаю, как задать вопрос в поисковик... Допустим, мы получаем сумму стилей, примененных к окну = 0х16000000. Как это число разложить и узнать, какие константы суммируются? Как этот алгоритм называется?
Global Const $WS_TILED = 0
Global Const $WS_OVERLAPPED = 0
Global Const $WS_MAXIMIZEBOX = 0x00010000
Global Const $WS_MINIMIZEBOX = 0x00020000
Global Const $WS_TABSTOP = 0x00010000
Global Const $WS_GROUP = 0x00020000
Global Const $WS_SIZEBOX = 0x00040000
Global Const $WS_THICKFRAME = 0x00040000
Global Const $WS_SYSMENU = 0x00080000
Global Const $WS_HSCROLL = 0x00100000
Global Const $WS_VSCROLL = 0x00200000
Global Const $WS_DLGFRAME = 0x00400000
Global Const $WS_BORDER = 0x00800000
Global Const $WS_CAPTION = 0x00C00000
Global Const $WS_OVERLAPPEDWINDOW = 0x00CF0000
Global Const $WS_TILEDWINDOW = 0x00CF0000
Global Const $WS_MAXIMIZE = 0x01000000
Global Const $WS_CLIPCHILDREN = 0x02000000
Global Const $WS_CLIPSIBLINGS = 0x04000000
Global Const $WS_DISABLED = 0x08000000
Global Const $WS_VISIBLE = 0x10000000
Global Const $WS_MINIMIZE = 0x20000000
Global Const $WS_CHILD = 0x40000000
Global Const $WS_POPUP = 0x80000000
Global Const $WS_POPUPWINDOW = 0x80880000
UPD: Доперло, что можно каждую константу перемножать побитово, например:
If 0х16000000 И $WS_VISIBLE Then константа $WS_VISIBLE используется
и т.д. с каждым стилем, но это какое-то топорное решение или так и должно быть?
|
(Offline)
|
|
10.10.2016, 18:05
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Как разложить Hex значение на константы
Биты?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.10.2016, 18:10
|
#3
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Как разложить Hex значение на константы
Сообщение от ABTOMAT
Биты?
|
Вот так?
UPD: Доперло, что можно каждую константу перемножать побитово, например:
If 0х16000000 И $WS_VISIBLE Then константа $WS_VISIBLE используется
и т.д. с каждым стилем, но это какое-то топорное решение или так и должно быть?
Можешь какой-нить пример подкинуть на любом ЯП, разберусь..
|
(Offline)
|
|
10.10.2016, 18:33
|
#4
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Как разложить Hex значение на константы
Эм, я думаю обратного точного решения нет. Возможно несколько комбинаций.
Константы на деле что-то типо такого:
Это не сумма, а побитовое ИЛИ над ними применяется. Что правда лучше не делает, если пересекающиеся значения существуют (у тебя такие есть)
И для простого примера, где:
a = 0b0001
b = 0b0011
c = 0b0010
X:0b011 может разложиться как :
А у тебя еще и коллизии, как ты узнаешь верное значение?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.10.2016, 18:40
|
#5
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Как разложить Hex значение на константы
А у тебя еще и коллизии, как ты узнаешь верное значение
|
В смысле как я получаю это значение? Через Win_API: GetWindowLongPtr($hWnd, $GWL_STYLE).
|
(Offline)
|
|
10.10.2016, 18:40
|
#6
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Как разложить Hex значение на константы
Global Const $WS_MAXIMIZEBOX = 0x00010000
Global Const $WS_MINIMIZEBOX = 0x00020000
Global Const $WS_TABSTOP = 0x00010000
Global Const $WS_GROUP = 0x00020000
Коллизия.
Global Const $WS_POPUP = 0x80000000
Global Const $WS_POPUPWINDOW = 0x80880000
Global Const $WS_OVERLAPPEDWINDOW = 0x00CF0000
Бинарная коллизия:
0000 0000 1000 0000 0000 0000 0000 0000 0000 0000
0000 0000 1000 0000 1000 1000 0000 0000 0000 0000
0000 0000 0000 0000 1100 1111 0000 0000 0000 0000
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.10.2016, 18:43
|
#7
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Как разложить Hex значение на константы
Сообщение от RegIon
Global Const $WS_MAXIMIZEBOX = 0x00010000
Global Const $WS_MINIMIZEBOX = 0x00020000
Global Const $WS_TABSTOP = 0x00010000
Global Const $WS_GROUP = 0x00020000
|
А что это значит?
|
(Offline)
|
|
10.10.2016, 18:48
|
#8
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Как разложить Hex значение на константы
$WS_MINIMIZEBOX у тебя или $WS_GROUP ? Оба сылаются на один битовый флаг.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.10.2016, 18:50
|
#9
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Как разложить Hex значение на константы
Сообщение от RegIon
$WS_MINIMIZEBOX у тебя или $WS_GROUP ? Оба сылаются на один битовый флаг.
|
Аааа, блин точно ведь...невнимательно посмотрел. Ну $WS_TABSTOP и$WS_GROUP можно в приципе выкинуть.
Черт возьми, у меня похоже еще константы старые, на msdn другие значения... То что у меня похоже для 32-битных систем.
Ну это не суть, главное научиться раскладывать
|
(Offline)
|
|
10.10.2016, 19:16
|
#10
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Как разложить Hex значение на константы
В общем, мне надо что сделать: в windows 10 по умолчанию шапка окна у приложений меняет цвет: у активного приложения серая, у неактивного белая. Надо сделать так, чтобы только у одного приложения цвет не менялся. Можно, конечно, свою рамку нарисовать, но желательно оставить стандартную. У меня есть приложение самсунговское, где цвет рамки всегда серый и рамка у него стандартная, вот узнать бы какие стили они намешали, чтобы так получилось. Ну и в целом надо с этими стилями разобраться, как убрать рамку, элементы меню, скрыть из панели задач - с каждым из этого по отдельности я уже разобрался, при комбинации приложение почему-то теряет фокус. Может из-за неправильных констант, кстати. Спасибо за наводку. PS. Надо клиентскую область MS Word встроить в свое приложение без ActiveX.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:16.
|