okno informacyjne MessageBox

1

MessageBox(NULL, "Witamy!", "Moja pierwsza aplikacja systemu Windows", 0);

jak tutaj ustawić rozmiar napisu , kolor, oraz tło jesli mozna

tutaj cos jest ale nie moge sie połapać https://cpp0x.pl/kursy/Kurs-WinAPI-C++/Kontrolki/Kolory-kontrolek/212

gdzie jest inicjacja g_hBrush?

0

Font chyba potrzebujesz utworzyć.

HFONT moja_trzcionka;

moja_trzcionka = CreateFont(18 , 0 , 0 , 0 , FW_NORMAL , FALSE , FALSE , FALSE , DEFAULT_CHARSET ,
 OUT_DEFAULT_PRECIS , CLIP_DEFAULT_PRECIS , DEFAULT_QUALITY , DEFAULT_PITCH | FF_SWISS , L"Arial");

SendMessage( mHwnd, WM_SETFONT,( WPARAM ) moja_trzcionka, 0 );   //jeśli mHwnd to Twoje okno


Coś w tym stylu myślę.

0

jest błąd jeden:
error C2664: 'CreateFontA' : cannot convert parameter 14 from 'unsigned short [6]' to 'const char *'

0
wilkwielki napisał(a):

jest błąd jeden:
error C2664: 'CreateFontA' : cannot convert parameter 14 from 'unsigned short [6]' to 'const char *'

Masz L"Ariel" - a to jest funkcja A - czyli chyba dla tych 8 bajtowych. "CreateFontA"

btw.

W standardowym MessageBox w WinAPI nie ma bezpośrednich opcji do ustawiania koloru tła lub czcionki. Jednak można to obejść, tworząc własne okno dialogowe z odpowiednimi ustawieniami kolorów.

Jeśli koniecznie chcesz zmodyfikować wygląd standardowego MessageBox, możesz skorzystać z hooka (procedura podczepiona do okna). Oto ogólny zarys:


Rozwiązanie z użyciem hooka

Hook pozwala na przechwycenie komunikatów wysyłanych do okna MessageBox i umożliwia modyfikację jego wyglądu.

  1. Zarejestruj hook z funkcją SetWindowsHookEx.
  2. Przeanalizuj komunikaty okna i zmodyfikuj tło oraz czcionkę.

Przykład kodu z hookiem

#include <windows.h>

HHOOK hHook; // Hook globalny
HBRUSH hBrush = CreateSolidBrush(RGB(255, 255, 0)); // Żółte tło
HFONT hFont;

LRESULT CALLBACK MessageBoxHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode == HCBT_ACTIVATE) {
        HWND hwnd = (HWND)wParam;

        // Ustawienia czcionki
        hFont = CreateFont(
            20, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
            OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
            DEFAULT_PITCH | FF_SWISS, "Arial");

        // Ustawienia koloru tła
        SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)hBrush);

        // Ustawienia czcionki
        SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, TRUE);

        UnhookWindowsHookEx(hHook); // Odczepienie hooka
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int CustomMessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {
    hHook = SetWindowsHookEx(WH_CBT, MessageBoxHookProc, NULL, GetCurrentThreadId());
    return MessageBox(hWnd, lpText, lpCaption, uType);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    CustomMessageBox(NULL, "To jest niestandardowy MessageBox!", "Przykład", MB_OK);
    DeleteObject(hBrush);
    DeleteObject(hFont);
    return 0;
}

Wyjaśnienie kodu

  1. Hook WH_CBT:

    • Hook przechwytuje komunikaty związane z tworzeniem i aktywowaniem okien.
    • Gdy MessageBox zostaje utworzony, modyfikujemy jego styl.
  2. Kolor tła:

    • Za pomocą SetClassLongPtr zmieniamy uchwyt pędzla tła (HBRUSH).
  3. Czcionka:

    • Tworzymy nową czcionkę (CreateFont) i ustawiamy ją w oknie (SendMessage z WM_SETFONT).
  4. Odczepienie hooka:

    • Po ustawieniu właściwości hook zostaje odczepiony, aby uniknąć dalszych przechwyceń.

Uwagi

  • Modyfikacje te działają tylko w ramach sesji aplikacji (nie globalnie).
  • Aby uzyskać pełną kontrolę nad wyglądem, lepiej stworzyć własne okno dialogowe za pomocą funkcji CreateWindowEx lub DialogBox.

Daj znać, jeśli potrzebujesz pomocy z tym bardziej zaawansowanym podejściem! 😊

0

i nic zero reakcji u mnie, moze dlatego ze mam starego visuala 6.0, sam nie wiem

0
wilkwielki napisał(a):

i nic zero reakcji u mnie, moze dlatego ze mam starego visuala 6.0, sam nie wiem

Po co Ci visual jak masz g++ i gcc ?

0
wilkwielki napisał(a):

i nic zero reakcji u mnie, moze dlatego ze mam starego visuala 6.0, sam nie wiem

nie, nie dlatego, ale czekaj - masz na myśli visual c++ 6.0 z 1998 roku? Czemu?

1

@wilkwielki:

  1. zacznij od pokazania kodu
  2. zainstaluj sobie jakis lepszy kompilator a nie zabytek
0

lubie visuala 6.0 od dziecka uczyłem sie na nim, ale bede mial za jakis czas specjalny servis pack pod visuala i powinno wzsystko dzialac dobrze

0

Na pierwszy rzut oka myślałem, że się nie da, ale z kodu AI, tak sobie myślę, że cały ten messageBox musi być zbudowany od strony użytkownika w libce, chodź nigdy nie patrzyłem jak w windowsie implementują podstawowe komponenty, ciekawe.

Anyway będę potem na windowsie to sobie zobaczę pod debuggerem jak to jest zaimplementowane.

0

zrobiłem co trzeba tutaj:
https://cpp-lang.net/pl/tools/standalone/compilers/setup-gcc-windows/

mógł by ktos mi napisać plik z rozszerzeniem bat dodający wpis zmiennej PATH w pliku bat aby mozna było na przyszłość robić to w tępie ekspresowym

0

screenshot-20241118065914.png
to moze dlatego ze nie skonfigurowałem zmiennej PATH?

0

dodałem wpis i wszystko hula i działa 😀

0

są błędy w kodzie których nie ma u mnie w visualu np pyta o deklaracje zmiennej gdzie jest predzej zadeklrawona

screenshot-20241118071726.png

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.