Toon posts:

[WIN32][C++] TextOut probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een WIN32 applicatie dat een item selecteerd uit een listbox en daarna moet de info van het item in m'n window gezet worden. Nu is het zo dat alles goed gaat behalve de tekst neerzetten, de tekst komt namelijk pas te voorschijn als ik m'n window verberg en weer tevoorschijn haal (ik heb getest dat het niet aan m'n programma zelf ligt maar echt aan TextOut). Ook heb ik UpdateWindow() geprobeerd maar tot nu toe geen resultaat.

Weet iemand hoe ik tekst direct in het window kan plaatsen nadat het window gemaakt is?

Alvast bedankt.

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 14:48
Door het te tekenen in je WM_PAINT handler of door een child window aan je window toe te voegen die dat doet.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Je gaat geen WM_PAINT krijgen, omdat je window gewoon nog valid is. Je moet 'm dus invalidaten, dan pas komt de WM_PAINT, en dan doe je dus de TextOut.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Ik was al in de WM_PAINT aan het tekenen, nu heb ik InvalidateRect gebruikt om mijn window te updaten maar nu lukt dit alleen als mijn window maximized is... dit is een deel van de windows procedure:

Als ik in een klein venstertje werk gebeurd er niks maar als ik switch naar maximize lukt het wel.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    PAINTSTRUCT ps;
    HDC hdc;
    static bool Paint = false;


    switch(Msg)
    {
    case WM_PAINT:
        {
            hdc = BeginPaint(hWnd, &ps);
            TextOut(hdc, 0, 0, "Hallo", 5);
            if(Paint)
            {
                TextOut(hdc, 20, 20, "Doei", 4);
            }
            EndPaint(hWnd, &ps);
        }break;
    case WM_KEYDOWN:
        {
            Paint = true;
            RECT MyRect;
            GetWindowRect(hWnd, &MyRect);
            InvalidateRect(hWnd, &MyRect, true);
            UpdateWindow(hWnd);
        }break;


Bedankt voor de snelle reacties _/-\o_

[ Voor 31% gewijzigd door Verwijderd op 29-07-2005 10:03 ]


Verwijderd

GetWindowRect werkt in scherm coordinaten en InvalidateRect werkt in 'window' coordinaten. Probeer ook eens GetClientRect :)

Verwijderd

Topicstarter
Bedankt! :*) het werkt nu eindelijk...

edit:
Dit verklaart waarom het wel werkt als het window maximized was ;)

[ Voor 53% gewijzigd door Verwijderd op 29-07-2005 11:52 ]

Pagina: 1