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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Первое приложение на WinAPI 
:(
    Опции темы
m9yt
Дата 3.9.2010, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет. Написал по методичке код программы, даже сверил его с кодом при создании обычного решения. В итоге окно просто не появляется при запуске. Вот код:
Код

#include <windows.h>
 
wchar_t szClassName[]=L"MainWindow";
wchar_t szTitle[]=L"Программа 1-1";
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
 
void MyRegisterClass(HINSTANCE hInstance)
{
        WNDCLASS w;
        memset( &w, 0, sizeof (WNDCLASS) );
        w.style                                 = CS_HREDRAW | CS_VREDRAW;
        w.lpfnWndProc                   = WndProc;
        w.hInstance                             = hInstance;
        w.hbrBackground                 = (HBRUSH)GetStockObject(WHITE_BRUSH);
        w.lpszClassName                 = L"MyClass";
        w.hIcon                 = LoadIcon(NULL, IDI_APPLICATION);
        w.hCursor                               = LoadCursor(NULL,IDC_IBEAM);
        RegisterClass(&w);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
        MSG msg;
        MyRegisterClass(hInstance);
        if (!InitInstance (hInstance, nCmdShow))
        {
                return FALSE;
        }
        while (GetMessage(&msg, NULL, 0, 0))
        {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
        }
        return (int) msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{
        switch(message) {
                case WM_DESTROY:
                        PostQuitMessage(0);
                        return 0;
                default:
                        return DefWindowProc(hwnd,message,wParam,lParam);
                }
}
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   //hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
 
   hWnd = CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
}

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



ты регистрируешь класс L"MyClass", а окно создаёшь класса L"MainWindow"

Добавлено через 3 минуты и 4 секунды
PostQuitMessage(0); надо делать на сообщение WM_CLOSE, а WM_DESTROY ты не дождёшься, по моему.


--------------------
user posted image
PM Jabber   Вверх
bsa
Дата 3.9.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



m9yt, если тебе изучать WinAPI не требуется по работе/учебе, то рекомендую бросить эту затею и обратить внимание на что-то более достойное, например C++/Qt или C# (если не планируешь писать ПО под платформы отличные от Windows).
PM   Вверх
Dem_max
  Дата 5.9.2010, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



PostQuitMessage нужно делать в 

Код

      case WM_CLOSE_PLUGIN:
      {
          DestroyWindow(hWnd);
      }break;

      case WM_DESTROY:
      {
         PostQuitMessage(0);
      }break;





--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ASMatic
Дата 6.9.2010, 05:23 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @  3.9.2010,  21:35 Найти цитируемый пост)
что-то более достойное

зря ты так!
PM MAIL   Вверх
xvr
Дата 6.9.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ASMatic @ 6.9.2010,  05:23)
Цитата(bsa @  3.9.2010,  21:35 Найти цитируемый пост)
что-то более достойное

зря ты так!

bsa абсолютно прав. И не потому, что WinAPI это нечто недостойное и никому не нужное, а потому что оно слишком низкоуровневое. Любое телодвижение на WinAPI выливается в кучу кода, и собственно что бы эту кучу не писать, а заниматься непосредственно функционалом программы, а не борьбой с WinAPI, всякие оконные (и не только) фреймворки и придумали.

PM MAIL   Вверх
ИванМ
Дата 6.9.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

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



xvr, вы правы, но изучить его же все же имеет смысл. Пусть не на 100%, а хотя бы иметь о нем представление. По жизни может пригодиться. Даже при работе с Qt и C#.

Добавлено через 2 минуты и 1 секунду
Цитата(bsa @  3.9.2010,  23:35 Найти цитируемый пост)
например C++/Qt или C# (если не планируешь писать ПО под платформы отличные от Windows). 

И не хочешь страдать фигней, которая называется Mono.
PM MAIL   Вверх
xvr
Дата 6.9.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ИванМ @  6.9.2010,  11:40 Найти цитируемый пост)
xvr, вы правы, но изучить его же все же имеет смысл.
Изучить - да, а писать на нем реальные программы - нет  smile 

Цитата(ИванМ @  6.9.2010,  11:40 Найти цитируемый пост)
Пусть не на 100%, а хотя бы иметь о нем представление. 
С этим согласен на все 100%


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


Шустрый
*


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

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



Цитата

Изучить - да, а писать на нем реальные программы - нет 

Хотелось бы узнать, а на чем пишут реальные программы ?
PM MAIL   Вверх
ASMatic
Дата 6.9.2010, 18:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(xvr @  6.9.2010,  09:13 Найти цитируемый пост)
фреймворки и придумали.

видал я ваши фреймворки....смешно было что вроде норм кантора а заюзала фреймворк и потом долго падала ихния прога пока не оказалось что фреймвор мелкомягкие лиха написали (толи прого разработчики не учли) - удалить надо было 1.1. а только потом ставить 2.0, по другому - креш!

Я к чему - да к тому что когда ты сам пишешь все на "низком" уровне тогда под твоим контролем получаеться больше и сделать так что бы удалить старый и установить новый - ты сделаешь сам и точно так как требует остальная часть кода!

Да и если руки не с попы то можно написать норм либы или хотя бы иметь базу прожектов откуда(если норм написано все) можно быстро и не особо напряжно скопипастить часть которая в данный момент интересна!

Для новичков - лучше не придумаешь!! Почему? - да потому что когда я писать пытался на билдере (слав те госпади что навел на путь истинный!) ничерта не понимал что и как происходит в той системе под которую я разрабатываю прогу и когда вылазили косяки VCL и самого былдера я в недопонимании метался и незнал что делать дальше, т.к. толковой описухи - нету(по крайней мере небыло)! А вот взявшись за разум и установив студию + начав писать на винапи - за год понял про юзермод многое. И теперь с винапи не слезу никогда!!!
VCL и тому подобные фичи считаю оправдаными только если ты разрабатываешь приложения с кучей СТАНДАРТНОЙ графики, т.к. на винапи сильно не удобно это все размещать и настраивать...
В остальных случаях - сишка и синапи, вот сам смак Win32 программирования. ИМХО


>>Хотелось бы узнать, а на чем пишут реальные программы ?
присоединяюсь!

Это сообщение отредактировал(а) ASMatic - 6.9.2010, 18:56
PM MAIL   Вверх
xvr
Дата 6.9.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ASMatic @ 6.9.2010,  18:55)
Я к чему - да к тому что когда ты сам пишешь все на "низком" уровне тогда под твоим контролем получаеться больше и сделать так что бы удалить старый и установить новый - ты сделаешь сам и точно так как требует остальная часть кода!

Флаг в руки и барабан на шею - когда напишешь несколько сотен тысяч строк кода (на голом WinAPI) тогда и поговорим  smile 

Цитата

Для новичков - лучше не придумаешь!! 
И ASM forever! Я угадал?

Цитата

Почему? - да потому что когда я писать пытался на билдере (слав те госпади что навел на путь истинный!) ничерта не понимал что и как происходит в той системе под которую я разрабатываю прогу
Недостатки образования всегда сильно мешают  smile Кто мешал посмотреть в сорцы VCL, если было что не понятно?

Цитата

А вот взявшись за разум и установив студию + начав писать на винапи - за год понял про юзермод многое. И теперь с винапи не слезу никогда!!!
Да уж, подсадили на WinAPI. Это похуже кокаина будет  smile 

Цитата

В остальных случаях - сишка и синапи, вот сам смак Win32 программирования. ИМХО
Это клиника, и не IMHO, а абсолютно точно  smile 

Цитата

>>Хотелось бы узнать, а на чем пишут реальные программы ?
присоединяюсь!
Qt, .NET

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


Опытный
**


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

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



xvr

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Флаг в руки и барабан на шею - когда напишешь несколько сотен тысяч строк кода (на голом WinAPI) тогда и поговорим

чего это я должен писать что бы столько кода навалить?
пример можно - ТЗ минимальное!


Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
И ASM forever! Я угадал?

порадовало что не угадал. ASM нужен только в некоторых случаях, когда си трудно справиться с задачей.


Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Да уж, подсадили на WinAPI. Это похуже кокаина будет

это тебя, клоун подсадили!


Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Это клиника, и не IMHO, а абсолютно точно

может Вы и не дятел, но долбить бредятину прекрастно умеете.


Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Qt, .NET

хороший выбор для любителей потрещать какие они не**ные программисты. Удачи, френд и радуйтесь что вы такой прекрасный!
PM MAIL   Вверх
AntiB
Дата 7.9.2010, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xvr

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Флаг в руки и барабан на шею - когда напишешь несколько сотен тысяч строк кода (на голом WinAPI) тогда и поговорим   

Много сотен тысяч строк сами написали или только чтобы показаться крутым программистом? (отвечать не нужно, просто сами для себя подумайте)

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
И ASM forever! Я угадал?

Вы считаете что asm хреново знать (хоть для понимание работы архитектуры под какую пишите) ?

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Да уж, подсадили на WinAPI. Это похуже кокаина будет   

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

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Qt, .NET

Вы не правы насчет .Net, сама технология тормознутая херня и здесь ничего не поделаешь и правы (частично) насчет WinApi - гемора есть немного, но выгода есть - полный контроль.

И в общем ваша манера выражаться не достойна звания Комодератор, оскорблять участников форума - не хорошо да и показывает ваш умственный уровень.

С Уважением, AntiB
PM MAIL   Вверх
Dem_max
Дата 7.9.2010, 04:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Заканчиваем флейм в топике  smile 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
xvr
Дата 7.9.2010, 10:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Кажется ASMatic обиделся на мое послание. Приношу свои извинения - у меня не было не малейшего намерения кого либо обижать.

Видимо я должен более подробно объяснить что я имел в виду по каждому пункту.

Цитата

xvr

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
Флаг в руки и барабан на шею - когда напишешь несколько сотен тысяч строк кода (на голом WinAPI) тогда и поговорим

чего это я должен писать что бы столько кода навалить?
пример можно - ТЗ минимальное!
Можно - аналог OpenOffice.
Объясняю - я не имел в виду, что ASMatic ничего не написал, что бы давать советы. Я имел в виду, что в реальном приложении, когда его GUI часть составляет не более нескольких процентов от текстов всего приложения, реализация этого GUI на WinAPI способна эти несколько процентов раздуть до доброй половины. И программисту придется в основном писать тонны однообразного и повторяющегося кода, вместо того, что бы сосредоточится на собственно логике приложения.
Обычно после попытки написать Офис на API наступает просветление  smile 

Цитата

Цитата(xvr @  6.9.2010,  17:34 Найти цитируемый пост)
И ASM forever! Я угадал?

порадовало что не угадал. ASM нужен только в некоторых случаях, когда си трудно справиться с задачей.
В таком случае еще раз извиняюсь - по безапелляционности исходного сообщения я сделал вывод, что автор принадлежит к редкому виду пионеров с горящим взором и лозунгом 'ASM forever!'. Объяснять что либо этим личностям невозможно - они не слушают никаких доводов и стоят на своем до конца (обычно этот конец тонет в куче флейма).
Еще раз извиняюсь перед ASMatic 

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0917 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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