Къде е WM_STYLECHANGED?

7 отговора 179 прегледа
#1

Къде е WM_STYLECHANGED?

Защо тъпото МФЦ ми филтрира това съобщение? Как да го излъжа?

Я вышел им наперерез!
Отговор
в отговор на Resurrector #2

Re: Къде е WM_STYLECHANGED?

В MSDN-а ми се мярна едно CWnd::OnStyleChanged - то не върши ли работа?

My blade can cut through armor, and still cut a tomato
Отговор
в отговор на Lupi #3

Re: Къде е WM_STYLECHANGED?

Не. Същото е като OnCreate - никога не се вика, или поне е толкова дълбокомислена философия, че не съм в състояние да я проумея.

Я вышел им наперерез!
Отговор
в отговор на Resurrector #4

стават такива работи :)))

аз пък много се мъчих докато хвана keydown на диалог - бре не идва и не идва! а то се оказа че било защото фокуса е на бутон...
така, всички такива проблеми ги решавам кардинално по един начин - с пренаписване на виртуалната PreTranslateMessage която ти пъхва съобщенията ПРЕДИ да се обработят. ако ти е кеф може и да ги спреш, като не извикаш съответно на родителя :)))))

Отговор
в отговор на zaphod #5

Re: стават такива работи :)))

И там не идва. Баси, това чудо ше ме побърка.

Я вышел им наперерез!
Отговор
в отговор на Resurrector #6

вав!!!

това вече е за шаман работа...

Отговор
в отговор на Resurrector #7

Re: стават такива работи :)))

Току що пробвах и си получавам съвсем коректно съобщението и съответно извикване към OnStyleChanging.
Погледни добре дали не се опитваш да прихванеш съобщение, което изобщо не се праща към прозореца ти. Искам да кажа, че WM_STYLECHANGING се изпраща само когато се извика SetWindowLong със втори параметър
GWL_EXSTYLE или GWL_STYLE.
Ако извикаш SetWindowLong със някой от другите възможни параметри,
няма да ти бъде изпратено съобщението WM_STYLECHANGING.
Провери със "Spy++" дали ти се изпраща съобщението.

Поздрави от Бургас.
Отговор
в отговор на pbourgas #8

Re: стават такива работи :)))

Абе вече разбрах каква е работата. Трябваше да следя кога се появява и изчезва WS_VSCROLL, тоест кога се показва и скрива вертикалния скролбар. Истината е, че user32 е направен по такъв странен начин, че не пуска WM_STYLECHANGED, когато показва и скрива скролбаровете. Тъпа работа - при смяна на стила не се пуска съобщението, което нотифицира за смяната на стила.
Както не веднъж съм казвал - докато софтуерната индустрия е в американски ръце - тежко ни и горко.

Я вышел им наперерез!
Отговор