WinAPI: вопрос

Дан WindowProc:

LRESULT CALLBACK WindowProc (HWND hWnd,	UINT uMsg, WPARAM wParam, LPARAM lParam) {
  switch (uMsg) {
    case WM_CLOSE: {
      DestroyWindow (hWnd);
      return 0;
    }
    case WM_DESTROY: {
      PostQuitMessage (0);
      return 0;
    }
    default:
      return DefWindowProc (hWnd, uMsg, wParam, lParam);
  }
}

Не работает: при клике по крестику окно закрывается, а приложение — нет. Причем с F4 проверял, что WM_DESTROY приходит, PostQuitMessage вызывается, но WM_QUIT в очередь сообщений не запихивает; во всяком случае, GetMessage не возвращает 0, а должен при наличии WM_QUIT в очереди. Ведь блин, на экзамене по Windows писал всё так же, все работало, 5 получил даже! А тут — не хочет. Никто не сталкивался? Может проблема ваще не в WindowProc?

P. S. Кстати, гавно этот ваш Си, сколько на нём пишу, столько раз убеждаюсь. Ну как может прога, влезающая в один экран, на 3 ГГц компе компилироваться 5 секунд? Это бред.

Update. Пользы от вас никакой, нет бы дело написать, так вы Си защищаете... Без вас починил. Оказывается в WinMain надо писать не while (GetMessage (&msg, hWnd, 0, 0), а while (GetMessage (&msg, NULL, 0, 0). Логики в этом нет, зато работает.

Дальше
6 комментариев
Иван Бабанин 2004

C# — рулит

Zorgg 2004

Ага, и скорость компиляции это, конечно же, особенность языка, а не компилятора:ь

Илья Бирман

Да, это особенность языка. Все компиляторы Си, которые я видел работают в 10 раз медленней любых компиляторов Паскаля. А все дело в тупых h-файлах, которые перекомпилировываются заново каждый раз. Это идиотизм, бред, чушь. В Builder’е добавляет радости еще и тот факт, что если просто нажать F9 то с вероятностью 80% он не будет компилировать прогу заново, а запустит старую, уже готовую exe-шку. Действительно, фигли напрягаться.

A!e% 2004

Ох, сколько лишних эмоций-то... Да, медленно, да. И что? Не в этом недостаток языка, а предкомпиляцию сейчас все поддерживают, давно уж.

Совет простой — не нравится — не пиши, есть куча языков, в которых эта проблема решена. Java быстрее компилируется. А если нужно, то надо бы выяснять, а не кипятиться. :) Язык-то на самом деле хороший, старый просто, рассчитанный не на то.

Stigler 2004

Илья, для того, чтобы не совершать подобных ошибок и придумали умные люди MSDN! А ваще лучше PHP человечество ещё ничего не придумало (С во всех его проявлениях с достоинством занимает 2-ю строчку в моих предпочтениях)!

Илья Бирман

А вот Александр, которой перед тобой комментировал, считает, что Java лучше, чем PHP. Я в следующем семестре буду иметь возможность убедиться в этом/в противном.

А Си — сосёт. Что бы кто не говорил. Напишу как-нибудь полностью, почему именно.

plintus 2004

Изучать (во ВСЁМ Смысле этого слова) не пробовали (кроме того, чтобы просто учить и использовать)?

Илья Бирман

Че?

Stigler 2004

Java — это круто, но для опеределённых программ. РНР лучше тем, что он универсален для всего, поэтому он мне и нравится.
Си, конечно, уважаем мною, т. к. это первый язык программирования, который я выучила и на нём написано мною очень много, но последнее время убеждаюсь, что все его модификации (имеются в виду Builder или Visual C) сосут по полной программе. В них же работать невозможно! В данном случае (если уж так необходимы проги на подобных языках) лучше Delphi нет ничего.
Вот такое вот моё личное IMHO! [смайлик]

Мои книги