Windows GUI для DirectX Game кажется неисправной - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу разработать игру с использованием DirectX в Windows10.Я использую для написания кода с CodeBlocks.Следующий код выдаст ошибку, подобную этой:

undefined reference to `GetStockObject@4'

В чем проблема с этой функцией Windows?Мне не нужно инициализировать или писать эту функцию отдельно, не так ли?Комментирование кода ошибки скомпилирует код, но нет графического интерфейса ... Вот код:

#include <windows.h>
#include"Frame.h"
//global definitions
BOOL done;
int Spiel_Zustand;
HWND hwnd;

//Function:CallBack
LRESULT CALLBACK WindowProc (HWND hwnd,UINT message, WPARAM wparam,LPARAM lparam)
{
    switch(message)
    {
    case WM_DESTROY :
    {
        done=TRUE;
        PostQuitMessage(0);
        return 0;
    }
    break;
    case WM_KEYDOWN:
        switch(wparam)
        {
        case VK_ESCAPE:
        {
            PostMessage(hwnd,WM_CLOSE,0,0);
            return 0;
        }
        break;
        }
        break;
    default:
        break;

    }//End of switch
    return DefWindowProc(hwnd,message,wparam,lparam);
}//End of CallBack

//Function:Start
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hprevinst,LPSTR lpcmdline,int ncmdshow)
{
    WNDCLASSEX winclass;
    MSG message;
    const char szclassname[]="Klassenname";
    DWORD loop_start_time;
    winclass.cbSize=sizeof(WNDCLASSEX);
    winclass.style=CS_HREDRAW|CS_VREDRAW;
    winclass.lpfnWndProc=WindowProc;
    winclass.cbClsExtra=0;
    winclass.cbWndExtra=0;
    winclass.hInstance=hinst;
    winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    winclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    winclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//this will throw out error
    winclass.lpszClassName=szclassname;
    winclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
    if(!RegisterClassEx(&winclass))
        return 0;
    //Create handle of windows ans save it globally
    if(!(hwnd=CreateWindowEx(NULL,szclassname,"3D Gameprograming - Title",WS_POPUPWINDOW|WS_VISIBLE,0,0,400,300,NULL,NULL,hinst,NULL)))
        return 0;
    done=FALSE;
    Spiel_Zustand=SPIEL_AUSWAHL;
    //Phase 1.1:
    Spiel_Initialisieren();
    //Phase 1.2:: Main Looping
    while(!done)
    {
        //Any message to handle?
        while(GetMessage(&message,NULL,0,0))
        {
            TranslateMessage(&message);
            DispatchMessage(&message);
        }
        //Start time of Main Loop
        loop_start_time=GetTickCount;
        switch(Spiel_Zustand)
        {
        case SPIEL_AUSWAHL:
        {
            //[....]
            Spiel_Zustand=SPIEL_START;
        }
        break;
        case SPIEL_START:
        {
            //[...]
            Spiel_Zustand=SPIEL_LAEUFT;
        }
        break;
        case SPIEL_LAEUFT:
        {
            //waiting for User input
            //Manage User input
            //Artificial Intelligence and game logic
            //Rendering Frame
        } break;
        case SPIEL_NEUSTART:
        {
            //[...]
            Spiel_Zustand=SPIEL_START;
        }
        break;
        default:
            break;
        }//End of switch
        //Restricting Frame rate
        while((GetTickCount()-loop_start_time)<40);
    }//End of Main Looping
    //Phase 1.3
    Spiel_Beenden();
    return message.wParam;
}//End of Start


//Phase 2.1
int Spiel_Initialisieren(void)
{
//ToDO:initializations etc..
    return 1;
}
//Phase 2.2
int Spiel_Beenden(void)
{
    //ToDO:Free Memory etc..
    return 1;
}

1 Ответ

0 голосов
/ 26 сентября 2018

Вам необходимо связать gdi32.lib при компиляции -lgdi32

Неопределенная ссылка на GetStockObject @ 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...