|
Тема
|
Интересно поведение
|
|
Автор |
3мeй (Гадина) |
Публикувано | 19.07.07 17:45 |
|
Радиобутони в диалогов прозорец-модален.
Когато се кликне в единия се появява друг модален прозорец.Обаче когато свършим с горния,където и да кликнем в диалога - все едно че кликаме върху последния радиобутон- все едно е взел мишката(capture).Дали когато се появи горния прозорец,прекъсва съобщенията на долния и с това последното състояние някак си да се запомня.Горния прозорец не е притежаван от долния.
Някой да се е сблъсквал с това.Каква може да е причината бутона да вземе входа от мишката?
C++/Win
| |
Тема
|
Re: Интересно поведение
[re: 3мeй]
|
|
Автор | Battle (Нерегистриран) |
Публикувано | 19.07.07 22:33 |
|
C++/Win нищо не ми говори. За коя платформа става въпрос? Почти сигурно е че проблема не в операционната система (нищо че е виновс)
| |
Тема
|
Re: Интересно поведение
[re: 3мeй]
|
|
Автор | Гoшko Пpaceтo (Нерегистриран) |
Публикувано | 20.07.07 11:21 |
|
Ако вземеш и разкараш грозно-селския-пуберски-тип-неизживяно-детсво-модел-искам-да-съм-велик-ама-не-ме-забелязват аватар с глупавия малоумно натрапчив дракон (бахти замаях се) може и да получиш отговор.
Според мен обаче, проблема ти е във Виндовса. Аз нямам такъв проблем, щото съм с Линуз Дебилиян.
| |
|
В отговор на:
Ако вземеш и разкараш грозно-селския-пуберски-тип-неизживяно-детсво-модел-искам-да-съм-велик-ама-не-ме-забелязват аватар с глупавия малоумно натрапчив дракон ...
Благодаря за мнението
| |
Тема
|
Проблема е, че
[re: 3мeй]
|
|
Автор |
koм (ентусиаст) |
Публикувано | 20.07.07 23:44 |
|
най-вероятно отваряш 2-рия диалогов прозорец при WM_LBUTTONDOWN - явно или неявно. Бутона никога не получава WM_LBUTTONUP и затова се държи по този начин.
Можеш да решиш въпроса по няколко начина:
1. Отвори 2-рия диалогов прозорец, когато получиш съобщение BM_CLICK.
2. При затваряне на 2-рия модален диалог - изпрати WM_LBUTTONUP на бутона.
По принцип - отварянето на диалог при натискане на радио-бутон - противоречи на всички препоръки за добър GUI - помисли дали не можеш да смениш дизайна.
Редактирано от koм на 21.07.07 00:41.
| |
Тема
|
Re: Проблема е, че
[re: koм]
|
|
Автор |
3мeй (Гадина) |
Публикувано | 21.07.07 07:55 |
|
Благодаря.
Прозореца се отваря в обработката на нотификацията BM_CLICKED за съответния бутон.Освен това възможността за други нотификации е филтрирана,като сравнявам кода на нотификацията.Дизайна е невъзможно да се смени.Става въпрос за мигриране на приложение,написано с XVT библиотека към WIN среда.Клиента си иска приложението така както си е било.
По принцип съм решил проблема като вземам координатите на курсора и сравнявам дали са в прозореца на бутона,и тогава решавам дали съобщението е за бутона,но ми е интересно защо се получава така.Лично аз го свързвам с това че втория прозорец като се отвори прекъсва потока съобщения към първия.След затваряне на втория при активиране на първия стават тези странности
| |
Тема
|
Re: Проблема е, че
[re: 3мeй]
|
|
Автор |
koм (ентусиаст) |
Публикувано | 21.07.07 09:47 |
|
Пусни си Spy+ и сложи филтър на всички съобщения, които получаваш за съответния бутон. За да няма много шум можеш да изключиш очевидните WM_MOUSEMOVE, WM_PAINT и т.н. Има нещо странно.
Аз бих направил 2 експеримента:
1. Натисни бутона с клавиш, а не с мишката.
2. Опитай да пратиш user съобщение към себе си и отвори втория прозорец в това съобщение.
Кода изглежда горе-долу така:
int iMessage = RegisterWindowsMessage("UM_MYMESSAGE");
....
PostMessage(hWnd, iMessage, NULL, NULL);
A номера с координатите какво ти помага? Нещо не ми стана ясно.
Редактирано от koм на 21.07.07 09:54.
| |
Тема
|
Сетих се още нещо
[re: koм]
|
|
Автор |
koм (ентусиаст) |
Публикувано | 21.07.07 09:50 |
|
Сигурен ли си, че задаваш правилно ParentWindow за 2-рия прозорец?
Ако хендела към родителския прозорец е NULL - може да получиш такива ефекти, защото активен ти става десктопа, а не долния прозорец.
| |
Тема
|
Re: Сетих се още нещо
[re: koм]
|
|
Автор |
3мeй (Гадина) |
Публикувано | 21.07.07 15:37 |
|
Притежателя е основния прозорец,не долния,не е десктопа.Почти съм сигурен къде е проблема.
Радиобутона праща нотификация,до родителя,който в резултат на това че създава нов прозорец губи фокуса.Когато процедурата се върне бутона не е вече активен и това е което го бърка.При активиране (чрез кликване)на долния прозорец бутона праща отново нотификацията(по време на извикване на родителската процедура се е променило активното му състояние ).
| |
Тема
|
Re: Интересно поведение
[re: 3мeй]
|
|
Автор | Гoшko Пpaceтo (Нерегистриран) |
Публикувано | 23.07.07 12:43 |
|
Змей, ти си змей.
Браво!
Направо се учудвам, че си махнал малоумния (прости ми квалификацията) аватар. Ти си спечели моето уважение. А и въпроса, който си задал е наистина смислен. Дерзай все така, пожелавам ти успехи и прости ме, ако съм бил малко груб - не обичам анимирани картинки.
| |
|
|
|
|