Пропадают пункты меню
- Author
- Message
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
При попытке открыть контекстное (или простое) меню с обоими версиями появляются ошибки (по нескольку раз, видимо, по количеству невидимых пунктов):
itemID всегда разный, но всегда принимает значение негативного числа.
Возможно, меню и мелькает на долю секунды, но потом сразу же скрывается, поэтому ничего не видно.
itemIDы похожи на валидные: мне кажется, что если заменять их текущее значение на модуль от этого значения, то возможно всё исправится.
p.s.: ссылки, по-прежнему битые, правлю их вручную, вырезая из пути "\forum".
Code: Select all
---------------------------
Ошибка
---------------------------
Not found: lpdis->itemID=-1502338231
---------------------------
ОК
---------------------------
Возможно, меню и мелькает на долю секунды, но потом сразу же скрывается, поэтому ничего не видно.
itemIDы похожи на валидные: мне кажется, что если заменять их текущее значение на модуль от этого значения, то возможно всё исправится.
p.s.: ссылки, по-прежнему битые, правлю их вручную, вырезая из пути "\forum".
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
Ага! Похоже самый неуловимый жук пойман.
Для справки. В Windows API скрыт следущий подводный камень - элемент itemID структур DRAWITEMSTRUCT/MEASUREITEMSTRUCT имеет тип UINT, однако для подменю в ID используется дескриптор подменю (тип UINT_PTR). Когда приходит сообщение WM_DRAWITEM/WM_MEASUREITEM Windows x64 обрезает значение пополам, поэтому ID, который запомнил плагин, и тот, который даёт Windows, не совпадает. Проблема была плавающей, т.к. Windows на x64 обычно выдает дескрипторы не превышающие максимальное значение UINT, т.е. 0x00000000FFFFFFFF.
Тестовая
Для справки. В Windows API скрыт следущий подводный камень - элемент itemID структур DRAWITEMSTRUCT/MEASUREITEMSTRUCT имеет тип UINT, однако для подменю в ID используется дескриптор подменю (тип UINT_PTR). Когда приходит сообщение WM_DRAWITEM/WM_MEASUREITEM Windows x64 обрезает значение пополам, поэтому ID, который запомнил плагин, и тот, который даёт Windows, не совпадает. Проблема была плавающей, т.к. Windows на x64 обычно выдает дескрипторы не превышающие максимальное значение UINT, т.е. 0x00000000FFFFFFFF.
Тестовая
-
Offline
- Posts: 366
- Joined: Mon Jan 10, 2011 5:28 pm
- Contact:
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
Lenchik
Зачем "потом"? Смотрите трансляцию "в прямом эфире".
Но не забывайте, что "корень познания горек".
Зачем "потом"? Смотрите трансляцию "в прямом эфире".
Но не забывайте, что "корень познания горек".