Ir para o conteúdo
JuSt

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

Mensagens Recomendadas

JuSt    0
JuSt

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

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:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
saramgsilva    2
saramgsilva

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JuSt    0
JuSt

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
neon_prannock    0
neon_prannock

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JuSt    0
JuSt

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..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brink@ero    0
brink@ero

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      ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
saramgsilva    2
saramgsilva

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JuSt    0
JuSt

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

        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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JuSt    0
JuSt

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);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brink@ero    0
brink@ero

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hemerson    0
Hemerson

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hemerson    0
Hemerson

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"))); "?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1133
HappyHippyHippo

é 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 ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hemerson    0
Hemerson

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade