Page 6 of 6

Posted: Mon Dec 08, 2014 5:25 am
by Drugmix
Да.

Posted: Mon Dec 08, 2014 12:57 pm
by Instructor
Drugmix
В этой версии появляются ли надписи над пунктами, когда они исчезли?

Еще один тест (возврат FALSE из WM_DRAWITEM). Есть ли какие-либо изменения?

Posted: Mon Dec 08, 2014 5:17 pm
by Drugmix
При попытке открыть контекстное (или простое) меню с обоими версиями появляются ошибки (по нескольку раз, видимо, по количеству невидимых пунктов):

Code: Select all

---------------------------
Ошибка
---------------------------
Not found: lpdis->itemID=-1502338231

---------------------------
ОК   
---------------------------
itemID всегда разный, но всегда принимает значение негативного числа.
Возможно, меню и мелькает на долю секунды, но потом сразу же скрывается, поэтому ничего не видно.
itemIDы похожи на валидные: мне кажется, что если заменять их текущее значение на модуль от этого значения, то возможно всё исправится.

p.s.: ссылки, по-прежнему битые, правлю их вручную, вырезая из пути "\forum".

Posted: Mon Dec 08, 2014 7:28 pm
by Instructor
Ага! Похоже самый неуловимый жук пойман.

Для справки. В Windows API скрыт следущий подводный камень - элемент itemID структур DRAWITEMSTRUCT/MEASUREITEMSTRUCT имеет тип UINT, однако для подменю в ID используется дескриптор подменю (тип UINT_PTR). Когда приходит сообщение WM_DRAWITEM/WM_MEASUREITEM Windows x64 обрезает значение пополам, поэтому ID, который запомнил плагин, и тот, который даёт Windows, не совпадает. Проблема была плавающей, т.к. Windows на x64 обычно выдает дескрипторы не превышающие максимальное значение UINT, т.е. 0x00000000FFFFFFFF.

Тестовая

Posted: Mon Dec 08, 2014 9:40 pm
by Lenchik
а для справки и в целях повышения общей грамотности, можно ли ещё потом способ решения такой задачки озвучить? ;)

Posted: Mon Dec 08, 2014 10:39 pm
by opk44
Lenchik
Зачем "потом"? Смотрите трансляцию "в прямом эфире".
Но не забывайте, что "корень познания горек".

Posted: Tue Dec 09, 2014 3:19 pm
by Drugmix
Instructor
Ура!! наконец-то баг побеждён!)
спасибо :)
Image