Ako zobraziť okno bez focusu

Toto je rýchly blog, aby som to nemusel googliť zase niekoľko hodín.

Jedna možnosť je overide vlastnosti ShowWithoutActivation. Stačí, aby táto vlastnosť vrátila true a okno nebude mať focus pri otvorení. Problém je, že toto nefunguje pri TopMost formách. Avšak našiel som pekný trik. Overide vlastnosti CreateParams. Táto vlastnosť vytvorí argumenty, ktoré sa pošlú funkcii CreateWindowEx. Toto ponúka celkom dosť možností. A hlavne nastaviť štýl okna na WS_EX_NOACTIVATE. Tento štýl znamená, že okno nebude mať nikdy focus, ani keď užívateľ na neho klikne. Tento štýl sa používa na floating toolbars a podobne okná, keď užívateľ klikne na gombík na toolbare, ale focus má stále hlavné okno.

Ja som toto použil pri vlastnej notifikácii nad ikonou v system tray. A tu je kód.

protected override CreateParams CreateParams

{

    get

    {

        CreateParams result = base.CreateParams;

        result.ExStyle |= WinApi.WS_EX_NOACTIVATE;

        return result;

    }

}

Ešte pre úplnosť, tak WS_EX_NOACTIVE = 0x08000000. Toto je možné zistiť na stránke www.pinvoke.net. Mimochodom veľmi dobrá stránka ak potrebujete volať WinAPI z .NET.

Zaradené do: ,

Komentáre

Bez komentárov

Prihlásiť | Registrovať | Pomoc