Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отмена командной строки в консольком приложении, При создании OpenGL окна строка не нужна 
V
    Опции темы
KaraKum
  Дата 11.3.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Доброе время суток.
Создал консольное приложение через Visual C++ 7 на основе GLUT OpenGL и, соответственно, помимо окна OpenGl открывается командная строка.
Посоветуйте, пожалуйста, как можно отключить командную строку?
PM MAIL WWW   Вверх
Solomon
Дата 11.3.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Ну дык.. тыже консольное приложение создаеш...
создай Win32 приложение. и небудет консоли...

Это сообщение отредактировал(а) Solomon - 11.3.2008, 21:01


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Rickert
Дата 12.3.2008, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Solomon, +тыща smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
KaraKum
  Дата 12.3.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Пробовал.
Вот функция main() для OpenGL приложения:
Код

void main(int argc, char **argv){    
glutInit(&argc, argv);    
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    
glutInitWindowSize(500, 500);    
glutInitWindowPosition(0, 0);    
glutCreateWindow("Simple OpenGL example!");    
glutDisplayFunc(display);    
myinit();    
glutMainLoop();    
}

В функции WinMain() нет параметров, что нужны для glutInit().
Я знаю как создавать Windows-приложения без использования библиотеки GLUT, то есть с помощью функций CreateWindow(), WndProc() и так далее, но хотелось бы с вышеописанным кодом - коротко и удобно, да и во всех обучающих книгах программы создаются именно таким способом, к тому же такой код будет значительно легче перевести на другие платформы.
Если есть какой-нибудь способ отменить консоль или заставить код работать через Windows-приложение - скажите, плиз.
PM MAIL WWW   Вверх
just_geek
Дата 12.3.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



создать Win32 приложение, а argc & argv можно получить так

Код

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>

int __cdecl main()
{
   LPWSTR *szArglist;
   int nArgs;
   int i;

   szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
   if( NULL == szArglist )
   {
      wprintf(L"CommandLineToArgvW failed\n");
      return 0;
   }
   else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);

// Free memory allocated for CommandLineToArgvW arguments.

   LocalFree(szArglist);

   return(1);
}
где szArgList = argv, nArgs = argc... правда надо будет еще конвертануть szArglist в обычный LPSTR функцией WideCharToMultiByte :)

PM MAIL   Вверх
KaraKum
  Дата 12.3.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Изменил функцию main() на WinMain() и вот что изменилось в коде:

Код

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    glutInit(&nCmdShow, &lpCmdLine);
...

Программа компилируется и компонуется, но при старте обнаруживается ошибка, однако в отладочном режиме прога нормально работает.
Скажите, что не так?
PM MAIL WWW   Вверх
just_geek
Дата 12.3.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



nCmdShow НЕ кол-во параметров это 
Цитата

Specifies how the window is to be shown. This parameter can be one of the following values


  • SW_HIDE Hides the window and activates another window.

  • SW_MAXIMIZE Maximizes the specified window.



и т.д.


т.е. это должно выглядеть примерно так:
1. конвертируем lpCmdLine в LPWSTR
2. вызываем LPWSTR cmdline = CommandLineToArgvW(..., &argc), получаем то что нужно
3. конвертируем cmdline в LPSTR
4. glutInit(&argc, &cmdline)

Это сообщение отредактировал(а) just_geek - 12.3.2008, 12:19
PM MAIL   Вверх
KaraKum
  Дата 12.3.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Пока предыдущее сообщение писал - ты уже успел ответить.
Отредактировал код и в итоге отличительная часть вышла такой:
Код

...
char* argv = "Window";
WideCharToMultiByte( CP_ACP, NULL, *szArglist, -1, argv, 0, NULL, NULL);
/////

glutInit(&argc, &argv);

Если argv не определить как "Window", то выходила ошибка при запуске проги: ...argv was used without being instulled.
Вобщем всё работает, спасибо за помощь.

И ещё такой вопрос: как с помощью библиотеки GLUT сделать так, чтобы окно открывась как WS_POPUP, то есть на весь экран и, соответственно, без заголовка и элементов проводника?
PM MAIL WWW   Вверх
just_geek
Дата 12.3.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



Вообще то если argv = NULL, то первое выполнение WideCharToMultiByte вернет размер буфера, под который надо выделить память, затем выделяешь память, и вызываешь повторно WideCharToMultiByte.

а чем glutFullScreen не устраивает?

Это сообщение отредактировал(а) just_geek - 12.3.2008, 13:27
PM MAIL   Вверх
KaraKum
  Дата 12.3.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Не мог нигде найти описания функций GLUT - только что нашёл на сайте OpenGL.org и всё встало на свои места.
Вобщем, большое спасибо за помощь.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.