Sign in to follow this  

How to fix windows.h include problem.

This topic is 4106 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I've been running through the one-hour Tetris clone posted under useful sources (which has taken me about 4 hours--I have to keep stopping and looking up what things do on MSDN), but when it came to compile time, I got two errors:
1>------ Build started: Project: tetris for evan, Configuration: Debug Win32 ------
1>Compiling...
1>bitmapobject.cpp
1>c:\documents and settings\elane\my documents\visual studio 2005\projects\tetris for evan\tetris for evan\bitmapobject.h(4) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
1>main.cpp
1>c:\documents and settings\elane\my documents\visual studio 2005\projects\tetris for evan\tetris for evan\main.cpp(2) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
1>Generating Code...
1>Build log was saved at "file://c:\Documents and Settings\elane\My Documents\Visual Studio 2005\Projects\tetris for evan\tetris for evan\Debug\BuildLog.htm"
1>tetris for evan - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


If it matters, my code looks like this: main.cpp:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib>
#include "bitmapobject.h"

#define WINDOWCLASS "FallingBlockGame"
#define WINDOWTITLE "A Falling Block Game!"

const int TILESIZE=16;
const int MAPWIDTH=10;
const int MAPHEIGHT=30;
const int GREY=8;

const int TILENODRAW=-1;
const int TILEBLACK=0;
const int TILEGREY=1;
const int TILEBLUE=2;
const int TILERED=3;
const int TILEGREEN=4;
const int TILEYELLOW=5;
const int TILEWHITE=6;
const int TILESTEEL=7;
const int TILEPURPLE=8;

bool GameInit();
void GameLoop();
void GameDone();
void DrawTile(int x, int y, int tile);
void DrawMap();
void NewBlock();
void RotateBlock();
void Move(int x, int y);
int CollisionTest(int nx, int ny);
void RemoveRow(int row);
void NewGame();

HINSTANCE hInstMain=NULL;
HWND hWndMain=NULL;

int Map[MAPWIDTH][MAPHEIGHT + 1];

struct Piece {
	int size[4][4];
	int x;
	int y;
};

Piece sPrePiece;
Piece sPiece;

DWORD start_time;
bool GAMESTARTED=false;

BitMapObject bmoMap;
BitMapObject bmoBlocks;

LRESULT CALLBACK TheWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_KEYDOWN:
		{
			if(wParam==VK_ESCAPE)
			{
				DestroyWindow(hWndMain);
				return(0);
			}
			else if(wParam==VK_DOWN)
			{
				Move(0,1);
				return(0);
			}
			else if(wParam==VK_UP)

			{
				RotateBlock();
				return(0);
			}
			else if(wParam==VK_LEFT)
			{
				Move(-1,0);
				return(0);
			}
			else if(wParam==VK_RIGHT)
			{
				Move(1,0);
				return(0);
			}
		}break;
	case WM_DESTROY:
		{
			PostQuitMessage(0);
			return(0);
		}break;
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc=BeginPaint(hwnd, &ps);

			BitBlt(hdc,0,0,TILESIZE*MAPWIDTH+TILESIZE*GREY,TILESIZE*MAPHEIGHT, bmomap,0,0,SRCCOPY);

			EndPaint(hwnd, &ps);

			return(0);
		}break;
	}

	return(DefWindowProc(hwnd,uMsg,wParam,lParam);
}


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	//assign instance to global variable
	hInstMain=hInstance;

	//create window class
	WNDCLASSEX wcx;

	//set the size of the structure
	wcx.cbSize=sizeof(WNDCLASSEX);

	//class style
	wcx.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

	//window procedure
	wcx.lpfnWndProc=TheWindowProc;

	//class extra
	wcx.cbClsExtra=0;

	//window extra
	wcx.cbWndExtra=0;

	//application handle
	wcx.hInstance=hInstMain;

	//icon
	wcx.hIcon=LoadIcon(NULL,IDI_APPLICATION);

	//cursor
	wcx.hCursor=LoadCursor(NULL,IDC_ARROW);

	//background color
	wcx.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

	//menu
	wcx.lpszMenuName=NULL;

	//class name
	wcx.lpszClassName=WINDOWCLASS;

	//small icon
	wcx.hIconSm=NULL;

	//register the window class, return 0 if not successful
	if(!RegisterClassEx(&wcx)) return(0);

	//create main window
	hWndMain=CreateWindowEx(0,WINDOWCLASS,WINDOWTITLE, WS_BORDER | WS_SYSMENU | WS_CAPTION| WS_VISIBLE,0,0,320,240,NULL,NULL,hInstMain,NULL);

	//error check
	if(!hWndMain) return(0);

	//if program initialization failed, then return with 0
	if(!GameInit()) return(0);

	//message structure
	MSG msg;

	//message pump
	for( ; ; )	
	{
		//look for a message
		if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
		{
			//there is a message

			//check that we arent quitting
			if(msg.message==WM_QUIT) break;
			
			//translate message
			TranslateMessage(&msg);

			//dispatch message
			DispatchMessage(&msg);
		}

		//run main game loop
		GameLoop();
		
	}
	
	//clean up program data
	GameDone();

	//return the wparam from the WM_QUIT message
	return(msg.wParam);
}
          
bool GameInit()
{
	RECT rcTemp;
	SetRect(&rcTemp,0,0,MAPWIDTH*TILESIZE+MAPWIDTH*GREY, MAPHEIGHT*TILESIZE);
	AdjustWindowRect(&rcTemp,WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_VISIBLE, FALSE);
	SetWindowPos(hWndMain,NULL,0,0,rcTemp.right-rcTemp.left, rcTemp.bottom-rcTemp.top, SWP_NOMOVE);

	HDC hdc=GetDC(hWndMain);
	bmoMap.Create(hdc, MAPWIDTH*TILESIZE+MAPWIDTH*GREY, MAPHEIGHT*TILESIZE);
	FillRect(bmoMap, &rcTemp, (HBRUSH)GetStockObject(BLACK_BRUSH);
	ReleaseDC(hWndMain, hdc);

	bmoBlocks.Load(NULL, "blocks.bmp");
	NewGame();

	return(true);
}

void GameDone()
{
}

void GameLoop()
{
	if( (GetTickCount() - start_time) > 1000)
	{
		Move(0,1);
		start_time=GetTickCount;
	}
}

void NewGame()
{
	start_time=GetTickCount();
	GAMESTARTED=false;

	for(int x=0; x<MAPWIDTH; x++)
	{
		for(int y=0;y<MAPHEIGHT+1;y++)
		{
			if(y==MAPHEIGHT)
				MAP[x][y]=TILEGREY;
			else
				MAP[x][y]=TILEBLACK;
		}
	}
	NewBlock();

	DrawMap;
}

void DrawTile(int x, int y, int tile)
{
	BitBlt(bmoMap, x*TILESIZE, y*TILESIZE, TILESIZE, TILESIZE, bmoBlocks, tile*TILESIZE, TILESIZE, SRCAND);
	BitBlt(bmoMap, x*TILESIZE, y*TILESIZE, TILESIZE, TILESIZE, bmoBlocks, tile*TILESIZE, 0, SRCPAINT);
}

void DrawMap()
{
	int xmy, ymx;

	for(xmy=MAPWIDTH; xmy< MAPWIDTH+GREY; xmy++)
		for(ymx=0; ymx< MAPHEIGHT; ymx++)
			DrawTile(xmy, ymx, TILEGREY);

	for(xmy=0; xmy<4; xmy++)
		for(ymx=0; ymx<4; ymx++)
			if(sPrePiece.size[xmy][ymx] != TILENODRAW)
				DrawTile(sPiece.x+xmy, sPiece.y+ymx, sPiece.size[xmy][ymx]);
	InvalidateRect(hWndMain, NULL, FALSE);
}

void NewBlock()
{
	int newblock;
	int i,j;
	//  0   1   2   3   4    5   6    
	//   X                             These
	//   X   XX   X  XX   XX  XX   XX  are
	//   X   XX  XXX  XX XX    X   X   block
	//   X                     X   X   types

	//begin game! make generate a block and then one in preview.

	srand(GetTickCount());


	//initialize the piece to all blank.
	for(i=0; i<4; i++)
		for(j=0; j<4; j++)
			sPiece.size[ i ][j]=TILENODRAW;

	sPiece.x=MAPWIDTH/2-2;
	sPiece.y=-1;

	//let's see if the game's started yet
	if(GAMESTARTED == false)
	{
		//guess not..  
		//Generate a piece right off.
		//From now on, use previous preview block.
		GAMESTARTED=true;

		newblock=rand()%7;

		switch (newblock)
		{
		case 0: //Tower!
			{
				sPiece.size[1][0]=TILERED;
				sPiece.size[1][1]=TILERED;
				sPiece.size[1][2]=TILERED;
				sPiece.size[1][3]=TILERED;
				sPiece.y=0;
			}break;
		case 1: //Box!
			{
				sPiece.size[1][1]=TILEBLUE;
				sPiece.size[1][2]=TILEBLUE;
				sPiece.size[2][1]=TILEBLUE;
				sPiece.size[2][2]=TILEBLUE;
			}break;
		case 2: //Pyramid!
			{
				sPiece.size[1][1]=TILESTEEL;
				sPiece.size[0][2]=TILESTEEL;
				sPiece.size[1][2]=TILESTEEL;
				sPiece.size[2][2]=TILESTEEL;
			}break;
		case 3://Left Leaner
			{
				sPiece.size[0][1]=TILEYELLOW;
				sPiece.size[1][1]=TILEYELLOW;
				sPiece.size[1][2]=TILEYELLOW;
				sPiece.size[2][2]=TILEYELLOW;
			}break;
		case 4://Right Leaner
			{
				sPiece.size[2][1]=TILEGREEN;
				sPiece.size[1][1]=TILEGREEN;
				sPiece.size[1][2]=TILEGREEN;
				sPiece.size[0][2]=TILEGREEN;
			}break;
		case 5://Left Knight
			{
				sPiece.size[1][1]=TILEWHITE;
				sPiece.size[2][1]=TILEWHITE;
				sPiece.size[2][2]=TILEWHITE;
				sPiece.size[2][3]=TILEWHITE;
			}break;
		case 6://Right Knight
			{
				sPiece.size[2][1]=TILEPURPLE;
				sPiece.size[1][1]=TILEPURPLE;
				sPiece.size[1][2]=TILEPURPLE;
				sPiece.size[1][3]=TILEPURPLE;
			}break;
		}
	}
	else
	{
		for(i=0; i<4; i++)
			for(j=0; j<4; j++)
				sPiece.size[ i ][j]=sPrePiece.size[ i ][j];

	}

	newblock=rand()%7;

	for(i=0; i<4; i++)
		for(j=0; j<4; j++)
			sPrePiece.size[ i ][j]=TILENODRAW;

	sPrePiece.x=MAPWIDTH+GREY/4;
	sPrePiece.y=GREY/4;

	switch (newblock)
	{
		case 0: //Tower!
			{
				sPrePiece.size[1][0]=TILERED;
				sPrePiece.size[1][1]=TILERED;
				sPrePiece.size[1][2]=TILERED;
				sPrePiece.size[1][3]=TILERED;
			}break;
		case 1: //Box!
			{
				sPrePiece.size[1][1]=TILEBLUE;
				sPrePiece.size[1][2]=TILEBLUE;
				sPrePiece.size[2][1]=TILEBLUE;
				sPrePiece.size[2][2]=TILEBLUE;
			}break;
		case 2: //Pyramid!
			{
				sPrePiece.size[1][1]=TILESTEEL;
				sPrePiece.size[0][2]=TILESTEEL;
				sPrePiece.size[1][2]=TILESTEEL;
				sPrePiece.size[2][2]=TILESTEEL;
			}break;
		case 3://Left Leaner
			{
				sPrePiece.size[0][1]=TILEYELLOW;
				sPrePiece.size[1][1]=TILEYELLOW;
				sPrePiece.size[1][2]=TILEYELLOW;
				sPrePiece.size[2][2]=TILEYELLOW;
			}break;
		case 4://Right Leaner
			{
				sPrePiece.size[2][1]=TILEGREEN;
				sPrePiece.size[1][1]=TILEGREEN;
				sPrePiece.size[1][2]=TILEGREEN;
				sPrePiece.size[0][2]=TILEGREEN;
			}break;
		case 5://Left Knight
			{
				sPrePiece.size[1][1]=TILEWHITE;
				sPrePiece.size[2][1]=TILEWHITE;
				sPrePiece.size[2][2]=TILEWHITE;
				sPrePiece.size[2][3]=TILEWHITE;
			}break;
		case 6://Right Knight
			{
				sPrePiece.size[2][1]=TILEPURPLE;
				sPrePiece.size[1][1]=TILEPURPLE;
				sPrePiece.size[1][2]=TILEPURPLE;
				sPrePiece.size[1][3]=TILEPURPLE;
			}break;
	}

	DrawMap();
}

void RotateBlock()
{
	int i,j, temp[4][4];

	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			temp[3-j][i]=sPiece.size[i][j];
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			if(temp[i][j] != TILENODRAW)
				if(sPiece.x + i <0 || sPiece.x +i > MAPWIDTH -1 || sPiece.y + j <0 || sPiece.y +j > MAPHEIGHT -1)
					return;
	for(int x=0; x<MAPWIDTH; x++)
		for(int y=0; y<MAPHEIGHT; y++)
			if(x >=sPiece.x && x <sPiece.x +4)
				if(y >=sPiece.y && y < sPiece.y +4)
					if(Map[x][y] != TILEBLACK)
						if(temp[x-sPiece.x][y-sPiece.y] != TILENODRAW)
							return;
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			sPiece.size[i][j]=temp[i][j];
	
	DrawMap();
	return;
}


void Move(int x, int y)
{
	if(CollisionTest(x, y))
	{
		if(y == 1)
		{
			if(sPiece.y<1)
			{
				//you lose!  new game.
				NewGame();
			}
			else
			{
				bool killblock=false;
				int i,j;
				//new block time! add this one to the list!
				for(i=0; i<4; i++)
					for(j=0; j<4; j++)
						if(sPiece.size[ i ][j] != TILENODRAW)
							Map[sPiece.x+i][sPiece.y+j] = sPiece.size[ i ][j];

				//check for cleared row!
				for(j=0; j< MAPHEIGHT; j++)
				{
					bool filled=true;
					for(i=0; i< MAPWIDTH; i++)
						if(Map[ i ][j] == TILEBLACK)
							filled=false;

					if(filled)
					{
						RemoveRow(j);
						killblock=true;
					}
				}

				if(killblock)
				{
					for(i=0; i<4; i++)
						for(j=0; j<4; j++)
							sPiece.size[ i ][j]=TILENODRAW;
				}
				NewBlock();
			}
		}

	}
	else
	{
		sPiece.x+=x;
		sPiece.y+=y;
	}

	DrawMap();
}


int CollisionTest(int nx, int ny)
{
	int newx=sPiece.x+nx;
	int newy=sPiece.y+ny;

	int i,j,x,y;

	for(i=0; i< 4; i++)
		for(j=0; j< 4; j++)
			if(sPiece.size[ i ][j] != TILENODRAW)
				if(newx + i < 0 || newx + i > MAPWIDTH - 1 ||
					newy + j < 0 || newy + j > MAPHEIGHT - 1)
					return 1;

	for(x=0; x< MAPWIDTH; x++)
		for(y=0; y< MAPHEIGHT; y++)
			if(x >= newx && x < newx + 4)
				if(y >= newy && y < newy +4)
					if(Map[x][y] != TILEBLACK)
						if(sPiece.size[x - newx][y - newy] != TILENODRAW)
							return 1;
	return 0;
}
    

void RemoveRow(int row)
{
	int x,y;
	int counter=0;

	for(x=0; x< MAPWIDTH; x++)
		for(y=row; y>0; y--)
			Map[x][y]=Map[x][y-1];

}
          


bitmapobject.cpp:
#include "bitmapobject.h"

BitMapObject::BitMapObject()
{
	hdcMemory=NULL;
	hbmNewBitMap=NULL;
	hbmOldBitMap=NULL;
	iWidth=0;
	iHeight=0;
}

BitMapObject::~BitMapObject()
{
	if(hdcMemory)
		Destroy();
}


void BitMapObject::Load(HDC hdcCompatible, LPCTSTR lpszFilename)
{
	if(hdcMemory)
		Destroy();

	hdcMemory=CreateCompatibleDC(hdcCompatible);
	hbmNewBitMap=CreateCompatibleBitmap(hdcCompatible, width, height);
	hbmOldBitMap=(HBITMAP)SelectObject(hdcMemory, hbmNewBitMap);
	iWidth=width;
	iHeight=height;
}

void BitMapObject::Destroy()
{
	SelectObject(hdcMemory, hbmOldBitMap);
	DeleteObject(hbmNewBitMap);
	DeleteDC(hdcMemory);
	hdcMemory=NULL;
	hbmNewBitMap=NULL;
	hbmOldBitMap=NULL;
	iWidth=0;
	iHeight=0;
}

BitMapObject::operator HDC()
{
	return(hdcMemory);
}

int BitMapObject::GetWidth()
{
	return(iWidth);
}

int BitMapObject::GetHeight()
{
	return(iHeight);
}



bitmapobject.h
#ifndef BITMAPOBJECT_H
#define BITMAPOBJECT_H
#pragma once
#include <windows.h>

class BitMapObject
{
private:
	HDC hdcMemory;
	HBITMAP hbmNewBitMap;
	HBITMAP hbmOldBitMap;
	int iWidth;
	int iHeight;
public:
	BitMapObject();  //Constructor
	~BitMapObject(); //Destructor
	void Load(HDC hdcCompatible, LPCTSTR lpszFilename);
	void Create(HDC hdcCompatible, int width, int height);
	void Destroy();
	int GetWidth();
	int GetHeight();
	operator HDC();
};

#endif


Any help would be appreciated! Evan.

Share this post


Link to post
Share on other sites
I'm using Visual C++ Express 2005, and there was no option for Win32 app. Just Win32 Console--so I picked that one. I'm sure that's what's wrong with it.

Which one should I have picked:

Class Library
CLR Console App
CLR Empty Project
Windows Forms App

Win32 Console

Empty Project
Makefile Project

?

Share this post


Link to post
Share on other sites

This topic is 4106 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this