c ++ - hvordan man projekterer mit vindue som aktivt vindue på forgrunden

Indlæg af Hanne Mølgaard Plasc

Problem



Der blev åbnet nogle vinduer, og fra min proces vil jeg starte et nyt vindue (høj prioritet), hvor brugeren skal indtaste referencer. Og jeg ønsker at sætte dette legitimationsvindue til forgrunden, hvilket igen kan give brugeren god erfaring, da han ikke behøver manuelt at vælge legitimationsvinduet. Og dette er en gang lancering, absolut ikke irriterende, men obligatorisk for brugeren at indtaste creds.


Hvad er den bedste måde at opnå dette på? Jeg tror ikke, at simulering af museklik er en god ide. Er der en måde at sende msg til resten af ​​Windows for at tabe deres fokus? Så at når jeg starter mit vindue, kommer det til at foregå.

Bedste reference


Dette virker for mig uden at skulle bruge SetWindowPos for at gøre vinduet 'altid på toppen':


HWND foreGround = GetForegroundWindow();
if (foreGround != m\_hWnd)
{
    if (!::SetForegroundWindow(m\_hWnd))
    {
        if (!foreGround)
        {
            foreGround = FindWindow(\_T("Shell\_TrayWnd"), NULL);
        }

        DWORD idForeground = GetWindowThreadProcessId(foreGround, NULL);
        DWORD idTarget = GetWindowThreadProcessId(m\_hWnd, NULL);

        AttachThreadInput(idForeground, idTarget, TRUE);

        ::SetForegroundWindow(m\_hWnd);

        AttachThreadInput(idForeground, idTarget, FALSE);
    }

    BringWindowToTop();
}


Jeg bruger dette i en chat-applikation, så en ny chat besked kan stjæle fokus (valgfrit, som nogle brugere ikke synes om dette.)

Andre referencer 1


Du skal ringe til SetWindowPos med wndTopMost parameteren for at indstille dit vindue øverst i alle andre vinduer. [7]

Andre referencer 2


Dette brugergrænseflade (vindue til indtastning af obligatoriske værdier) er almindeligvis kendt som en modal dialog . I MFC ser du efter CDialog::DoModal. Dvs. du henter dit referenceramme fra CDialog og derefter ring til den arvede DoModal metode.


En modal dialog blokkerer brugerindgang i andre vinduer i din app, og flyttes derfor automatisk før de blokerede vinduer.