Simptomai
Rekursinis pasirinkus eksportuoti USER32 langas tvarkytuvo funkcijoms. DLL gali grąžinti atlikti pageidaujamos operacijos ir nustatyti klaidos kodas. Taip paprastai nutinka su įdėtųjų lango hierarchija. Tarp simptomų gali kilti:
-
Su įdėtųjų lango hierarchija nepavyksta tinkamai keisti dydį vaikas windows, kai lango rėmas dydis. "Windows" perkelti ir (arba) jos telefonu MoveWindow, SetWindowPos arba DeferWindowPos.
-
Lango pranešimai nebus taikomi aukštesnio lygio windows arba vaikas windows taip, kaip tikėtasi. DefWindowProc gali sėkmingai platinti laiškus į pagrindinio lango arba vaikas windows lango gauti pranešimą.
-
Lango pranešimai siunčiami iš telefono išsiunčia langą SendMessageTimeout arba SendMessageCallback nebus pateiktos nurodyta langą.
Be to, programų, kurios kitu atveju paprastai taip pat gali kilti į požymius, jei WH_CALLWNDPROC ar WH_CALLWNDPROCRET lango kurių yra nustatytas pokalbių programos, savo "windows". Ryšių langas gali nustatyti konkretų pokalbį arba visas UI temas SetWindowsHookEx funkciją.
Priežastis
Taip yra dėl to "Windows" negalėjo didėja branduolio rietuvės telefono pokalbį, kad būtų galima atlikti pageidaujamos operacijos. Dėl papildomos branduolio rietuvės apdorojimo reikia, kad x64 "Windows" aplinkoje, branduolio dėklas gali suvartoti greičiau nei x x86 "Windows" aplinkoje, kai padaryti rekursinis lango tvarkytuvo funkcijoms eksportuoti USER32. DLL. Nors šiame straipsnyje aprašytą požymiai yra labiau tikėtina, x64 Windows platformose, galima rekursinis skambinti į vartoja su gijos branduolio rietuvės, x86 Windows platformose.
Sprendimas
Toliau nurodytus sprendimus būtų galima išspręsti šią problemą
-
Keisti vaiko windows dirbant WM_WINDOWPOSCHANGED lango pranešimai, vietoj perdavimas DefWindowProc pranešimą.
-
Asinchroniškai keisti vaiko windows, kai pagrindinio lango dydis vietoj dydį vaikas windows apdorojant, WM_WINDOWPOSCHANGED arba WM_SIZE lango pranešimą.
-
Pertvarkyti programos vartotojo sąsajos sumažinti įdėtųjų lango gylio.
Daugiau informacijos
Win32 posistemės dalis atliktų branduolio režimo įrenginių tvarkyklės (WIN32K. SYS). Eksportuoti USER32 funkcijų iškvietimus. Į WIN32K paskambins DLL pakeisti langą, įskaitant jo dydį ir vietą, būseną. SYS atlikti pageidaujamos operacijos. Funkcijos, kurias keisti lango paprastai dėl lango pranešimai siunčiami į langą modifikuojamas, kur WIN32K. SYS leidžia vartotojo režimo paaiškinimo paskambinti langą modifikuojamas lango tvarka. Pvz., WIN32K. SYS išsiunčia langą WM_WINDOWPOSCHANGING lango pranešimą ir WM_WINDOWPOSCHANGED lango pranešimą kai dydžio ir padėties lango arba modifikuojami SetWindowPos funkciją. DefWindowProc išsiunčia nurodyto lango WM_SIZE pranešimas, kai WM_WINDOWPOSCHANGED pranešimą ir pasikeitė lango dydį. Programos paprastai pakeisti vaiko windows, kai pirminis langas gauna WM_WINDOWPOSCHANGED arba WM_SIZE lango pranešimą, kuris sukelia rekursinis skambinti į WIN32K. SYS įdėtųjų lango hierarchijų. Programų, kurios kitaip paprastai taip pat gali kilti šiame straipsnyje aprašoma, kai WH_CALLWNDPROC ar WH_CALLWNDPROCRET kurių temas proceso požymiai. Taip yra dėl papildomos branduolio rietuvės vietos, kai vartojamos WIN32K. SYS tvarko Tel. kablys procedūras. Skambinimas išsiunčia siųsti žinutę lango priklauso telefono pokalbio langą paprastai paskambins lango procedūra gauti pranešimą nereikia skambinti į WIN32K lango. SYS. Tačiau išsiunčia paskambins į WIN32K. Jei yra WH_CALLWNDPROC gaudyklės SYS arba WH_CALLWNDPROCRET kabliukų rinkinys telefono pokalbį, kaip WIN32K. SYS valdo gaudyklės ir rankenėles Tel. kablys procedūras. Kaip minėta, DefWindowProc išsiunčia nurodyto lango WM_SIZE pranešimas, kai WM_WINDOWPOSCHANGED pranešimas ir pasikeitė lango dydį. WH_CALLWNDPROC kablys arba su WH_CALLWNDPROCRET dėl išsiunčia skambučio DefWindowProc leidžia pereiti į branduolio režimo norite paskambinti kablys procedūras. Dydį vaikas windows, kai tvarkymo WM_WINDOWPOSCHANGED lango pranešimai, o ne WM_SIZE lango pranešimai sumažins branduolio rietuvės naudojimo nesinaudodami išsiunčia perėjimą į branduolio režimo tvarka skambinti kablys procedūras. Programų kūrėjams, "Windows" formų programos, kurie susiduria su šiuo klausimu turėtumėte kreiptis į žinių bazės straipsnyje 953934, jei norite gauti papildomos informacijos.