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

Поиск:

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


Опытный
**


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

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



Вопрос простой: правильно-ли я делаю 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-ов (с точки зрения производительности)?
PM MAIL ICQ   Вверх
NiJazz
Дата 1.8.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Для оконных приложений используй фреймворки, например, WTL.
PM MAIL   Вверх
EnergoHokum
Дата 1.8.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Это сообщение отредактировал(а) EnergoHokum - 1.8.2008, 13:32
PM MAIL ICQ   Вверх
Paspartu
Дата 1.8.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно упоковать все в класс... что мешает?
PM MAIL   Вверх
Pulse69
Дата 2.8.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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



Это сообщение отредактировал(а) Pulse69 - 2.8.2008, 02:24
--------------------
Ctrl+Alt+Reset 
PM MAIL   Вверх
Paspartu
Дата 2.8.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здесь надо исходить из конкретной задачи, все MFC, WTL и т.д. это обертки над WinAPI это также как при строительстве дома… дом можно построить из монолитных плит, можно из кирпичей… в первом случае минимальной строительной единицей будет плита, во втором – кирпич, да! Из плит можно построить многое, за короткое время, но… все же из кирпича можно построить все то же самое + намного гибче т.к. единица меньше, минус – время, (хотя его надо потратить только раз что бы написать класс)… я делаю свои контролы на WinAPI, от окон до ToolBar-ов и прочее, и мне не нужен ни какой WTL,  так что повторюсь, все зависит от задачи, решение на чем писать остается за автором…
PM MAIL   Вверх
Annihilator
Дата 2.8.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


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

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



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

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


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Earnest
Дата 4.8.2008, 11:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



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



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


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

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