Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Пара вопросов по дизайну WinAPI-приложений


Автор: EnergoHokum 1.8.2008, 08:46
Вопрос простой: правильно-ли я делаю smile, и если нет, то как надо?
При написании чего-нить на WinAPI я использую такую структуру приложения:

Код

//-------------------------------------------------------------------------
/* Здесь объявлены handle control-ов и прочего */
HWND wnd1;
HWND edit1;
//-------------------------------------------------------------------------
/* Здесь лежат объявления указателей на функции сабклассинга */
typedef LRESULT (*pNewProc1) (HWND,UINT,WPARAM,LPARAM);
pNewProc1 pNP1;
//-------------------------------------------------------------------------
/* Ну и сами функции обработки сообщений */
LRESULT CALLBACK NewProc(HWND hWnd,UINT message,        \
                        WPARAM wParam,LPARAM lParam    \
                        )
{
    switch(message)
        {
                 /* всякое */
        }
}
//-------------------------------------------------------------------------
/* Ну и сама WinMain */
int APIENTRY WinMain(HINSTANCE hInstance,        \
                 HINSTANCE hPrevInstance,        \
                 LPSTR lpCmdLine,                \
                 int nCmdShow                    \
                 )
{
        /* всякое */
}


Мне очень не нравится наличие большого количества глобальных переменных (handle-ов). А избавиться от них не получается, т. к. приходится постоянно из функций обработки сообщений посылать сообщения другим control-ам. Есть-ли лекарство от этого?

И вопрос второй: нормально-ли наличие большого количества сабклассированных control-ов (с точки зрения производительности)?

Автор: NiJazz 1.8.2008, 13:14
Для оконных приложений используй фреймворки, например, WTL.

Автор: EnergoHokum 1.8.2008, 13:31
Ну, если уж я и буду использовать framework, то это будет Qt. А всякую мелочёвку, по моему, на чистом WinAPI + GDI писать полегче, да и понимания того, что творится в потрохах windows больше. Есть-же извращенцы ;-) , которые на ассемблере оконные приложения пишут, а я чем хуже?

Автор: Paspartu 1.8.2008, 21:00
Можно упоковать все в класс... что мешает?

Автор: Pulse69 2.8.2008, 02:21
Всякую мелочёвку легче писать как раз на WTL. Если WTL не устраивает, тогда без лобальных/статических переменных не обойтись. Заворачивать самому в классы - это заново изобретать велосипед.


Автор: Paspartu 2.8.2008, 20:32
Здесь надо исходить из конкретной задачи, все MFC, WTL и т.д. это обертки над WinAPI это также как при строительстве дома… дом можно построить из монолитных плит, можно из кирпичей… в первом случае минимальной строительной единицей будет плита, во втором – кирпич, да! Из плит можно построить многое, за короткое время, но… все же из кирпича можно построить все то же самое + намного гибче т.к. единица меньше, минус – время, (хотя его надо потратить только раз что бы написать класс)… я делаю свои контролы на WinAPI, от окон до ToolBar-ов и прочее, и мне не нужен ни какой WTL,  так что повторюсь, все зависит от задачи, решение на чем писать остается за автором…

Автор: Annihilator 2.8.2008, 22:00
MFC уже все упаковало.
Цитата(EnergoHokum @  1.8.2008,  12:46 Найти цитируемый пост)
Мне очень не нравится наличие большого количества глобальных переменных (handle-ов).

Сам не так давно изучаю winapi. Глобальные переменные уже дня 3 раздражают... но ничего не поделать.

Автор: Earnest 4.8.2008, 11:17
Paspartu
Плиты с кирпичами комбинируются без проблем. По крайней мере в случае с MFC\WTL. Так что не аргумент.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)