Пропадают пункты меню

Russian main discussion
  • Author
  • Message
Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Да.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Drugmix
В этой версии появляются ли надписи над пунктами, когда они исчезли?

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

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

При попытке открыть контекстное (или простое) меню с обоими версиями появляются ошибки (по нескольку раз, видимо, по количеству невидимых пунктов):

Code: Select all

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

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

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Ага! Похоже самый неуловимый жук пойман.

Для справки. В 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:

Post by Lenchik »

а для справки и в целях повышения общей грамотности, можно ли ещё потом способ решения такой задачки озвучить? ;)

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Lenchik
Зачем "потом"? Смотрите трансляцию "в прямом эфире".
Но не забывайте, что "корень познания горек".

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor
Ура!! наконец-то баг побеждён!)
спасибо :)
Image
Post Reply