Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [C++] Poczatki w WinApi i problem z sprintf
Watt
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 1
Dołączył: 13.06.2008

Ostrzeżenie: (0%)
-----


Witam,

Dziś zacząłem cos tam grzebać w WinApi, ściągnąłem przykładowy program, no i jak zwykle bywa z początkami program nie działa. Googluje już od godziny, nie mogąc znaleźć rozwiązania więc postanowiłem napisać tutaj.
Kod
#include <windows.h>
#include <iostream>
#include <cstdlib>
//#include <stdlib.h>

using namespace std;

char temp[10];
int num = 3;

LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX  WndCls;
    static char szAppName[] = "ExoFont";
    MSG         Msg;

    WndCls.cbSize        = sizeof(WndCls);
    WndCls.style         = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
    WndCls.lpfnWndProc   = WindProcedure;
    WndCls.cbClsExtra    = 0;
    WndCls.cbWndExtra    = 0;
    WndCls.hInstance     = hInstance;
    WndCls.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    WndCls.hCursor       = LoadCursor(NULL, IDC_ARROW);
    WndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndCls.lpszMenuName  = NULL;
    WndCls.lpszClassName = szAppName;
    WndCls.hIconSm       = LoadIcon(hInstance, IDI_APPLICATION);
    RegisterClassEx(&WndCls);

    CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                   szAppName, "Fonts Fundamentals",
                   WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                   CW_USEDEFAULT, CW_USEDEFAULT, 450, 500,
                   NULL, NULL, hInstance, NULL);

    while( GetMessage(&Msg, NULL, 0, 0) )
    {
        TranslateMessage(&Msg);
        DispatchMessage( &Msg);
    }

    return static_cast<int>(Msg.wParam);
}

LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg,
                               WPARAM wParam, LPARAM lParam)
{
    HDC         hDC;
    PAINTSTRUCT Ps;
    HFONT        font;
    

    switch(Msg)
    {
    case WM_PAINT:
    hDC = BeginPaint(hWnd, &Ps);
        
         font = CreateFont(14, 0, 0, 0,
                           FW_NORMAL, FALSE, FALSE, FALSE,
                           ANSI_CHARSET, OUT_DEFAULT_PRECIS,
                 CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                 DEFAULT_PITCH | FF_ROMAN,
            "Arial");
            


        SelectObject(hDC, font);
        

        for(int x = 0; x < 100; x++){
           sprintf( temp, "String%d",x);
           TextOut(hDC, 10, 10, temp, 12);
        }
        

    EndPaint(hWnd, &Ps);

    break;
    case WM_DESTROY:
    PostQuitMessage(WM_QUIT);
    break;
    default:
    return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
}


Dokładniej chodzi o linijki

Kod
        for(int x = 0; x < 100; x++){
           sprintf( temp, "String%d",x);
           TextOut(hDC, 10, 10, temp, 12);
        }


Chciałem, żeby zmieniał wypisywane liczby, ale kompilator (dev c++) nie chce zmienić typu zmiennej. Wie ktoś może co powinienem zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
l0ud
post
Post #2





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Nie rozumiem co chcesz osiągnąć - program działa poprawnie. Procedura rysowania uruchamia się raz na jakiś czas (w razie potrzeby) no i efektem jest pojawienie się napisu String99 (bo wszystkie poprzednie stringi są momentalnie nadpisywane przez następny). Jeżeli chcesz zobaczyć coś w stylu animacji, najbardziej prymitywnym sposobem jest dodanie chociażby "Sleep(200);" przed TextOut, ale spowoduje to, że procedura rysowania będzie trwała nieprawidłowo długo (do powinno to trwać najlepiej ułamek sekundy) i okno na czas jej wykonywania przestanie odpowiadać (IMG:style_emoticons/default/tongue.gif) Poprawne zrobienie takiej animacji jest trochę bardziej skomplikowane.

A tak na przyszłość do aplikacji okienkowych polecam zainteresować się czymś pokroju wxWidgets - pisanie w czystym WinAPI to raczej męczarnia, a tak zyskujesz większą wygodę pisania i (jeżeli niczego nie spaprasz) wieloplatformowość.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.09.2025 - 06:57