Fonts
-
Hallo,
ich möchte ein Ausgabetext in einem bestimmten Font dargestellt haben in weiss auf
schwarzen Hintergrund.Auf der Seite : http://www.winprog.net/tutorial/fonts.html
wird beschrieben wie Fonts geladen werden. Der Variable vom Typ HDC wird die
Funktion "GetDC(NULL);" zugewiesen.Wie ist dann eine Ausgabe möglich wenn bereits die BeginPaint()-Funktion für
HDC genutzt wird ? (Zeile 85 und 86)// include the basic windows header file #include <windows.h> #include <windowsx.h> // the WindowProc function prototype LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // the entry point for any Windows program int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // the handle for the window, filled by a function HWND hWnd; // this struct holds information for the window class WNDCLASSEX wc; // clear out the window class for use ZeroMemory(&wc, sizeof(WNDCLASSEX)); // fill in the struct with the needed information wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WindowProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpszClassName = L"WindowClass1"; // register the window class RegisterClassEx(&wc); // create the window and use the result as the handle hWnd = CreateWindowEx(NULL, L"WindowClass1", // name of the window class L"Our First Windowed Program", // title of the window WS_OVERLAPPEDWINDOW, // window style 300, // x-position of the window 300, // y-position of the window 500, // width of the window 400, // height of the window NULL, // we have no parent window, NULL NULL, // we aren't using menus, NULL hInstance, // application handle NULL); // used with multiple windows, NULL // display the window on the screen ShowWindow(hWnd, nCmdShow); // enter the main loop: // this struct holds Windows event messages MSG msg; // wait for the next message in the queue, store the result in 'msg' while(GetMessage(&msg, NULL, 0, 0)) { // translate keystroke messages into the right format TranslateMessage(&msg); // send the message to the WindowProc function DispatchMessage(&msg); } // return this part of the WM_QUIT message to Windows return msg.wParam; } // this is the main message handler for the program LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // sort through and find what code to run for the message given switch(message) { case WM_PAINT: { const wchar_t szText[] = L"Dies ist der Text.\n"; //const char [20] PAINTSTRUCT ps; HDC hDC; hDC = BeginPaint(hWnd, &ps); TextOut(hDC, 50, 50,szText , sizeof(szText) - 22); EndPaint(hWnd, &ps); return 0; } case WM_LBUTTONDOWN: { //exe-Datei-Pfadanzeige char szFileName[MAX_PATH]; HINSTANCE hInstance = GetModuleHandle(NULL); GetModuleFileName(hInstance, (LPWCH)szFileName, MAX_PATH); MessageBox(hWnd, (LPCWSTR)szFileName, L"This program is:", MB_OK | MB_ICONINFORMATION); } // this message is read when the window is closed case WM_DESTROY: { // close the application entirely PostQuitMessage(0); return 0; } break; } // Handle any messages the switch statement didn't return DefWindowProc (hWnd, message, wParam, lParam); }VIELEN DANK im Voraus
-
Consideration schrieb:
Auf der Seite : http://www.winprog.net/tutorial/fonts.html
wird beschrieben wie Fonts geladen werden. Der Variable vom Typ HDC wird die
Funktion "GetDC(NULL);" zugewiesen.Nene
Guck dir den Artikel nochmal an, GetDC(NULL)wird nur verwendet, um die "Auflösung" des Desktop-DCs zu bestimmen (und damit afaik die Auflösung aller DCs). Mit der "Auflösung" wird dann die Schriftgröße berechnet und das Schrift-Objekt erstellt. Das alles hat noch nichts mit zeichnen zu tun!
-
Also ich würde den Font schon mal beim Erstellen des Fensters setzten (WM_CREATE abfangen).
hier mal eine Funktion um farbigen Text auszugeben, so könnte es aussehen:
/* ============================================== WinApi_DrawText gibt einen Text aus ============================================== */ void WinApi_DrawText(HDC hDC, RECT rc, int x, int y, char *Text, int Textlen, COLORREF cText, COLORREF cTextBk){ HBRUSH hBrush; COLORREF oldcText, oldcTextBk; hBrush = CreateSolidBrush(cTextBk); FillRect(hDC, &rc, hBrush); DeleteObject(hBrush); oldcText = SetTextColor(hDC, cText); oldcTextBk = SetBkColor(hDC, cTextBk); rc.left += x; rc.top += y; DrawText(hDC, Text, -1, &rc, DT_SINGLELINE); SetTextColor(hDC, oldcText); SetBkColor(hDC, oldcTextBk); }