Vytvorenie sú nemodálne dialógovým oknom

Môžete vytvoriť sú nemodálne dialógové okno pomocou funkcie CreateDialog uvedie identifikátor alebo názov prostriedku, šablóna dialógové okno pole a adresu dialógové okno pole postup. CreateDialog načíta šablónu, vytvorí dialógovým oknom a voliteľne zobrazí. Vaša aplikácia je zodpovedné za získavanie a dispečing používateľa vstupné správy postupu dialógové okno pole.

V nasledujúcom príklade, aplikácia zobrazí dialógové okno sú nemodálne — ak už nie je zobrazený — keď používateľ vyberie príkaz Prejsť na menu aplikácie. Okno obsahuje ovládací prvok upraviť, začiarkavacie políčka a tlačidlá OK a zrušiť. Dialógové okno pole Šablóna je prostriedok v uplatňovaní spustiteľný súbor a má identifikátor zdroja DLG_GOTO. Používateľ zadá číslo riadka upraviť kontroly a kontroly políčka určíte, že číslo riadka je relatívna vzhľadom na aktuálny riadok. Kontrola identifikátory sú ID_LINE, ID_ABSREL, IDOK a IDCANCEL.

Vyhlásenia v prvej časti príklade vytvoriť sú nemodálne dialógovým oknom. Tieto výkazy okno postupu pre hlavné okno aplikácie vytvoriť dialógového okna pri postupe okno dostane správu WM_COMMAND so IDM_GOTO príkaz identifikátor, ale len ak globálnej premennej hwndGoto už neobsahuje platným popisovačom. Druhá časť príklad je uplatňovanie hlavným posolstvom slučky. Loop zahŕňa funkciu IsDialogMessage na zabezpečenie toho, že môže používateľ použiť dialógové okno pole klávesnice rozhrania v tejto kolónke sú nemodálne dialógové okno. Tretia časť príklad je dialógové okno pole postup. Postup načíta obsah upraviť kontroly a začiarknutie políčka, keď používateľ vyberie tlačidlo OK. Postup ničí dialógového okna, keď používateľ vyberie tlačidlo Zrušiť.

HWND hwndGoto = NULL;  / / zvládnuť dialógové okno. 
    . 
    . 
 
    prípad WM_COMMAND: prepínanie (LOWORD(wParam)) {prípad IDM_GOTO: if (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd, GoToProc (DLGPROC)); 
                    ShowWindow (hwndGoto, SW_SHOW); 
                } 
                break; 
        } vrátiť 0 L 
 

V predchádzajúcej závierky CreateDialog nazýva iba vtedy, ak nemá hwndGoto nesmie obsahovať platný okno rukoväť. To zabezpečuje, že uplatňovanie nezobrazí dvoch dialógových okien v tom istom čase. Na podporu tejto metódy kontroly musí dialógové okno postup nastavená hwndGoto NULL keď zničí dialógového okna.

Správa slučku pre aplikáciu pozostáva z nasledujúcich výrokov:

zatiaľ čo (GetMessage (amp; msg, NULL NULL, NULL)) {Ak (!IsWindow(hwndGoto) || !IsDialogMessage (hwndGoto & msg)) {TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
} 
 

Loop skontroluje platnosť okno rukoväť pre dialógového okna a len zavolá funkciu IsDialogMessage Ak popisovač nie je platný. IsDialogMessage správa spracúva len ak patrí do dialógového okna. V opačnom prípade vráti hodnotu NEPRAVDA a slučky odosiela správu do okna vhodné.

Tieto výkazy definovať postup rámček dialógového okna:

int iLine;             / / dostane linky číslo BOOL fRelative;        / / dostane políčko stav volania BOOL GoToProc (HWND hwndDlg, UINT správy, WP&ARAM wParam, LPARAM lParam) {BOOL fError; 
 
    prepínač (správa) {prípad WM_INITDIALOG: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative); 
            Vráti hodnotu pravda; 
 
        prípad WM_COMMAND: prepínanie (LOWORD(wParam)) {prípad IDOK: fRelative = IsDlgButtonChecked (hwndDlg, ID_ABSREL); 
                    iLine = GetDlgItemInt (hwndDlg, ID_LINE, amp; fError, fRelative); 
                    Ak (fError) {okno s hlásením (hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK); 
                        SendDlgItemMessage (hwndDlg, ID_LINE, EM_SETSEL, 0, L-1); 
                    } iný / / Notify vlastník okno vykonávať / / out príkazu. 
 
                    Vráti hodnotu pravda; 
 
                prípad IDCANCEL: DestroyWindow(hwndDlg); 
                    hwndGoto = NULL; 
                    Vráti hodnotu pravda; 
            }} Vráti FALSE; 
} 
 

Vo vyhlásení predchádzajúceho postupu procesy správy WM_INITDIALOG a WM_COMMAND . Počas WM_INITDIALOG spracovanie postupu inicializuje začiarkavacie políčko premytím aktuálnu hodnotu globálnej premennej fRelative CheckDlgButton. Postup potom vráti hodnotu TRUE na priame systém nastaviť predvolený vstupný zameranie.

Počas spracovania WM_COMMAND postupu zavrie dialógové okno iba vtedy, ak používateľ vyberie tlačidlo Zrušiť – t. j. tlačidlo so IDCANCEL identifikátor. DestroyWindow na zavretie dialógového okna sú nemodálne musí volanie procedúr. Oznámenie, že postup tiež nastaví premennej hwndGoto NULL zaistiť riadne fungovanie ostatných výkazov, ktoré sú závislé na tejto premennej.

Ak používateľ vyberie tlačidlo OK, postup načíta aktuálny stav začiarkavacieho políčka a priradí sa premennej fRelative . Potom použije ukazovateľ na načítanie číslo riadka upraviť kontroly. GetDlgItemInt textu v ovládacom prvku upraviť precízny integer. Hodnota fRelative určuje, či funkciu interpretuje číslo ako podpísané alebo nepodpísané hodnotu. Ak upravujte text na ovládanie nie je platným číslom, GetDlgItemInt nastaví hodnotu premennej fError k nenulové. Postup kontroly táto hodnota umožňuje určiť, či chcete zobraziť chybové hlásenie alebo vykonať príkaz. Na chybu, dialógové okno pole postupu odošle hlásenie upraviť kontrolu réžii vyberte text v ovládacom prvku tak, aby užívateľ môžete ľahko nahradiť. Ak GetDlgItemInt nemôže vrátiť chybu, postup môžete vykonať požadovaný príkaz, sám alebo poslať správu do okna vlastník réžii vykonať príkaz.

Index