• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JuSt

[C++ e OpenGL] Ajuda: Não deixar redimensionar a janela (Resolvido)

27 mensagens neste tópico

Estou fazer um projecto para a faculdade que consiste em fazer o minesweeper. Esta ser desenvolvido em C++ e OpenGl.

O que eu gostava de saber é se existe alguma maneira de fazer desaparecer ou desactivar o botao maximizar da janela onde vai abrir o jogo.

Cumprimentos e Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei como funciona o OpenGL, mas nos IDE's costuma haver uma opção para desactizar os botões. Não faço mesmo ideia  :bored:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou fazer um projecto para a faculdade que consiste em fazer o minesweeper. Esta ser desenvolvido em C++ e OpenGl.

O que eu gostava de saber é se existe alguma maneira de fazer desaparecer ou desactivar o botao maximizar da janela onde vai abrir o jogo.

Cumprimentos e Obrigado

pois ja somos 2....  eu ando a trabalhar em C++ / Opengl, já fiz 3 trabalhos e em todos dava-me jeito ter uma opção para não deixar redimensionar a janela.... não consegui  :thumbsup:

já agora deixo aqui o link do meu jogo do galo fiz... jogo do galo em C++/opengl

gostaria de ver depois o teu resultado final....  :D

já agora usas que biblioteca? eu só posso usar o glut.h  :P  que mau...o glaux. é bem melhor, tem mais coisas....  :dontgetit:

Caso descobras a solução para a nossa duvida... diz a solução ...

Obrigada

Tofas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tambem so uso a glut.

Depois ponho este e o segundo que estou fazer. no outro tambem fazia jeito o que perguntei mas como nao achei paciencia. Tambem para aquele programa não era necessario.

Mas neste é. Vamos la ver o que se consegue. Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois o problema é que esta ser feito em modo consola

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em modo consola como? Não estás a criar a janela de visualização para o OpenGL? Verifica se ao criares a janela, usas as funções que aparecem no link.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A funçao de Opengl que cria a janela so aceita um parametro (ponteiro para char) que é o nome da janela.

Ja procurei no google por alguma funçao de opengl para fazer o que quero mas ate agora nada..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em princípio bastará colocares este código:

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("NOME DA JANELA PASSADO A glutCreateWindow()"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
gwl&=(~WS_MAXIMIZEBOX);
SetWindowLong(hWnd, GWL_STYLE, gwl);

imediatamente antes da chamada à função glutMainLoop() (tendo o cuidado de alterar o nome da janela na 1ª linha :D)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigada funcionou perfeitamente

tofa podes usar o mesmo codigo para os teus programas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em princípio bastará colocares este código:

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("NOME DA JANELA PASSADO A glutCreateWindow()"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
gwl&=(~WS_MAXIMIZEBOX);
SetWindowLong(hWnd, GWL_STYLE, gwl);

imediatamente antes da chamada à função glutMainLoop() (tendo o cuidado de alterar o nome da janela na 1ª linha :D)

Muito bom mesmo, funciona perfeitamente  :cheesygrin:

Eu também na altura em que tinha gráf. comp. não sabia como se fazia.

Cumpr. brink@ero      ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em princípio bastará colocares este código:

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("NOME DA JANELA PASSADO A glutCreateWindow()"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
gwl&=(~WS_MAXIMIZEBOX);
SetWindowLong(hWnd, GWL_STYLE, gwl);

imediatamente antes da chamada à função glutMainLoop() (tendo o cuidado de alterar o nome da janela na 1ª linha :D)

ehehhe :cheesygrin:

é mesmo isso que pretendo... fixe!!  ;)

obrigada...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outras duvidas:

        Se poderem tambem para fazer desaparecer o botao de fechar. ( Este já descobri)

        Para criação de uma nova janela, isto é, alem da janela main uma segunda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

        Se poderem tambem para fazer desaparecer o botao de fechar. ( Este já descobri)

Então posta aí o que é preciso que eu não cheguei a nenhuma conclusão :;) Só consegui fazer desaparecer os 3 botões...

        Para criação de uma nova janela, isto é, alem da janela main uma segunda.

Suponho que para criação de outra janela num mesmo programa, tenhas que criar um novo thread...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como isto não aparece nenhum dos botoes

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("Projecto de EDA - MineSweeper"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
gwl&=(~WS_SYSMENU);
SetWindowLong(hWnd, GWL_STYLE, gwl);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo. Aí já tinha chegado. Pensei que querias ficar com o botão de minimizar activo. Mas isso é mt mais complicado. Penso que estou a chegar lá agora... Já digo resultados, se chegar a tê-los!

EDIT

Algumas centenas de linhas de código depois, e muitas páginas do MSDN lidas... finalmente encontrei a forma de desligar o botão de fechar a janela, mantendo os outros activos (maximizar e minimizar):

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("NOME DA JANELA PASSADO A glutCreateWindow()"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
//para desligar os outros botoes, descomentar as duas linhas abaixo
//gwl&=(~WS_MAXIMIZEBOX)&(~WS_MINIMIZEBOX);
//SetWindowLong(hWnd, GWL_STYLE, gwl);

//apanhar o menu do canto esquerdo da barra de titulo
HMENU sysMenu = GetSystemMenu(hWnd, false);

//ver se o menu contem comandos
int mnucnt;
if ((mnucnt = GetMenuItemCount(sysMenu))>0)
	//por a opcao "Fechar" a cinzento
	EnableMenuItem(sysMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

então e impedir de dimensionar a janela ?

Aqui está o modo como fazes desactivar o botão maximizar já respondido:

Em princípio bastará colocares este código:

	HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("NOME DA JANELA PASSADO A glutCreateWindow()"));
LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
gwl&=(~WS_MAXIMIZEBOX);
SetWindowLong(hWnd, GWL_STYLE, gwl);

imediatamente antes da chamada à função glutMainLoop() (tendo o cuidado de alterar o nome da janela na 1ª linha :D)

Se quiseres que a janela tenha sempre a mesma dimensão, sempre podes pegar na função do openGL que é chamada quando tentas redimensionar e forças o tamanho original da janela.

Cumpr. bk@ero  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já agora, como e que conseguem declarar um array multidimensional ?

alguma dica?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basta isto por exemplo, podes dar-lhe quantas dimensões quiseres:

int lista[10][20][5]....;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou tentando colocar em uma função:

void SemMaxeMin(HWND hwnd)
{
 HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("Menu"));
 LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
 gwl&=(~WS_MAXIMIZEBOX);
 gwl&=(~WS_MINIMIZEBOX);
 SetWindowLong(hWnd, GWL_STYLE, gwl);	  
}

Será que assim funciona?

Como eu chamaria essa função no Main, apenas SemMaxeMin?

     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(800, 600);
 glutCreateWindow("Menu");
 SemMaxeMin;

Assim funciona também?

void  SemMaxeMin(HWND hwnd)
{
   SetWindowLong(hwnd, GWL_STYLE,
   GetWindowLong(hwnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
}

Como eu chamaria essa função no Main?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui desse jeito

void  SemMaxeMin(HWND hwnd)
{
  SetWindowLong(hwnd, GWL_STYLE,
  GetWindowLong(hwnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
}

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("Menu");
SemMaxeMin (FindWindow(TEXT("GLUT"),TEXT("Menu")));

Tem como funcionar sem o " (FindWindow(TEXT("GLUT"),TEXT("Menu"))); "?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é uma maneira muito estranha de o fazer, mas como o GLUT não suporta esse aspecto da janela, bem podes tentar.

pelo que tive a ver, o GLUT regista as janelas na classe "GLUT", logo o código dentro da função SemMaxeMin parece correcto.

no entanto a tua dúvida e apresentação de solução demonstra sérias lacunas sobre a linguagem ...

1º - esta a dizer que vais chamar a função sem lhe dares os parênteses ??

2º - tens um argumento da função que será imediatamente redeclarado na primeira linha da função ???

conclusão : primeiro estuda bem como declarar e invocar funções e depois altera o código para:

void SemMaxeMin()
{
 HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("Menu"));
 LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
 gwl&=(~WS_MAXIMIZEBOX);
 gwl&=(~WS_MINIMIZEBOX);
 SetWindowLong(hWnd, GWL_STYLE, gwl);      
}

int main()
{
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(800, 600); 
 glutCreateWindow("Menu");
 SemMaxeMin();
 return 0;
}

sim, coloquei o código dentro das tags de C porque é código C ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo com o uso da função: SemMaxeMin está sendo possível mudar a resolução da tela pela extremidade da janela, é possível impedir isso?

janela.png

é uma maneira muito estranha de o fazer, mas como o GLUT não suporta esse aspecto da janela, bem podes tentar.

pelo que tive a ver, o GLUT regista as janelas na classe "GLUT", logo o código dentro da função SemMaxeMin parece correcto.

no entanto a tua dúvida e apresentação de solução demonstra sérias lacunas sobre a linguagem ...

1º - esta a dizer que vais chamar a função sem lhe dares os parênteses ??

2º - tens um argumento da função que será imediatamente redeclarado na primeira linha da função ???

conclusão : primeiro estuda bem como declarar e invocar funções e depois altera o código para:

void SemMaxeMin()
{
 HWND hWnd=FindWindow(TEXT("GLUT"), TEXT("Menu"));
 LONG gwl=GetWindowLong(hWnd, GWL_STYLE);
 gwl&=(~WS_MAXIMIZEBOX);
 gwl&=(~WS_MINIMIZEBOX);
 SetWindowLong(hWnd, GWL_STYLE, gwl);	  
}

int main()
{
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(800, 600);
 glutCreateWindow("Menu");
 SemMaxeMin();
 return 0;
}

sim, coloquei o código dentro das tags de C porque é código C ...

Já resolvi essa parte, estava vacilando em relação as funções, mas verifiquei direito a sintaxe e corrigir, minha dúvida no momento é como eu posso resolver isso:

Mesmo com o uso da função: SemMaxeMin está sendo possível mudar a resolução da tela pela extremidade da janela, é possível impedir isso?

janela.png

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora