== Обработка сообщений в консольном приложении ==

Тема в разделе "MS Visual C++", создана пользователем Guest_Storm_*, 5 ноя 2005.

Статус темы:
Закрыта.
  1. Guest_Storm_*

    Guest_Storm_* Гость

    Вопрос:

    Как обрабатывать сообщения посланные Виндой консольному приложению?

    //Вылавливать хочу конкретные сообщения, а остальные пусть Винда обрабатывает.

    //Приложение - просто Win 32 Consol Project.
    //Окна нет!
    //Оконной процедуры нет!
    //Классов нет!
     
  2. Guest

    Guest Гость

    А сообщения туда аообще посылаются??
     
  3. Guest

    Guest Гость

    <!--QuoteBegin-Guest+5:11:2005, 19:32 -->
    <span class="vbquote">(Guest @ 5:11:2005, 19:32 )</span><!--QuoteEBegin-->А сообщения туда аообще посылаются??
    [snapback]26719" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Вообще-то, да.

    Как минимум функцией СендМессадж. А у меня, при асинхронной работе с сокетами.
     
  4. sup.by

    sup.by Гость

    А если сделать окно только не показывать его .... попрежнему есть консоль,а скрытое окно втихаря принимает сообщения. или поставить Hook на нужные тебе сообщения.
     
  5. Guest

    Guest Гость

    А, ну да, что-то я стормозил. Так тот-же GetMesagge(lpMsg, NULL) будет выгребать сообщения из общей очереди потока. Надо только его регулярно дергать.
     
  6. Guest

    Guest Гость

    А если сделать окно только не показывать его
    - ну чёрного окна-то не будет. А я бы его хотел.

    Ну если в цикле дёргать GetMesagge(lpMsg, NULL), то ко мне будут попадать все сообщения и мне придётся их самому обрабатывать (или нет?) (нажатие клавиш и т.д.), а мне это не надо.
     
  7. Guest

    Guest Гость

    <!--QuoteBegin-Guest+6:11:2005, 15:02 -->
    <span class="vbquote">(Guest @ 6:11:2005, 15:02 )</span><!--QuoteEBegin-->Ну если в цикле дёргать GetMesagge(lpMsg, NULL), то ко мне будут попадать все сообщения и мне придётся их самому обрабатывать (или нет?) (нажатие клавиш и т.д.), а мне это не надо.
    [snapback]26729" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Так там в параметрах можно фильтр задать. Смысл в том, что можно не указывать окно.
     
  8. Guest

    Guest Гость

    Почему черного окна не будет? делаешь обычное консольное приложение с точкой входа в виде ф-ии main ... и в теле этой функции создаешь окно .... указываешь оконную процедуру итд .... а после этого ствишь цикл

    while (GetMessage (&msg, NULL, 0, 0))
    {

    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;

    }


    .... и спокойно обрабатываешь сообщения в оконной процедуре указанной при создании окна
     
  9. Guest

    Guest Гость

    <!--QuoteBegin-Guest+6:11:2005, 17:20 -->
    <span class="vbquote">(Guest @ 6:11:2005, 17:20 )</span><!--QuoteEBegin-->Почему черного окна не будет? делаешь обычное консольное приложение с точкой входа в виде ф-ии main ... и в теле этой функции создаешь окно .... указываешь оконную процедуру итд .... а после этого ствишь цикл

    while (GetMessage (&msg, NULL, 0, 0))
    {

    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;

    }
    .... и спокойно обрабатываешь сообщения в оконной процедуре указанной при создании окна
    [snapback]26732" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    А, понял, здорово. Но это как-то типо обманом: т.е. код программы будет на 90% такой же, как и при создании обычного оконного приложения, но только это всё будет спрятано в int main(..){}, т.е. сделали консольную обёртку для оконного приложения. Хотя тоже вариант.
    Спасибо.
     
  10. Guest

    Guest Гость

    <!--QuoteBegin-Guest+6:11:2005, 17:02 -->
    <span class="vbquote">(Guest @ 6:11:2005, 17:02 )</span><!--QuoteEBegin-->Так там в параметрах можно фильтр задать. Смысл в том, что можно не указывать окно.
    [snapback]26730" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    BOOL GetMessage(LPMSG lpMsg,
    HWND hWnd,
    UINT wMsgFilterMin,
    UINT wMsgFilterMax
    );

    А, ну фильтр вроде так делается:
    wMsgFilterMin
    [in] Specifies the integer value of the lowest message value to be retrieved. Use WM_KEYFIRST to specify the first keyboard message or WM_MOUSEFIRST to specify the first mouse message.
    Windows XP: Use WM_INPUT here and in wMsgFilterMax to specify only the WM_INPUT messages.

    If wMsgFilterMin and wMsgFilterMax are both zero, GetMessage returns all available messages (that is, no range filtering is performed).

    wMsgFilterMax
    [in] Specifies the integer value of the highest message value to be retrieved. Use WM_KEYLAST to specify the first keyboard message or WM_MOUSELAST to specify the last mouse message.
    Windows XP: Use WM_INPUT here and in wMsgFilterMin to specify only the WM_INPUT messages.

    If wMsgFilterMin and wMsgFilterMax are both zero, GetMessage returns all available messages (that is, no range filtering is performed).
    ========================

    Я плохо понял, что тут написано. Т.е. вопрос о том, как поставить фильтр на определённое сообщение открыт. Точно ли можно это сделать?

    А для консольного окна тоже можно получить hWND и его прописать в GetMessege.
     
  11. Guest_Storm_*

    Guest_Storm_* Гость

    А, я понял, что там написано: там указываютя инткрвал приёма сообщений, т.е. от какого до какого принимать. Если там и там указать одно и тоже сообщение, то приниматься будет оно.

    Ну и получается, что надо поставить цикл

    while (GetMessage (&msg, NULL, что-то, что-то))
    {
    обработать что-то

    }

    Как-то просто :huh:
     
Загрузка...
Похожие Темы - Обработка сообщений консольном
  1. kolka
    Ответов:
    6
    Просмотров:
    250
  2. anna
    Ответов:
    9
    Просмотров:
    878
  3. FaRReLL
    Ответов:
    0
    Просмотров:
    866
  4. crow1986
    Ответов:
    8
    Просмотров:
    1.870
  5. Dazzel
    Ответов:
    1
    Просмотров:
    947
Статус темы:
Закрыта.

Поделиться этой страницей