Grafika 3D
 
  Zarejestruj się
::  Newsy  ::  Pliki  ::  Twoje Konto  ::  Forum  ::
Menu
· Strona główna
· Forum
· Linki
· Lista u?ytkowników
· O nas...
· Pliki
· Statystyki
· Twoje Konto
Tutoriale
· API
· Matematyka
· Teoria
· Direct3D
· OpenGL
· Techniki
Kto Jest Online
Aktualnie jest 46 gość(ci) i 0 użytkownik(ów) online.

Jesteś anonimowym użytkownikiem. Możesz się zarejestrować za darmo klikając tutaj
Tutoriale - API - Szablon

Przygotowanie projektu

Tak, jak obiecałem poprzednim razem, zajmiemy się dzisiaj pierwszymi programami w API Windows. Ufam, ze kompilator został zainstalowany, ręce rozgrzane, klawiatura w pełni sprawna, obsługa Windows w miarę dobrze znana (ponieważ poprzednim razem zapomniałem dodać, że aby dobrze programować w Windows trzeba choć ociupinkę znać ten system i umieć się nim posługiwać :). Uruchamiamy wiec nasz kompilator ( w naszym przypadku VC ver. 5.0 ), przechodzimy do menu "File", wybieramy opcje "New" i w tym momencie naszym oczom ukazuje się okienko z piekła rodem zawierające masę kolorowych ikonek:



Ma kilka zakładek, wybieramy (jeśli nie jest domyślnie wybrana) "Projects" i widzimy kilkanaście możliwych do utworzenia typów projektów. Nasz cel jest jeden ściśle określony: "Win32 Application", klikamy wiec bez chwili namysłu to pole, po prawej stronie w polu o nazwie "Project name" wpisujemy nazwę naszego projektu, może być np. imię naszej dziewczyny, albo jak kto woli "aqq", itp. wybór należy do Was. W polu "Location" określamy położenie katalogu naszego projektu (czyli folder w którym zostanie umieszczony katalog z naszym projektem). Jak nie trudno zauważyć nazwa naszego projektu to jednocześnie nazwa katalogu w którym zostanie umieszczony, czyż nie cudownie ? Na samym dole po prawej stronie powinno być okienko "Platforms", w którym jedyna dostępna opcja to Win32, domyślnie zaznaczona. Dla własnego (i innych) dobra zostawmy ja tak jak jest (czyli zaznaczona) i klikamy OK. I co ?....... I nic, błysnęło, zamieszało dyskiem i ciągle nic. Posiadacze VC 6.0 w tym momencie zaprotestują, jak to nic? Tu małe wyjaśnienie. Z niewiadomych przyczyn Microsoft dopiero w wersji 6.0 stworzył wizarda, który umożliwia automatyczne generowanie kodu szkieletowego dla aplikacji opartej o czyste API, Ci szczęśliwcy maja wiec z głowy a My musimy się męczyć (ale tylko do czasu). Mamy gotowy projekt, wiec... co dalej ?

Pliki źródłowe

Aby moc cokolwiek skompilować, trzeba by napisać choć kilka linii kodu, no nie? Tak wiec kontynuujmy nasze dzieło co by niepotrzebnie nie tracić czasu. Pierwsze co robimy to menu "Project", w którym wybieramy opcje "Add To Project" a w nim z kolei "New". Co dostajemy ?



Bardzo podobne okienko do tego na początku, z tym, że tym razem aktywna zakładka to "Files" i bardzo dobrze, bo o to nam dokładnie chodzi. Z listy dostępnych typów plików, które możemy dodać do projektu wybieramy "C++ Source File". Po prawej stronie widzimy jedno puste pole domagające się wpisania czegoś. Wpisujemy nazwę pliku, jaki zostanie dodany do projektu, nic nie kombinując w pozostałych okienkach, no bo po co, tak jak jest, jest dobrze. Po kliknieciu OK ukazuje nam się piękny czysty arkusz na który możemy przelać wymysły naszej chorej wyobraźni.

Kod

A co przelać na ten arkusz, żebyśmy mogli ujrzeć tak długo oczekiwane okienko. Otóż już mówię. Napiszmy np. cos takiego:

#include <windows.h>

static TCHAR lpszAppName[] = TEXT( "API Windows" );

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
    {
    case WM_CREATE:
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        switch (wParam)
        {
            case VK_ESCAPE:
                PostQuitMessage(0);
                break;
        }
        break;

    default:
        return (DefWindowProc(hWnd, uMsg, wParam, lParam));
    }
    return(0L);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG   msg;
    WNDCLASS wndclass;
    HWND   hWnd;

    wndclass.style  = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = MainWndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance  = hInstance;
    wndclass.hIcon  = NULL;
    wndclass.hCursor  = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = lpszAppName;

    if(RegisterClass(&wndclass) == 0)
        return FALSE;

    hWnd = CreateWindow(
        lpszAppName, lpszAppName,
        WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
        100, 100, 400, 300,
        NULL, NULL, hInstance, NULL);

    if(hWnd == NULL)
        return FALSE;

    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
Po wklepaniu wciskamy kombinacje Ctrl+F5, albo naciskami czerwonawy przycisk w kształcie wykrzyknika na pasku narzędzi (powinien domyślnie być doczepiony gdzieś tam, pod paskiem menu ), zresztą każdy zagorzały programista powinien go mieć zawsze pod ręka. Jeśli nie popełniliśmy żadnych błędów powinniśmy otrzymać piękne białe okno, z paskiem tytułu, klawiszami do zamykania, minimalizowania i maksymalizowania okna. Co robi nasz program ? Jeżeli sądzić po efektach wizualno - dźwiękowych NIC !. Z drugiej jednak strony robi to, co każda porządna aplikacja w Windows - reaguje na komunikaty. Jeśli jeszcze nie wiecie co komunikaty wyjaśni się to w dalszej części kursu. Na dziś to może tyle no bo nie można się przemęczać przecież, a za to następnym razem omówimy dokładniej budowę naszego programu, dowiemy się co robią funkcje WinMain() i MianWndProc() oraz co to są komunikaty.

Wersja do druku (pdf)

©Copyright by Robal   



Tutoriale - API
Nasze newsy s� w RSS: backend.php
PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Tworzenie strony: 0.06 sekund

:: Layout strony został stworzony przez www.nukemods.com w oparciu o styl phpbb2 Helius, którego autorem jest Cyberalien ::