hey, I use DEV-C++ and I want to know how to display text in a new windows project. this code that i used from an example doesnt work.

#include <windows.h>
#include<iostream>
#include<string.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Warning!",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}



/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
           case WM_PAINT:
           
           hdc = BeginPaint (hwnd, &ps);
           GetClientRect (hwnd, &rc);
            rc.bottom = rc.bottom / 2;
            DrawText (hdc, "Hello, World!", -1, &rc,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER);

            EndPaint (hwnd, &ps);
            return 0;
            break;
               

        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

The code to display text that i found starts on line 82.
Any solutions?

Recommended Answers

All 10 Replies

You have no PAINTSTRUCT variable declared from what i see.I'm curious how can it compile without giving you an error about this.

Ok so could you post the PAINTSTRUCT code? C++ actually did give me an error about PAINTSTRUCT.

Just declare

PAINTSTRUCT ps;

Inside the window procedure's body.

Just declare

PAINTSTRUCT ps;

Inside the window procedure's body.

Okay, that got it working. Thanks for the assistance.

And do you know how to change the background color in the same program?

wincl.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH); //simplest way

Ok, that's working too. And do you know how to change the text color when you use the DrawText function? (Line 87 in first post).

Try this

#include <windows>

class TxtColor  {
   LOGBRUSH lgbr;
   HGDIOBJ clrHndl;
   HGDIOBJ prevHndl;
   HDC Hdc;

   TxtColor () {}
public:
   TxtColor (HDC hdc,COLORREF clr) : Hdc(hdc) {
      lgbr.lbStyle=BS_SOLID;
      lgbr.lbColor=clr;
      lgbr.lbHatch=DIB_RGB_COLORS;

      clrHndl=CreateBrushIndirect (&lgbr);
    }

   ~TxtColor ()  {
      DeselectColor ();
    }

   void SelectColor ()  {
      prevHndl=SelectObject (Hdc,clrHndl);
    }
   void DeselectColor ()  { //you need this to switch to the prev color
      SelectObject (Hdc,prevHndl);
    }
 };

//use

HDC Hdc;
TxtColor somecolor (Hdc,0x34534);
somecolor.SelectColor ();
TextOut (Hdc,0,0,"qwe",3);
somecolor.DeselectColor ();

You know .. it doesn't work like this if you want to learn.Half of your code is already a template generated by vc++ so you should do some research about what you need otherwise you won't learn by asking 20 questions a day.If you instead were just curious i'm happy to help.

I'm just curious. This is the last question I'll ask. If I have any more, I'll start a new thread or look online.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.