Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лишняя консоль в оконном приложении, Создаю окно, а рядом вижу консоль 
:(
    Опции темы
Курсант
Дата 22.1.2017, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Всем здравствуйте!

Создаю оконное приложение (обычный пример оконного приложения), но рядом с окном запускается консоль. Откуда она берётся?

Использую компилятор gcc и среду Code::Blocks.
PM ICQ Skype   Вверх
vol4ek
Дата 22.1.2017, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



 код покажите или ссылку дайте на пример который скачивали
PM MAIL ICQ   Вверх
GremlinProg
Дата 23.1.2017, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Курсант @  23.1.2017,  01:24 Найти цитируемый пост)
но рядом с окном запускается консоль. Откуда она берётся?

Значит, создаете консольное приложение. Проверьте свойства проекта.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Курсант
Дата 24.1.2017, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Цитата(vol4ek @ 22.1.2017,  23:35)
код покажите или ссылку дайте на пример который скачивали

Код

#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif

#include <tchar.h>
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
TCHAR szClassName[ ] = _T("CodeBlocksWindowsApp");

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           _T("Code::Blocks Template Windows App"),       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nCmdShow);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}



Добавлено @ 13:58
Цитата(GremlinProg @ 23.1.2017,  05:39)
Цитата(Курсант @  23.1.2017,  01:24 Найти цитируемый пост)
но рядом с окном запускается консоль. Откуда она берётся?

Значит, создаете консольное приложение. Проверьте свойства проекта.

Спасибо, наверное, так и есть. Правда в Code::Blocks я создаю GUI-приложение, Frame-Based. По идее это ведь ни на что не влияет, только на начальный код проекта? Если формат файла PE, если я явно нигде не создаю консоль, значит никто не может мне вызвать консоль, кроме меня? Но я нигде её явно не вызываю.

Получается, есть отдельный вид приложений, для которых консоль создаётся по умолчанию операционной системой?

Какая-то муть. Решил попробовать поработать в gcc, и вот уже какие-то сюрпризы непонятные.

Это сообщение отредактировал(а) Курсант - 24.1.2017, 13:59
PM ICQ Skype   Вверх
vol4ek
Дата 24.1.2017, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



код нормальный и в студии все ок. откуда Code::Bloks берет консоль и как приаттачивает ее к виндовс окну я хз  smile 
никогда не пользовался этой IDE.

Добавлено через 1 минуту и 39 секунд
смотрите настройки проекта в Code::Bloks или взьмите VS если есть под рукой
PM MAIL ICQ   Вверх
xvr
Дата 24.1.2017, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Запустите полученный exe вне CodeBlocks. Есть консольное окно? Если нет - то это происки самого CodeBlocks, если есть - то это происки компилятора  smile 
PM MAIL   Вверх
vol4ek
Дата 24.1.2017, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Цитата(xvr @ 24.1.2017,  14:45)
Запустите полученный exe вне CodeBlocks. Есть консольное окно? Если нет - то это происки самого CodeBlocks, если есть - то это происки компилятора  smile

студия выплюнет такой код на функции WinMain если проект будет консольный, какого его CodeBloks жреть smile 
PM MAIL ICQ   Вверх
Курсант
Дата 24.1.2017, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Цитата(xvr @ 24.1.2017,  14:45)
Запустите полученный exe вне CodeBlocks. Есть консольное окно? Если нет - то это происки самого CodeBlocks, если есть - то это происки компилятора  smile

Хы, запустил - консоль есть и вне Code::Blocks, и в Code::Blocks. Только вне Code::Blocks консоль закрывается при закрытии окна, а при запуске из под Code::Blocks при закрытии окна в консоли отображается время работы программы и предлагается нажать любую кнопку. Очень похоже на какой-нибудь дебагер из состава gcc, но не уверен. Что происходит в скомпилированном проекте - вообще понять не могу.

Хотелось бы понять логику...

Всё-таки так хочется оседлать и настроить вменяемо хотя бы одну бесплатную IDE и компилятор. Но ничего не получается, всё время какая-то ерунда получается...

Добавлено через 2 минуты и 46 секунд
Цитата(vol4ek @ 24.1.2017,  14:24)
код нормальный и в студии все ок. откуда Code::Bloks берет консоль и как приаттачивает ее к виндовс окну я хз  smile 
никогда не пользовался этой IDE.

Добавлено @ 14:25
смотрите настройки проекта в Code::Bloks или взьмите VS если есть под рукой

Взять VS, конечно, проще всего. Хочу запустить бесплатную IDE с компилятором, и разобраться, как работает. Люди же его делали, не обезьяны, наверное как-то работать должно...

Это сообщение отредактировал(а) Курсант - 24.1.2017, 17:42
PM ICQ Skype   Вверх
vol4ek
Дата 24.1.2017, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Цитата(Курсант @ 24.1.2017,  17:41)
Что происходит в скомпилированном проекте - вообще понять не могу.
Хотелось бы понять логику...

-Видишь суслика?
- Нет.
-А он есть  smile 
PM MAIL ICQ   Вверх
xvr
Дата 24.1.2017, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Курсант @  24.1.2017,  17:41 Найти цитируемый пост)
Хы, запустил - консоль есть и вне Code::Blocks, и в Code::Blocks.

Значит проект консольный.
Цитата

int WINAPI WinMain (HINSTANCE hThisInstance,
И при это с WinMain'ом. Круть. Это специально сделать не получится, только случайно  smile 
Еще можете глянуть тут, вроде что то похожее (сам посмотреть не могу - StackOverflow висит)

PM MAIL   Вверх
GremlinProg
Дата 24.1.2017, 21:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Здесь где-то уже разбирался подобный вопрос.
В PE есть флаг, отвечающий за подсистему (subsystem) приложения. Если его выставить, то будет автоматически создаваться консоль.
При этом, Вам ни кто не мешает тут же создать обычное окно.

В WinApi есть аналог - AllocConsole. Если эта функция ни где у Вас не вызывается, значит консоль создается ядром, по флагу в PE.
Посмотрите в документацию к своему компоновщику, как сменить подсистему.
В vs тоже есть аналогичная опция: https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
xvr
Дата 25.1.2017, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Исправленная ссылка - http://stackoverflow.com/questions/3369069...a-blank-console

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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