| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Проверка регистрации класса и создания окна |
| Автор: Kipter 19.4.2007, 18:30 | ||
| Изучаю Win32 API... Во всех примерах я встречаю проверку на то - зарегестрирован ли оконный класс и создано ли само окно...
Так вот, насколько это действительно нужно уже в релизе программы? могут ли быть случаи невозможности создания окна или регистрации класса зависящие от каких то других обстоятельств? например система не дала это сделать или еще что.... Если же эти проверки критически необходимы то что лучше делать в них для удобства? просто выводить сообщения что окно не могло быть создано или класс не смог зарегестрироваться? Почему заинтересовала данная проблема.... ну допустим я пишу программу чисто без диалогов... Я создаю в окне программы по 10 кнопок, 10 строк ввода, и т д и делать проверку была ли создана кнопка, строка ввода или еще что... ужас.... |
| Автор: Earnest 19.4.2007, 19:38 |
| Проверять надо, потому что раз в год и палка стреляет. Особенно, если код промышленный. Что делать, если окно не создалось, зависит от программы, это тебе решать. Ужас А зачем, если все это можно нарисовать в редакторе ресурсов, а потом создать диалог? Но если серьезно, то руками делается так: Все дочерние окна лучше создавать в обработчике OnCreate родительского окна. Если какое-то из окон не создалось - можно, скажем, вернуть -1 и родительское окно просто не создастся. А если это не критично - можно и игнорировать, и будет пустое место вместо контрола. Конечно, писать 25 раз if (hWnd == 0) - не стоит. Можно это дело обернуть, чтобы проверить в одном месте, и скажем, сгенерировать исключение. Классы для кнопок и прочих стандартных контролов регистрировать не нужно - они есть. |
| Автор: Kipter 19.4.2007, 20:37 |
| Впринципе понятно... Да можно было бы нарисовать все это дело в редакторе диалогов, но суть моего задания - все сделать руками... включая кнопки.... кнопки да и другие контролы я рисую также сам... поэтому регистрация класса тоже нужна.... В одном месте проверить сразу все впринципе можно... но получится просто большой 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: допустим... как такое изощрение норм? |
| Автор: GremlinProg 19.4.2007, 21:00 | ||
грамотнее будет все же заводить массив, а вместо дефайнов, использовать энум:
естественно, это только пример... |
| Автор: Kipter 20.4.2007, 00:41 |
Да, конечно понимаю, главное суть =) всем спасибо =) |