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.
-
Zarejestruj hook z funkcją
SetWindowsHookEx
.
-
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
-
Hook WH_CBT:
- Hook przechwytuje komunikaty związane z tworzeniem i aktywowaniem okien.
- Gdy MessageBox zostaje utworzony, modyfikujemy jego styl.
-
Kolor tła:
- Za pomocą
SetClassLongPtr
zmieniamy uchwyt pędzla tła (HBRUSH).
-
Czcionka:
- Tworzymy nową czcionkę (
CreateFont
) i ustawiamy ją w oknie (SendMessage
z WM_SETFONT
).
-
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!