question

DanielShepherd-8507 avatar image
0 Votes"
DanielShepherd-8507 asked RLWA32-6355 commented

How can i use ClearType on my win32 app?

I am making a win32 app, and I have created text using this code:

 TCHAR test[] = _T("welcome to my app :D");
 //the textout part is already in WM_PAINT.
 TextOut(hdc,
       5, 5,
       test, _tcslen(test));

and the text appears like this:
124351-screenshot-2021-08-18-094437.png
as you can see, the text is sort of low quality. how can I make my text look better, for example using ClearType?
Example:
124362-screenshot-2021-08-18-095545.png


windows-api
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

RLWA32-6355 avatar image
0 Votes"
RLWA32-6355 answered RLWA32-6355 commented

What you are seeing is the ugly default font that Windows GDI will use.

For the Windows desktop application created by the new project template -

Step 1. Create the desired font. Store the handle to the font for later use.
Step 2. When handling WM_PAINT after calling BeginPaint select the font you created into the device context .
Step 3. Draw your text.
Step 4. Select the font out of the device context before calling EndPaint.
Step 5. Delete the font when it will not be used again.

An example (error checking omitted) -

 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
     static HFONT hFont;
    
     switch (message)
     {
     case WM_COMMAND:
     {
         int wmId = LOWORD(wParam);
         // Parse the menu selections:
         switch (wmId)
         {
         case IDM_ABOUT:
             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
             break;
         case IDM_EXIT:
             DestroyWindow(hWnd);
             break;
         default:
             return DefWindowProc(hWnd, message, wParam, lParam);
         }
     }
     break;
     case WM_CREATE:
     {
         HDC hDC = GetDC(hWnd);
         int nHeight = -MulDiv(11, GetDeviceCaps(hDC, LOGPIXELSY), 72);
         hFont = CreateFont(nHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH, _T("Segoe UI"));
         ReleaseDC(hWnd, hDC);
     }
     case WM_PAINT:
     {
         // TODO: Add any drawing code that uses hdc here...
         PAINTSTRUCT ps;
         TCHAR szTest[] = _T("Welcome to my Font test");
         HDC hdc = BeginPaint(hWnd, &ps);
         HGDIOBJ hOld = SelectObject(hdc, (HGDIOBJ) hFont);
         TextOut(hdc, 10, 10, szTest, _tcslen(szTest));
         SelectObject(hdc, hOld);
         EndPaint(hWnd, &ps);
     }
     break;
     case WM_DESTROY:
         if (hFont)
             DeleteObject(hFont);
         PostQuitMessage(0);
         break;
     default:
         return DefWindowProc(hWnd, message, wParam, lParam);
     }
     return 0;
 }
· 4
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

My code returned no errors, but it still used the ugly font. can you first show me a screenshot of an example of the better looking font?

0 Votes 0 ·

I already posted a screenshot using the font. See below this post. If you carefully check your code I expect you will find that you did not accurately copy what I posted.

0 Votes 0 ·

it worked. it was something with the if statement in the WM_DESTROY case statement.
124780-screenshot-2021-08-19-175849.png


0 Votes 0 ·
Show more comments
DanielShepherd-8507 avatar image
0 Votes"
DanielShepherd-8507 answered RLWA32-6355 edited

no variables outside of the case statement are found. so the code will not work.

· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

I don't know what you are doing but this code was tested and works correctly. The only variable that it needs is the handle to the font and that is declared as a static variable in the window procedure function. Look at line 3 in the posted code.

124803-font.png


0 Votes 0 ·
font.png (4.4 KiB)
DanielShepherd-8507 avatar image
0 Votes"
DanielShepherd-8507 answered RLWA32-6355 commented
 case WM_CREATE:
     {
         HWND button = CreateWindow(L"BUTTON", L"test", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 50, 50, 50, 20, hWnd, (HMENU)BUTTON_ID, hInst, NULL);
         //i have already #defined BUTTON_ID
         HWND hedit = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VSCROLL | WS_VISIBLE | WS_HSCROLL, 200,200,100,100, hWnd,(HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
         HWND commandlinktest = CreateWindow(L"BUTTON", L"", WS_VISIBLE | WS_CHILD | BS_COMMANDLINK, 200, 10, 100, 100, hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND checkbox = CreateWindow(L"BUTTON", L"test", WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 150, 30, 230, 23, hWnd, (HMENU)CHECKBOX, hInst, NULL);
         HWND radiobutton = CreateWindow(L"BUTTON", L"a", WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON, 233,100,56,23,hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND cbox = CreateWindow(L"BUTTON", L"cbox", WS_VISIBLE | WS_CHILD | BS_DEFSPLITBUTTON, 334, 110, 80, 40, hWnd, NULL,(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND test = CreateWindow(MONTHCAL_CLASS, L"", WS_VISIBLE | WS_CHILD | CAL_GREGORIAN,  1000,100,100,100,hWnd, NULL,(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND text = CreateWindow(L"TEXT", L"this is text!", WS_CHILDWINDOW | BS_TEXT, 10, 400, 43, 24, hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND combobox = CreateWindow(WC_COMBOBOX, TEXT("testithink"), CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_OVERLAPPED, 10, 300, 40, 90, hWnd, NULL, (HINSTANCE)HINST_THISCOMPONENT, NULL);
         SendMessageW(commandlinktest, WM_SETTEXT, 0, (LPARAM)L"test :D");
         SendMessageW(commandlinktest, BCM_SETNOTE, 0, (LPARAM)L"test");
         SystemParametersInfo(SPI_SETFONTSMOOTHING, 0, (PVOID)1600, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
         HDC hDC = GetDC(hWnd);
         int nHeight = MulDiv(11,GetDeviceCaps(hDC,
             LOGPIXELSY), 72);
         hFont = CreateFont(nHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH, _T("Segoe UI"));
         ReleaseDC(hWnd, hDC);
         break;
     }
     case WM_COMMAND:
         {
         HWND mytoolbar = NULL;
             int wmId = LOWORD(wParam);
             // Parse the menu selections:
             switch (wmId)
             {
             case IDM_ABOUT:
             {
                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                 break;
                 return 0;
             }
             case ID_OPENDIALOG_OPENDIALOGBOXTHATIMADE:
             {
                 break;
                 return 0;
             }
             case IDM_EXIT:
                 MessageBox(hWnd, L"bye", L"bye!", MB_OK | MB_ICONHAND);
                 DestroyWindow(hWnd);
                 break;
             case ID_CLOSEWINDOWFORSOMETREASON_YESCLOSEIT:
                     DestroyWindow(hWnd);
                     break;
             case ID_FILE_OPENFILETEST:
             {
                 OPENFILENAME ofn;
                 WCHAR szFileName[MAX_PATH] = L"";
                 ZeroMemory(&ofn, sizeof(ofn));
                 ofn.lStructSize = sizeof(ofn);
                 ofn.hwndOwner = hWnd;
                 ofn.lpstrFilter = L"My Windows App files (*.mwa)\0*.mwa\0All files i guess (*.*)\0*.*\0";
                 ofn.lpstrFile = szFileName;
                 ofn.nMaxFile = MAX_PATH;
                 ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                 ofn.lpstrDefExt = L"mwa";
                 if (GetOpenFileName(&ofn))
                 {
    
                 }
             }
             case ID_WMCOMMANDS_WM:
             {
             case WM_CLOSE:
             {
                 DestroyWindow(hWnd);
             }
             }
    
             case ID_MAKESOMETEXT:
             {
                 case WM_PAINT:
                 {
                 TCHAR outtext[] = _T("ok here it is mr magic man");
                 PAINTSTRUCT ps;
                 char szSize[80];
                 char szTitle[] = "test :D";
                 HDC hdc = BeginPaint(hWnd, &ps);
                 HDC hdcMem = CreateCompatibleDC(hdc);
                 TextOut(hdc,
                     10,30,
                     outtext, _tcslen(outtext));
                 EndPaint(hWnd, &ps);
                 }
                 break;
             }
             case ID_OTHERS_DESTROYWINDOW:
             {
                 DestroyWindow(hWnd);
                 break;
                 return 0;
             }
             case ID_OTHERS_CLOSEWINDOW:
             {
                 std::cout << "test \n";
                 CloseWindow(hWnd);
                 break;
                 return 0;
             }
             default:
                 return DefWindowProc(hWnd, message, wParam, lParam);
             }
         }
         break;
     case WM_MDIMAXIMIZE:
     {
         if (MessageBox(hWnd, L"you have maximized the window.", L"thx", MB_OK) == IDOK){
             SC_MAXIMIZE;
             }
     }
     case WM_LBUTTONDOWN:
     {
         MessageBox(hWnd, L"test", L"test", MB_OKCANCEL | MB_ICONINFORMATION);
         testheaderfunc();
         object.integer = 1;
    
         break;
         return 0;
     }
     case WM_RBUTTONDOWN:
     {
         MessageBox(hWnd, L"you have right clicked the window", L"right click", MB_OK | MB_ICONASTERISK);
         break;
         return 0;
     }
     case WM_VSCROLL:
     {
         std::wcout << "wcout? what is this? \n";
     }
     case WM_MBUTTONDOWN:
     {
         switch (MessageBox(hWnd, L"test and press ok or cancel", L"press somethign i guess", MB_OKCANCEL)) {
         case IDCANCEL:
         {
             MessageBox(hWnd, L"you have pressed the cancel button!", L"Button pressed", MB_OK);
         }
         case IDOK:
         {
             MessageBox(hWnd, L"you pressed ok", L"ok pressed", MB_OK);
         }
         }
     }
     case WM_CLIPBOARDUPDATE:
     {
         MessageBox(hWnd, L"your clipboard that let you copy and paste has been updated", L"clipoard updated", MB_OKCANCEL);
     }
     case WM_KEYDOWN:
     {
         MessageBox(hWnd, L"", L"", MB_YESNOCANCEL | MB_USERICON);
         break;
         return 0;
     }
     case WM_CLOSE:
     {
         if (MessageBox(hWnd, L"you have called WM_CLOSE. goodbye!", L"WM_CLOSE called", MB_OK | MB_ICONWARNING) == IDOK) {
             DestroyWindow(hWnd);
             return 0;
         }
     }
     case WM_PAINT:
         {
             PAINTSTRUCT ps;
             HDC hdc = BeginPaint(hWnd, &ps);
             HGDIOBJ hOLD = SelectObject(hdc, (HGDIOBJ)hFont);
             TextOut(hdc,
                 5, 5,
                 test, _tcslen(test));
             TextOut(hdc,
                 10, 20,
                 testagain, _tcslen(testagain));
             EndPaint(hWnd, &ps);
         }
         break;
     case WM_DESTROY:
            
         PostQuitMessage(0);
         break;
     default:
         return DefWindowProc(hWnd, message, wParam, lParam);
     }
     return 0;
 }
    
 // Message handler for about box.
 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 {
     UNREFERENCED_PARAMETER(lParam);
     switch (message)
     {
     case WM_INITDIALOG:
         return (INT_PTR)TRUE;
    
     case WM_COMMAND:
         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
         {
             EndDialog(hDlg, LOWORD(wParam));
             return (INT_PTR)TRUE;
         }
         break;
     }
     return (INT_PTR)FALSE;
 }

· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Please review my posted code especially the declaration of the static variable for the font handle on line three as I previously indicated. Furthermore, the code that you posted fails to include several important steps. It does not select the font handle out of the device context in the WM_PAINT handler nor does it destroy the font.

0 Votes 0 ·
DanielShepherd-8507 avatar image
0 Votes"
DanielShepherd-8507 answered RLWA32-6355 commented

here is my code now
#include "framework.h"
#include "my windows app.h"
#include <wincodec.h>
#include "winuser.h"
#include <iostream>
#include "Header.h"
#include "Resource.h"
#include "windows.h"
#include "commdlg.h"
#include "commctrl.h"
#include "Wingdi.h"
#define treeviewtest 454
#define CALENDERTHINGY_IDK 5656
#define BUTTON_ID 1001
#define IDC_MAIN_EDIT 109
#define MAX_LOADSTRING 100
#define CHECKBOX 2332
#define HINST_THISCOMPONENT 45

 // Global Variables:
 HINSTANCE hInst;                                // current instance
 WCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
 WCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name
    
 // Forward declarations of functions included in this code module:
 ATOM                MyRegisterClass(HINSTANCE hInstance);
 BOOL                InitInstance(HINSTANCE, int);
 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 BOOL CALLBACK mydialog(HWND, UINT, WPARAM, LPARAM)
 {
     return 0;
 }
 int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                      _In_opt_ HINSTANCE hPrevInstance,
                      _In_ LPWSTR    lpCmdLine,
                      _In_ int       nCmdShow)
 {
     UNREFERENCED_PARAMETER(hPrevInstance);
     UNREFERENCED_PARAMETER(lpCmdLine);
     // TODO: Place code here.
    
     // Initialize global strings
     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
     LoadStringW(hInstance, IDC_MYWINDOWSAPP, szWindowClass, MAX_LOADSTRING);
     MyRegisterClass(hInstance);
    
     // Perform application initialization:
     if (!InitInstance (hInstance, nCmdShow))
     {
         return FALSE;
     }
    
     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYWINDOWSAPP));
    
     MSG msg;
    
     // Main message loop:
     while (GetMessage(&msg, nullptr, 0, 0))
     {
         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
         {
             TranslateMessage(&msg);
             DispatchMessage(&msg);
         }
     }
    
     return (int) msg.wParam;
 }
    
 //
 //  FUNCTION: MyRegisterClass()
 //
 //  PURPOSE: Registers the window class.
 //
 ATOM MyRegisterClass(HINSTANCE hInstance)
 {
     WNDCLASSEXW wcex;
    
     wcex.cbSize = sizeof(WNDCLASSEX);
    
     wcex.style          = CS_HREDRAW | CS_VREDRAW;
     wcex.lpfnWndProc    = WndProc;
     wcex.cbClsExtra     = 0;
     wcex.cbWndExtra     = 0;
     wcex.hInstance      = hInstance;
     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYWINDOWSAPP));
     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_MYWINDOWSAPP);
     wcex.lpszClassName  = szWindowClass;
     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
     return RegisterClassExW(&wcex);
 }
    
 //
 //   FUNCTION: InitInstance(HINSTANCE, int)
 //
 //   PURPOSE: Saves instance handle and creates main window
 //
 //   COMMENTS:
 //
 //        In this function, we save the instance handle in a global variable and
 //        create and display the main program window.
 //
 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 {
    hInst = hInstance; // Store instance handle in our global variable
    
    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    if (!hWnd)
    {
       return FALSE;
    }
    
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    
    
    return TRUE;
 }
 //
 //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
 //
 //  PURPOSE: Processes messages for the main window.
 //
 //  WM_COMMAND  - process the application menu
 //  WM_PAINT    - Paint the main window
 //  WM_DESTROY  - post a quit message and return
 //
 //
 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
     TCHAR test[] = _T("welcome to my app :D");
     TCHAR testagain[] = _T("try clicking about :D");
     switch (message)
     {
         static HFONT hFont;
     case WM_CREATE:
     {
         HWND button = CreateWindow(L"BUTTON", L"test", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 50, 50, 50, 20, hWnd, (HMENU)BUTTON_ID, hInst, NULL);
         //i have already #defined BUTTON_ID
         HWND hedit = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VSCROLL | WS_VISIBLE | WS_HSCROLL, 200,200,100,100, hWnd,(HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
         HWND commandlinktest = CreateWindow(L"BUTTON", L"", WS_VISIBLE | WS_CHILD | BS_COMMANDLINK, 200, 10, 100, 100, hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND checkbox = CreateWindow(L"BUTTON", L"test", WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 150, 30, 230, 23, hWnd, (HMENU)CHECKBOX, hInst, NULL);
         HWND radiobutton = CreateWindow(L"BUTTON", L"a", WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON, 233,100,56,23,hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND cbox = CreateWindow(L"BUTTON", L"cbox", WS_VISIBLE | WS_CHILD | BS_DEFSPLITBUTTON, 334, 110, 80, 40, hWnd, NULL,(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND test = CreateWindow(MONTHCAL_CLASS, L"", WS_VISIBLE | WS_CHILD | CAL_GREGORIAN,  1000,100,100,100,hWnd, NULL,(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND text = CreateWindow(L"TEXT", L"this is text!", WS_CHILDWINDOW | BS_TEXT, 10, 400, 43, 24, hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
         HWND combobox = CreateWindow(WC_COMBOBOX, TEXT("testithink"), CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_OVERLAPPED, 10, 300, 40, 90, hWnd, NULL, (HINSTANCE)HINST_THISCOMPONENT, NULL);
         SendMessageW(commandlinktest, WM_SETTEXT, 0, (LPARAM)L"test :D");
         SendMessageW(commandlinktest, BCM_SETNOTE, 0, (LPARAM)L"test");
         SystemParametersInfo(SPI_SETFONTSMOOTHING, 0, (PVOID)1600, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
         HDC hDC = GetDC(hWnd);
         int nHeight = MulDiv(11,GetDeviceCaps(hDC,
             LOGPIXELSY), 72);
         hFont = CreateFont(nHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH, _T("Segoe UI"));
         ReleaseDC(hWnd, hDC);
         break;
     }
     case WM_COMMAND:
         {
         HWND mytoolbar = NULL;
             int wmId = LOWORD(wParam);
             // Parse the menu selections:
             switch (wmId)
             {
             case IDM_ABOUT:
             {
                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                 break;
                 return 0;
             }
             case ID_OPENDIALOG_OPENDIALOGBOXTHATIMADE:
             {
                 break;
                 return 0;
             }
             case IDM_EXIT:
                 MessageBox(hWnd, L"bye", L"bye!", MB_OK | MB_ICONHAND);
                 DestroyWindow(hWnd);
                 break;
             case ID_CLOSEWINDOWFORSOMETREASON_YESCLOSEIT:
                     DestroyWindow(hWnd);
                     break;
             case ID_FILE_OPENFILETEST:
             {
                 OPENFILENAME ofn;
                 WCHAR szFileName[MAX_PATH] = L"";
                 ZeroMemory(&ofn, sizeof(ofn));
                 ofn.lStructSize = sizeof(ofn);
                 ofn.hwndOwner = hWnd;
                 ofn.lpstrFilter = L"My Windows App files (*.mwa)\0*.mwa\0All files i guess (*.*)\0*.*\0";
                 ofn.lpstrFile = szFileName;
                 ofn.nMaxFile = MAX_PATH;
                 ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
                 ofn.lpstrDefExt = L"mwa";
                 if (GetOpenFileName(&ofn))
                 {
    
                 }
             }
             case ID_WMCOMMANDS_WM:
             {
             case WM_CLOSE:
             {
                 DestroyWindow(hWnd);
             }
             }
    
             case ID_MAKESOMETEXT:
             {
                 case WM_PAINT:
                 {
                 TCHAR outtext[] = _T("ok here it is mr magic man");
                 PAINTSTRUCT ps;
                 char szSize[80];
                 char szTitle[] = "test :D";
                 HDC hdc = BeginPaint(hWnd, &ps);
                 HDC hdcMem = CreateCompatibleDC(hdc);
                 TextOut(hdc,
                     10,30,
                     outtext, _tcslen(outtext));
                 EndPaint(hWnd, &ps);
                 }
                 break;
             }
             case ID_OTHERS_DESTROYWINDOW:
             {
                 DestroyWindow(hWnd);
                 break;
                 return 0;
             }
             case ID_OTHERS_CLOSEWINDOW:
             {
                 std::cout << "test \n";
                 CloseWindow(hWnd);
                 break;
                 return 0;
             }
             default:
                 return DefWindowProc(hWnd, message, wParam, lParam);
             }
         }
         break;
     case WM_MDIMAXIMIZE:
     {
         if (MessageBox(hWnd, L"you have maximized the window.", L"thx", MB_OK) == IDOK){
             SC_MAXIMIZE;
             }
     }
     case WM_LBUTTONDOWN:
     {
         MessageBox(hWnd, L"test", L"test", MB_OKCANCEL | MB_ICONINFORMATION);
         testheaderfunc();
         object.integer = 1;
    
         break;
         return 0;
     }
     case WM_RBUTTONDOWN:
     {
         MessageBox(hWnd, L"you have right clicked the window", L"right click", MB_OK | MB_ICONASTERISK);
         break;
         return 0;
     }
     case WM_VSCROLL:
     {
         std::wcout << "wcout? what is this? \n";
     }
     case WM_MBUTTONDOWN:
     {
         switch (MessageBox(hWnd, L"test and press ok or cancel", L"press somethign i guess", MB_OKCANCEL)) {
         case IDCANCEL:
         {
             MessageBox(hWnd, L"you have pressed the cancel button!", L"Button pressed", MB_OK);
         }
         case IDOK:
         {
             MessageBox(hWnd, L"you pressed ok", L"ok pressed", MB_OK);
         }
         }
     }
     case WM_CLIPBOARDUPDATE:
     {
         MessageBox(hWnd, L"your clipboard that let you copy and paste has been updated", L"clipoard updated", MB_OKCANCEL);
     }
     case WM_KEYDOWN:
     {
         MessageBox(hWnd, L"", L"", MB_YESNOCANCEL | MB_USERICON);
         break;
         return 0;
     }
     case WM_CLOSE:
     {
         if (MessageBox(hWnd, L"you have called WM_CLOSE. goodbye!", L"WM_CLOSE called", MB_OK | MB_ICONWARNING) == IDOK) {
             DestroyWindow(hWnd);
             return 0;
         }
     }
     case WM_PAINT:
         {
             PAINTSTRUCT ps;
             HDC hdc = BeginPaint(hWnd, &ps);
             HGDIOBJ hOLD = SelectObject(hdc, (HGDIOBJ)hFont);
             TextOut(hdc,
                 5, 5,
                 test, _tcslen(test));
             TextOut(hdc,
                 10, 20,
                 testagain, _tcslen(testagain));
             SelectObject(hdc, hOLD);
             EndPaint(hWnd, &ps);
         }
         break;
     case WM_DESTROY:
         if (hFont)
         {
             DeleteObject(hFont);
         }
         PostQuitMessage(0);
         break;
     default:
         return DefWindowProc(hWnd, message, wParam, lParam);
     }
     return 0;
 }
    
 // Message handler for about box.
 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 {
     UNREFERENCED_PARAMETER(lParam);
     switch (message)
     {
     case WM_INITDIALOG:
         return (INT_PTR)TRUE;
    
     case WM_COMMAND:
         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
         {
             EndDialog(hDlg, LOWORD(wParam));
             return (INT_PTR)TRUE;
         }
         break;
     }
     return (INT_PTR)FALSE;
 }
· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Do yourself a favor. One of the best things you can do when debugging a particular problem is to simplify things. So, I suggest you create a brand new Windows desktop application and copy the code that I posted into it. If you copy everything correctly the font will be created and used when the window is painted to write the text. Once you get that working, you should be able to see where you are not properly handling things in the code you just posted which I am not going to attempt to debug for you.

0 Votes 0 ·