Windows в Win32 API Программирование GUI - PullRequest
1 голос
/ 01 декабря 2010

Я начинаю программирование с графическим интерфейсом, и у меня есть вопрос по поводу окон.Я прочитал несколько учебных пособий, и они создают окно, создавая новый WNDCLASS, вызывая RegisterClass и затем создавая CreateWindow с именем нового класса.Я также видел, что для создания Button или чего-то еще вы используете имя класса Button при создании CreateWindow.Итак, это приводит меня к такому выводу: чтобы создать окно (вид с рамкой и кнопками минимизации / максимизации и т. Д.), Вы создаете новый WNDCLASS.В противном случае вам не нужно создавать WNDCLASS, и вы используете одно из предопределенных имен классов, например BUTTON.Это правильно?

Ответы [ 6 ]

6 голосов
/ 01 декабря 2010

Правильно. Основная причина, по которой вам нужно определить свои WNDCLASS для своих окон, - это назначить собственную оконную процедуру, которая обрабатывает сообщения, отправленные в ваше окно. Стандартные элементы управления, такие как кнопки и элементы редактирования, уже имеют четко определенное поведение, определяемое их стандартными процедурами окна, поэтому вы можете просто использовать предварительно определенные имена классов.

3 голосов
/ 27 декабря 2010

Если вы работаете со старой школой программирования Win API, я не могу рекомендовать Программирование Windows от Charles Petzold достаточноПоследняя версия вышла из печати, что IMO безумен.Это является классическая книга на эту тему.Потому что это из печати, это стоит больше для используемых версий.Если вы хотите пойти дешевле, получите предыдущее издание , которое вы можете получить за 0,01 доллара США.Основы все одинаковы.

2 голосов
/ 01 декабря 2010

.

Да, вы правы. Существует несколько предопределенных элементов управления \ окон с предопределенными (внешний вид и) поведением. Они называются Системные классы .

Например,

«Кнопка» - это класс, который вы можете использовать для создания кнопки.

Пожалуйста, посмотрите на таблицу из MSDN

Button :: Класс для кнопки.

ComboBox :: Класс для поля со списком.

Edit :: Класс для элемента управления редактирования.

ListBox :: Класс для списка.

MDIClient :: Класс для окна клиента MDI.

ScrollBar :: Класс для полосы прокрутки.

Static :: Класс для статического элемента управления.

Теперь вы можете читать себя на MSDN. Нажмите сюда: О классах окон

Надеюсь, это поможет вам.

.

2 голосов
/ 01 декабря 2010

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

В документации CreateWindowEx есть список предопределенных классов окон.

1 голос
/ 19 декабря 2010

Помните, что для создания нового «Диалога», например окна «О программе», не требуется новый RegisterClass (). Я не согласен с Джоном Диблингом по поводу изучения MFC до или вместо Windows API.

MFC построен поверх Windows API, другими словами, MFC IS Windows API, но заключен в классы C ++, поэтому, если вам необходимо изучить MFC, вам обязательно нужно знать Windows API.

Удачи.

0 голосов
/ 01 декабря 2010

Для начала вы изучаете программирование Windows GUI, начиная с WINAPI. Это не то, что я бы порекомендовал. Вместо этого я бы сначала начал изучать библиотеку Windows GUI, такую ​​как MFC. Программирование Windows GUI достаточно сложно. Не усложняй, когда начинаешь учиться.

Класс Window относится к окну на экране, а класс C ++ - к объекту C ++. Это образец того, как создать Окно на экране, и он содержит информацию о таких вещах, как, например, где находится функция, обрабатывающая сообщения, какой тип контекста устройства использовать и т. Д.

Для разных типов окон нужны разные классы окон. Существует множество оконных классов, предопределенных в так называемых «библиотеках общих элементов управления». Общие элементы управления включают в себя большинство всех элементов управления, которые вы найдете в типичном окне. Кнопки, ползунки, текстовые поля, сетки и т. Д. Вы можете создавать эти общие элементы управления, не регистрируя класс самостоятельно, поскольку библиотека общих элементов управления уже сделала это для вас, когда она была инициализирована.

Все на экране - какое-то окно. Этот веб-браузер, кнопка «назад», поле ввода, которое я печатаю, - это отдельное окно. И каждый должен быть связан с соответствующим классом окна. Большинство используемых вами элементов управления будут связаны с общим классом окна элементов управления. Если создаваемая вами область, например главное окно приложения, не является общим элементом управления или каким-либо другим типом окна с предопределенным классом окна, вам придется зарегистрировать этот класс самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...