Windows Modal Dialog Focus Problem

9 отговора 842 прегледа
#1

Windows Modal Dialog Focus Problem

При стартиран модален диалог, потребителят губи фокуса например с Алт + Таб. В последствие фокусът бива върнат, но се показва само модалният диалог, а главният прозорец на приложението не се показва. Някакви идеи, защо се получава това?

Редактирано от expeler на

Отговор
в отговор на expeler #2

така е по идея

докато имаш пуснат модален диалог, приложението ти не може да получава съобщения. а за да се покаже прозореца му все пак трябва да обработи ON_PAINT, нали? ако искаш да ти се появява, то ползвай немодален диалог.

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

Re: така е по идея

Мда, ама не точно - PAINT event-а се обработва от прозореца, към който е адресиран без значение дали процеса обработващ съобщенията за въпросният прозорец се е забил с модален диалог. Windows пренасочва към модалния диалог само INPUT съобщенията - от клавиатурата и мишката.

Отговор
в отговор на Barracuda #4

как пък не

първо - модален диалог може да се пусне САМО от нишката на съобщенията на главния прозорец. много ясно че щом нишката за съобщения ти е спряла върху нещо си, то никакви съобщения не можеш да получаваш. как ще ги получиш, по торсионната поща ли? второ, не мисля че някакви събщения се пренасочват - просто модалния диалог си пуска собствена помпа за съобщения. естествено е когато фокуса е върху него, да хваща клавиатурата. модалния диалог не е някакъв особен примитив, той е просто прозорец. всеки прозорец може да го накараш да бачка като модален диалог.

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

Re: Windows Modal Dialog Focus Problem

Провери дали hWndParent параметъра който използваш, когато показваш модалния диалог (примерно с DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc)) наистина е валиден хендъл на главният ти прозорец, защото ако не е така (примерно използваш NULL) Windows-а няма автоматично да смени Z-order-а на главният ти прозорец така че и той да се вижда в/у другите прозорци, когато отново активираш модалният си диалог.

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

Re: така е по идея

ти кога за последно си виждал модален диалог?

Сигнатура!
Отговор
в отговор на Questor #7

Re: така е по идея

знам ли. що?

Отговор
в отговор на Questor #8

баси...прав си

безкрайно съм учуден, обаче сега го пробвах и наистина се показва целия джам. значи помпата за съобщения, която модалния диалог пуска, разпраща и до главния джам.
как не съм забелязал до сега. обаче и моите спомени са като на този който отваря темата - като върна фокуса, появява се само диалога. а сега го пробвах не е така, появява се целия процорец, и се извиква OnPaint.

Отговор
в отговор на zahical #9

Това е просто,но решава и други "модални" проблеми

Като например ако от попъп на трей иконка се създават ралични (или еднакви:) модални прозорци.

Отговор
в отговор на expeler #10

Re: Windows Modal Dialog Focus Problem

Благодаря за отговорите, наистина нормалните модални диалози не се държат така както описах проблема си. Днес цяла сутрин го дебъгвах това, проблема беше в един събкласнат комбо бокс.

I wanna read interesting postingz
Отговор