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);
    }
    

Anmelden zum Antworten