Partage

Windows.h et SFML

27 août 2018 à 14:50:53

Bonjour,

Tout d'abord merci de prendre le temps de m'aider.

Je reviens vers vous car il n'y a pas longtemps on m'a conseiller d'utiliser SFML au lieu de QT pour creer un RPG et il est vrai que c'est un peu plus facile mais aussi plus dur d'ou ma presence.

Donc je suis en train de creer un editeur de jeu pour creer un RPG mais j'ai fais fase a un probleme qui est que je ne peux pas avoir de menubar sauf si je passe par des rectangle clickable mais je ne trouve pas cette solution approprie puisque je veux faire un vrai menu, deroulant avec des sous menu ....

Donc je fais des recherche et je vois qu'avec la lib Windows.h on peut faire des menu de plus comme je l'utilisais deja cela m'a paru etre la solution la plus approprie.

De ce fait j'essaye de transferer tout ce que j'ai deja fait (car oui j'ai deja bien avancer et j'avais oublie la bar de menu au depart) avec une fenetre SFML sur une fenetre Windows.h. Jusque la tout va bien je trouve des exemple sur Internet associant windows.h et SFML mais y a un probleme c'est que apres avoir fait tout ce qui devrait etre fait ben quand je lance le programme ben un enorme ecran noir apparait et si je ne connais pas la position de la console ben je ne peux pas fermer mon programme ce qui est on peut le dire assez embetant (la derniere fois je suis rester 10 minutes a la chercher xD).

Donc ci dessous vous trouverez mon code et merci de bien vouloir m'aider car je ne trouve vraiment pas ou est mon erreur.

Game.cpp

#include "Game.h"

LRESULT CALLBACK onEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_CLOSE:
	{
		PostQuitMessage(0);
		return 0;
	}
	}
	return DefWindowProc(handle, message, wParam, lParam);
}

Game::Game() /*:
	map1("tiles/tileset2.png"),
	instance(GetModuleHandle(NULL)),
	window(CreateWindow(TEXT("Game Editor RPG"), TEXT("Game Editor RPG"), WS_SYSMENU | WS_VISIBLE, 200, 200,
		800, 660, NULL, NULL, instance, NULL)),
	viewnivo(CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 20, 20,
		640, 640, window, NULL, instance, NULL)),
	viewtiles(CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 650, 20,
		288, 576, window, NULL, instance, NULL)),
	window_niveau(viewnivo),
	window_tiles(viewtiles)*/
	
{

	window = CreateWindow(TEXT("Game Editor RPG"), TEXT("Game Editor RPG"), WS_SYSMENU | WS_VISIBLE, 200, 200,
		800, 660, NULL, NULL, instance, NULL);
	viewnivo = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 20, 20,
		640, 640, window, NULL, instance, NULL);
	viewtiles = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 650, 20,
		288, 576, window, NULL, instance, NULL);
	window_niveau.create(viewnivo);
	window_tiles.create(viewtiles);

	WNDCLASS windowClass;
	windowClass.style = 0;
	windowClass.lpfnWndProc = &onEvent;
	windowClass.cbClsExtra = 0;
	windowClass.cbWndExtra = 0;
	windowClass.hInstance = instance;
	windowClass.hIcon = NULL;
	windowClass.hCursor = 0;
	windowClass.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND);
	windowClass.lpszMenuName = NULL;
	windowClass.lpszClassName = TEXT("Game Editor RPG");
	RegisterClass(&windowClass);

	MSG message;
	message.message = static_cast<UINT>(~WM_QUIT);
	
	while (message.message != WM_QUIT)
	{
		if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
		{
			// If a message was waiting in the message queue, process it
			TranslateMessage(&message);
			DispatchMessage(&message);
		}
		else
		{
			//map1.gestion_clavier();
			window_niveau.clear();
			//map1.drawMap(window_niveau);
			window_niveau.display();
			window_tiles.clear();
			//map1.drawTiles(window_tiles);
			window_tiles.display();
		}
	}

	DestroyWindow(window);
	UnregisterClass(TEXT("Game Editor RPG"), instance);
}

Game.h

#ifndef GAME_HEADER
#define GAME_HEADER

#include <SFML/Graphics.hpp>
#include <string>
#include <windows.h>

class Game
{
public:
	Game();

private:
	HINSTANCE instance;
	HWND window;
	HWND viewnivo;
	HWND viewtiles;
	sf::RenderWindow window_niveau;
	sf::RenderWindow window_tiles;
	Map map1;
};


#endif // !GAME_HEADER

et le main.cpp

#include "Game.h"
#include <SFML/Window.hpp>

int main()
{
	Game game;
	return 0;
}

Cordialement.

Samuel CASAS DRAY.

EDIT : Finalement ça vient de marcher apres quelque tentative en placant des truc avant d'autre pourtant j'avais deja essayer et ça n'avait pas marcher mais bon sujet resolu (je le met pas en resolu je le ferais a la fin de la journee on sait jamais :p )

EDIT2 : a chaque fois que je lance le programme cela affiche "Failed to activate OpenGL context: Descripteur non valide" qu'est ce que ça veut dire ?

EDIT3 : Comment je fais pour passer le onevent en fonction de Game pour pouvoir utiliser les attribut de Game tel que map1 ? (et je sais il commence a y avoir beaucoup de EDIT xD)



-
Edité par samuelcasasdray1 27 août 2018 à 15:26:54

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
27 août 2018 à 15:39:05

Tout ce qui est dans "windows.h" n'est pas portable (fonctionne que sous windows) d'où le nom.

Sinon pourquoi utiliser une classe Game ? Et il me semble que la SFML permet de le faire, mais je ne la connais pas assez, sinon tu peux le faire "à la main"

27 août 2018 à 15:42:40

>on m'a conseiller d'utiliser SFML au lieu de QT pour creer un RPG

Je doute de la pertinence de ce conseil, même si je ne connais ni SFML ni Qt au-delà de leur description sommaire.

Mais pour faire un éditeur, il y a clairement pas photo, il ne faut pas utiliser SFML qui n'est qu'une librairie graphique.

Qt s'intègre plus ou moins au système de fenêtrage de l'OS hôte, ce qui lui permet d'utiliser les mécanismes de menu de l'OS (ou de les simuler).

Vous devez prendre les outils les plus adaptés à la tâche à faire. Peut-être que SFML est ce qu'il faut pour de l'affichage performant du jeu, mais c'est clairement pas celui pour un éditeur.

Pour intégrer votre affichage SFML dans Qt, Google, mon ami, donne :

https://www.sfml-dev.org/tutorials/1.6/graphics-qt-fr.php

>la lib Windows.h

Windows.h n'est pas une librairie/bibliothèque, bordel !!!!

C'est juste un fichier d'en-tête qui inclus d'autres fichiers d'en-tête (en fonction de constantes de compilation); ces fichiers contenant des déclarations par grands domaines, des constantes et autres fonctions C de l'API Win32 (version pilotée aussi par des constantes de compilation). Win32 n'est qu'une des API "sous-système", comme l'API POSIX, qui encapsule l'API native du Kernel NT (depuis Win2000/WinXP).

Les  librairies/bibliothèques (sauf les bibliothèques "header only"), c'est des .a ou des .lib, en fonction de la chaine compilation.

Ça fait près de 20 ans qu'il NE faut "raisonnablement" PAS utiliser directement cette API C.

De plus, comme toutes API C, elle doit être wrappé pour être correctement utilisé en C++.

Mais bon, entre les MFC, WTL, WinForms, WPF (pour les trucs M$) et les librairies tiers comme Qt, WxWidgets, BCL et toutes les autres librairies pour interface utilisateur ayant un portage Windows (ça se compte par dizaines, voire centaines), vouloir utiliser une API C datant en très grande partie des années 1982/1985, c'est plus du masochisme, faut consulter.

Bon, vous tentez de faire votre éditeur dans Qt, ça sera bien plus raisonnable (encore plus si vous connaissez déjà Qt).

Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

Windows.h et SFML

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown