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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка регистрации класса и создания окна 
V
    Опции темы
Kipter
Дата 19.4.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Изучаю Win32 API...
Во всех примерах я встречаю проверку на то - зарегестрирован ли оконный класс и создано ли само окно...

Код

if(!RegisterClassEx(&WCex))
{
 ...
 exit(0);
}

if(!m_hWnd)
{
 ...
 exit(0);
}


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

Если же эти проверки критически необходимы то что лучше делать в них для удобства?
просто выводить сообщения что окно не могло быть создано или класс не смог зарегестрироваться?

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

Это сообщение отредактировал(а) Kipter - 19.4.2007, 18:31
PM MAIL   Вверх
Earnest
Дата 19.4.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Проверять надо, потому что раз в год и палка стреляет. Особенно, если код промышленный.
Что делать, если окно не создалось, зависит от программы, это тебе решать.

Цитата(Kipter @  19.4.2007,  19:30 Найти цитируемый пост)
Я создаю в окне программы по 10 кнопок, 10 строк ввода, и т д

Ужас smile 
А зачем, если все это можно нарисовать в редакторе ресурсов, а потом создать диалог?

Но если серьезно, то руками делается так:
Все дочерние окна лучше создавать в обработчике OnCreate родительского окна.
Если какое-то из окон не создалось - можно, скажем, вернуть -1 и родительское окно просто не создастся.
А если это не критично - можно и игнорировать, и будет пустое место вместо контрола.

Конечно, писать 25 раз if (hWnd == 0) - не стоит. Можно это дело обернуть, чтобы проверить в одном месте, и скажем, сгенерировать исключение.

Классы для кнопок и прочих стандартных контролов регистрировать не нужно - они есть. 



--------------------
...
PM   Вверх
Kipter
Дата 19.4.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Впринципе понятно...
Да можно было бы нарисовать все это дело в редакторе диалогов, но суть моего задания - все сделать руками... включая кнопки.... кнопки да и другие контролы я рисую также сам... поэтому регистрация класса тоже нужна....

В одном месте проверить сразу все впринципе можно...  но получится просто большой If?
if(!(hWndButton1 && hWndButton2.... hWndButton356))
{
 .....


Конечно можно засунуть все в массив... и потом просто по нему пробегать....
но толга будет сложно вспоминать а в каком элементе массива у меня хендл нужной мне кнопки в 13 или 15?
а так по названию можно запомнить hWButtonAdd или hWEditName

можно конечно использовать константы
#define BUTTON_ADD 1
#define BUTTON_EDIT 2

а потом в массиве их использовать
... HandleArray[BUTTON_ADD] ....
а в обработчике событий как case WM_USER + BUTTON_ADD: допустим...
как такое изощрение норм?

Это сообщение отредактировал(а) Kipter - 19.4.2007, 20:48
PM MAIL   Вверх
GremlinProg
Дата 19.4.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



грамотнее будет все же заводить массив, а вместо дефайнов, использовать энум:
Код

enum{
  btnPlay = 0,
  btnStop,
  btnPause,
  ...
  btnsCount
};
...
HWND windows[btnsCount];
...
EnableWindow(windows[btnPlay],TRUE);

естественно, это только пример...


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Kipter
Дата 20.4.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(GremlinProg @  19.4.2007,  21:00 Найти цитируемый пост)
естественно, это только пример... 

Да, конечно понимаю, главное суть =)
всем спасибо =)

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


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

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