I'm new in c++ so please be patient. ;)
I'm trying to create abstract fabric.
My errors:
1>ObslugaOkna.obj : error LNK2019: unresolved external symbol "public: __thiscall Figury_Produkoj::Figury_Produkoj(void)" (??0Figury_Produkoj@@QAE@XZ) referenced in function "public: static long __stdcall ObslugaOkna::WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@ObslugaOkna@@SGJPAUHWND__@@IIJ@Z)
1>C:\Documents and Settings\Mati\Pulpit\Nowy folder (4)\grs\Debug\grs.exe : fatal error LNK1120: 1 unresolved externals
And code:
ObslugaOkna.cpp Figury_Produkoj A;
IFIGURY.h
#include <windows.h>
#define L_KLOCKOW 5
#ifndef Figury_Nastepny_H_
#define Figury_Nastepny_H_
#ifndef Figury_Aktualny_H_
#define Figury_Aktualny_H_
#ifndef Figury_Produkoj_H_
#define Figury_Produkoj_H_
class IFigury
{
public:
static int Klocek[7][4 ][5 ][5];
void Rysuj_kwadrat(HDC okno,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y); //Poruszający się klocek
int Losuj_klocek(int pomiedzy);
virtual int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst)=0;
//virtual Wybierz()=0;
//virtual int Wybierz(char* tekst)=0;
IFigury();
};
#endif
#endif
#endif
Figury_Nastepny.h
#include"IFigury.h"
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
#ifndef IFigury_H_
#define IFigury_H_
class Figury_Nastepny: virtual public IFigury
{
//private:
//const int klocek_x,klocek_y; //Pozycje x,y klocka
public:
int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst);
Figury_Nastepny();
};
#endif
FIGURY_AKTUALNY.h
#include"IFigury.h"
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
//#ifndef IFigury_H_
//#define IFigury_H_
class Figury_Aktualny: virtual public IFigury
{
public:
//const int klocek_x,klocek_y; //Pozycje x,y klocka
int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst);
Figury_Aktualny();
};
//#endif
Figury_Produkoj.h
//#include "IFigury.h"
#include "Figury_Nastepny.h"
#include "Figury_Aktualny.h"
//#include "IFigury.h"
#include <string.h>
#include <iostream>
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
class Figury_Produkoj: public Figury_Aktualny, public Figury_Nastepny, virtual public IFigury
{
public:
static int klocek_numer,klocek_obrot; //Numer klocka i jego obrot
static int nast_klocek_numer,nast_klocek_obrot; //Numer następnego klocka
static int klocek_x, klocek_y;
int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst)
{
if(strstr(tekst,"NASTEPNY"))
{
return(Figury_Nastepny::Rysuj_figure(kontekst,pkt_x,pkt_y,klocek_numer,klocek_obrot, poczatkowy_x,poczatkowy_y,tekst));
}
else
{
return(Figury_Aktualny::Rysuj_figure(kontekst,pkt_x,pkt_y,klocek_numer,klocek_obrot, poczatkowy_x,poczatkowy_y,tekst));
}
return 0;
} //Wybiera który obiekt ma być stworzony
Figury_Produkoj();
};
ObslugaOkna.cpp
/********************************************************************
FUNKCJA OKNA realizujaca przetwarzanie meldunków kierowanych do okna aplikacji*/
#include"ObslugaOkna.h"
LRESULT CALLBACK ObslugaOkna::WndProc (HWND okno, UINT kod_meldunku, WPARAM wParam, LPARAM lParam)
{
//Figury A;
//klocek_numer=A.Losuj_klocek(7);
//klocek_obrot=A.Losuj_klocek(4);
Figury_Produkoj A;
HMENU mGra, mPomoc, mGlowne;
/* PONIŻSZA INSTRUKCJA DEFINIUJE REAKCJE APLIKACJI NA POSZCZEGÓLNE MELDUNKI */
switch (kod_meldunku)
{
case WM_CREATE: //meldunek wysyłany w momencie tworzenia okna
mGra = CreateMenu();//Menu Gra
AppendMenu(mGra, MF_STRING, 100, TEXT("&Nowa Gra F2"));
AppendMenu(mGra, MF_STRING, 101, TEXT("&Pause/wznów P"));
AppendMenu(mGra, MF_SEPARATOR, 0, TEXT(""));
AppendMenu(mGra, MF_STRING, 102, TEXT("&Najlepsze wyniki"));
AppendMenu(mGra, MF_STRING, 103, TEXT("&Zakończ"));
mPomoc = CreateMenu();//Menu Pomoc
AppendMenu(mPomoc, MF_STRING, 200, TEXT("&Tetris-informacje"));
mGlowne = CreateMenu(); //Menu Glowne
AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mGra, TEXT("&Gra"));
AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mPomoc, TEXT("&Pomoc"));
SetMenu(okno, mGlowne);
DrawMenuBar(okno);
SetTimer(okno, 1, 1000, NULL); //Ustawienie Timera prędkość gry(animation)
return 0;
case WM_COMMAND: //reakcje na wybór opcji z menu
switch (wParam)
{
case 100: if(MessageBox(okno, TEXT("Czy chcesz rozpoczać nową gre"), TEXT("Jeszcze nie teraz ;)"), MB_YESNO) == IDYES)
MessageBeep(0);
break;
case 101: if(MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK) == IDYES)
MessageBeep(0);
break;
case 102: if(MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK) == IDYES)
MessageBeep(0);
break;
case 103: DestroyWindow(okno); //wysylamy meldunek WM_DESTROY
break;
case 200: MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK);
}
return 0;
case WM_KEYDOWN: //meldunek wcisniecia klawisza
{
switch (wParam)
{
case VK_RIGHT:
break;
case VK_LEFT:
break;
}
}
case WM_KEYUP: //meldunek zwolnienia klawisza
return 0;
case WM_LBUTTONDOWN: //reakcja na lewy przycisk myszki
{
int x = LOWORD(lParam);
int y = HIWORD(lParam);
return 0;
}
case WM_TIMER: //Zadania odświerzania okna
{
InvalidateRect(okno,0,true);
return 0;
}
////////////////////////////////////////////RYSOWANIE
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdcOkno;
RECT r;
hdcOkno = BeginPaint(okno, &ps);
r.left = 0;
r.top = 10;
r.right = 400;
r.bottom = 100;
SetTextColor(hdcOkno,RGB(255,255,0));
SetBkColor(hdcOkno,RGB(0,0,0));
DrawText(hdcOkno,TEXT("A to kiedyś zadziała ??? ;-) "),-1,&r,DT_CENTER);
r.top = 30;
DrawText(hdcOkno,TEXT("!! TETRIS !!"),-1,&r,DT_CENTER);
//Gra A(hdcOkno);
//A.RuchKlocek(hdcOkno);
EndPaint (okno, &ps);
return 0;
}
case WM_DESTROY: //obowiązkowa obsługa meldunku o zamknięciu okna
PostQuitMessage (0) ;
return 0;
default: //standardowa obsługa pozostałych meldunków
return DefWindowProc(okno, kod_meldunku, wParam, lParam);
}
}