Okna dialogowe Message Box

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4906 razy

Funkcja MessageBox

Okno dialogowe typu Message Box (okno wiadomości) to jedno z najczęściej wykorzystywanych okien w programach okienkowych wszelakiej maści. Wywołaniem takiego okna dialogowego zajmuje się funkcja, którą już wcześniej wielokrotnie wykorzystywałem we wcześniejszych projektach, czyli MessageBox, spójrzmy łaskawym okiem co ta funkcja zwraca (tak, bo ona coś zwraca) i co przyjmuje jako parametry:

HRESULT MessageBox( HWND hWnd, // uchwyt do okna rodzica LPCWSTR lpszText, // Text wyświetlany w oknie dialogowym LPCWSTR lpszTitle, // Text belki tytułowej UINT fuStyle, // Flagi określające: jakie przyciski okno będzie zawierało (a tym samym jaką wartość może zwrócić funkcja MessageBox po zamknięciu okna dialogowego) oraz możliwość określenia ikonki wyświetlanej przy tekście )

Parametr fuStyle

Pierwsze trzy parametry zostały dość dokładnie omówione w komentarzu nagłówka funkcji, natomiast ostatni parametr jest dużo bardziej ciekawy, ponieważ zawiera on flagi sterujące zawartością okna dialogowego. Oto przykład wartości tego parametru, które mogą zostać użyte w celu wyświetlenia różnej kombinacji przycisków standardowych w oknie wiadomości:

Poza powyżej wymienionymi flagami można jeszcze do okienka dodać jedną z standardowych ikonek systemowych, które często są widoczne np. przy wyświetlaniu komunikatów błędów jest znak trójkątny z wykrzyknikiem. Dostępne są następujące typy ikonek:

Istnieje też możliwość ustawienia, który z przycisków na starcie będzie miał fokus - czuli będzie przetwarzał komunikaty z klawiatury. Jest to ważne, ponieważ często ułatwia to użytkownikowi wybranie najczęściej wykorzystywanej opcji np. OK poprzez zwykłe kliknięcie spacji czy też entera. Oto dostępne flagi:

Określenie zachowanie okna dialogowego względem innych okien (modalność):

Zwracana wartość

Jak już wcześniej wspominałem funkcja MessageBox coś zwraca, to coś to identyfikator klikniętego przycisku, który może przyjmować jedną z poniższych wartości:

Zastosowanie funkcji MessageBox w projekcie myNotepad

Co prawda w programie myNotepad już była używana funkcja MessageBox, lecz tym razem zastosowana zostanie ona do zapytania użytkownika, czy zapisać bieżący dokument do pliku. W kodzie programu myNotepad w komunikacie WM_COMMAND dla identyfikatora pozycji menu ID_PLIK_OTWOZ należy dodać podmienić odpowiednio taki oto kod:

case ID_PLIK_OTWORZ: // id dla menu a nie akceleratora { if(wcslen(FileName)){ // jeżeli jest już jakaś ścieżka do pliku to if(IDYES == MessageBox(hWnd, L"Czy zapisać bieżący dokument?",L"Zapytanie",MB_YESNO|MB_ICONQUESTION)){// wyświetl okno wiadomości z zapytaniem, czy zapisać bierzący dokument SendMessage(hWnd, WM_COMMAND, ID_PLIK_ZAPISZ, 0); // wysyłam komunikat imitujący kliknięcie pozycji w menu zapisz } }

W tym samym komunikacie WM_COMMAND należy podmienić kod związany z ID_PLIK_ZAPISZ dla menu:

case ID_PLIK_ZAPISZ: // id dla menu a nie akceleratora { if(wcslen(FileName) || GetSaveFileName(&ofn)){ // jeżeli ścieżka do pliku już istnieje lub wyświetlenie okna zapisu się powiedzie i użytkownik wybierze plik do zapisu to
Propozycje książek
tytuł: C++  Zbiór zadań z rozwiązaniami autor: Tomasz Jaśniewski

Tytuł:

C++ Zbiór zadań z rozwiązaniami

Autor:

Tomasz Jaśniewski

tytuł: Mikrokontrolery dla hobbystów. Projekty DIY w języku C i C++ autor: Miguel Angel Garcia-Ruiz, Pedro Cesar Santana Mancilla

Tytuł:

Mikrokontrolery dla hobbystów. Projekty DIY w języku C i C++

Autor:

Miguel Angel Garcia-Ruiz, Pedro Cesar Santana Mancilla

tytuł: Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów autor: Adrian Ostrowski, Piotr Gaczkowski

Tytuł:

Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów

Autor:

Adrian Ostrowski, Piotr Gaczkowski

tytuł: Wprowadzenie do C++ autor: Michał Matlak

Tytuł:

Wprowadzenie do C++

Autor:

Michał Matlak

tytuł: Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet) autor: Jerzy Grębosz

Tytuł:

Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)

Autor:

Jerzy Grębosz

tytuł: Programowanie wieloplatformowe z C++ i wxWidgets 3 autor: Bartosz W. Warzocha

Tytuł:

Programowanie wieloplatformowe z C++ i wxWidgets 3

Autor:

Bartosz W. Warzocha

tytuł: Język C++ i przetwarzanie współbieżne w akcji. Wydanie II autor: Anthony Williams

Tytuł:

Język C++ i przetwarzanie współbieżne w akcji. Wydanie II

Autor:

Anthony Williams

tytuł: C++ dla bystrzaków. Wydanie VII autor: Stephen R. Davis

Tytuł:

C++ dla bystrzaków. Wydanie VII

Autor:

Stephen R. Davis

tytuł: Tablice informatyczne. Podstawy C++ autor: Radosław Sokół

Tytuł:

Tablice informatyczne. Podstawy C++

Autor:

Radosław Sokół

tytuł: Opus magnum C++11. Programowanie w języku C++ (komplet) autor: Jerzy Grębosz

Tytuł:

Opus magnum C++11. Programowanie w języku C++ (komplet)

Autor:

Jerzy Grębosz

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona