Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Запретить изменять размеры окна


Автор: Elday 28.3.2009, 17:56
Как запретить пользователю изменять размер окна. 
Даже если убрать 
Код

glutReshapeFunc(reshape);

то пользователь все равно может менять размеры.
Думаю, это что-то в windows.h делает так, но не знаю что.

Автор: Alexeis 28.3.2009, 18:04
Elday, нужно сделать диалоговое окно без возможности менять размеры. Это задается в параметрах создания окна.

Добавлено через 5 минут и 23 секунды
3й параметр в CreateWindow. Если там не стоит флаг WS_SIZEBOX, WS_THICKFRAME, WS_OVERLAPPEDWINDOW, WS_TILEDWINDOW, то окно нельзя растягивать. 

Автор: Elday 28.3.2009, 18:46
Я создаю окно через 
Код

glutCreateWindow("OpenGL");


Поэтому другой вопрос, как создать окно средствами windows, которое бы полностью соответствовало glut окну ?


// Нашел на http://nehe.gamedev.net , похоже это занятие не на один день  smile 

Автор: Alexeis 29.3.2009, 12:15
Elday, можно взять и оттуда пример
Вот это будет окно с рамкой и изменяющимися размерами
Код

    hWnd = CreateWindow(
    "OpenGL WinClass",
    "Jeff Molofee's GL Code Tutorial ... NeHe '99",    // Заголовок вверху окна

    WS_POPUP |
    WS_CLIPCHILDREN |
    WS_CLIPSIBLINGS | WS_SIZEBOX,

    50, 50,            // Позиция окна на экране
    640, 480,        // Ширина и высота окна

    NULL,
    NULL,
    hInstance,
    NULL);


Вот это окно без рамки с размерами.
Код

    hWnd = CreateWindow(
    "OpenGL WinClass",
    "Jeff Molofee's GL Code Tutorial ... NeHe '99",    // Заголовок вверху окна

    WS_POPUP |
    WS_CLIPCHILDREN |
    WS_CLIPSIBLINGS,

    50, 50,            // Позиция окна на экране
    640, 480,        // Ширина и высота окна

    NULL,
    NULL,
    hInstance,
    NULL);


Добавлено @ 12:24
система управления окнами glut кросплатформенная и потому весьма ограниченная см. 
http://www.opengl.org/documentation/specs/glut/spec3/node15.html

Для нормальной работы с окнами лучше воспользоваться средставми Windows. 

Автор: Rickert 30.3.2009, 06:13
Я всегда говорил людям, чтобы они не пользовались glut'ом smile

Автор: Gryphon 1.5.2009, 10:41
Alexeis, а что в этом коде есть hInstance? Что туда пихать?)

Добавлено @ 10:51
И ещё он ругается вот так:
Код

1>error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [16]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


Никакие преобразования типов не помогают...

Автор: Alexeis 4.5.2009, 11:12
Gryphon, наверное просто проект юникодный.

Цитата(Gryphon @  1.5.2009,  09:41 Найти цитируемый пост)
а что в этом коде есть hInstance? Что туда пихать?)

Базовый адрес приложения. Он передается в WinMain.

Автор: Gryphon 4.5.2009, 11:54
Цитата(Alexeis @  4.5.2009,  12:12 Найти цитируемый пост)
Gryphon, наверное просто проект юникодный.

Ага. Спасибо, разобрался)

Цитата(Alexeis @  4.5.2009,  12:12 Найти цитируемый пост)
Базовый адрес приложения. Он передается в WinMain. 

А вот тут сложнее. У меня вообще нет WinMain — приложение изначально консольное(
В общем, я  smile  smile 
Как сделать из
Код

glutInit               ( &argc, argv );
glutInitWindowSize     ( init_widht, init_height );
glutInitWindowPosition ( init_x, init_y );
glutInitDisplayMode    ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow       ( title.c_str() );


Окно с запрещённым изменением размеров. Заранее спасибо)

Автор: Alexeis 4.5.2009, 12:15
Цитата(Gryphon @  4.5.2009,  10:54 Найти цитируемый пост)
У меня вообще нет WinMain — приложение изначально консольное(

Тогда его можно получить так 
Код

HMODULE Hinstance = GetModuleHandle(NULL);

Автор: Gryphon 4.5.2009, 12:27
Alexeis, хм, а будет ли это всё работать с glut'ом? Потому что пока что вылетает с ошибкой(

Автор: Alexeis 4.5.2009, 12:33
Цитата(Gryphon @  4.5.2009,  11:27 Найти цитируемый пост)
а будет ли это всё работать с glut'ом?

  Смотря что. Если правильно делать, то работать должно, если делать ошибки, то программа будет вылетать  smile .

Код

glutInitWindowSize     ( init_widht, init_height );
glutInitWindowPosition ( init_x, init_y );
glutInitDisplayMode    ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow       ( title.c_str() );


и 

Код

 hWnd = CreateWindow(
    "OpenGL WinClass",
    "Jeff Molofee's GL Code Tutorial ... NeHe '99",    // Заголовок вверху окна
    WS_POPUP |
    WS_CLIPCHILDREN |
    WS_CLIPSIBLINGS,
    50, 50,            // Позиция окна на экране
    640, 480,        // Ширина и высота окна
    NULL,
    NULL,
    hInstance,
    NULL);


Делают ту же работу. От чего-то все же придется отказаться. 

Автор: Gryphon 4.5.2009, 14:32
Alexeis, код:
Код

    glutInit                ( &argc, argv );
/*  glutInitWindowSize        ( init_widht, init_height );
    glutInitWindowPosition    ( init_x, init_y );
    glutInitDisplayMode        ( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow        ( title.c_str() );
*/
    HMODULE h_instance = GetModuleHandle ( NULL );

    HWND hWnd = CreateWindow ( "OpenGL WinClass",
        title.c_str(),                // Заголовок вверху окна
        WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_SIZEBOX,
        init_x, init_y,                // Позиция окна на экране
        init_widht, init_height,    // Ширина и высота окна
        NULL, NULL, h_instance,  NULL );


Ошибка http://img67.imageshack.us/img67/9338/screen149q.jpg.

Автор: Alexeis 6.5.2009, 00:12
от glutDisplFunct видимо прийдется отказаться, ведь оконная система родная работает, а не глутовская

Автор: Gryphon 6.5.2009, 00:23
Цитата(Alexeis @  6.5.2009,  01:12 Найти цитируемый пост)
от glutDisplFunct видимо прийдется отказаться, ведь оконная система родная работает, а не глутовская 


Цитата(Gryphon @  4.5.2009,  13:27 Найти цитируемый пост)
а будет ли это всё работать с glut'ом?

Ну так я ж об этом и спрашивал... 8((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)