Next
Previous
Table of Contents
Встроенный в KDevelop редактор диалогов разработан для того, чтобы помочь создавать диалоги, которые требуются для вашего приложения,
и тем самым резко уменьшить время, расходуемое на построение графического пользовательского интерфейса. Единственное ограничение на сегодняшний день состоит в том, что Dialogeditor не поддерживает
управление геометрическими размерами элементов, которое предоставляется Qt; поэтому диалоговые окна получаются статическими в своих размерах, что при определенных условиях может привести
к нарушениям во внешнем виде приложения, например, текст метки после перевода приложения на другой язык окажется слишком длинным и не поместится в отведенном для него пространстве.
Но текущее состояние редактора в сочетании с возможностями по управлению проектом KDevelop обеспечивает скорейший путь для создания
полнофункциональных приложений для K Desktop Environment.
На текущий момент доступны следующие элементы:
QT-элементы:
- QWidget - элемент, который может использоваться сам по себе, и может содержать другие элементы. Это позволяет создать иерархию элементов внутри вашего диалога.
- QLabel - метка, представляющая текстовую информацию на элементе. Используется QLabel, например, напротив строк ввода
для пояснения их предназначения или возле выпадающего списка для указания названия устанавливаемого параметра.
- QPushButton - кнопка, позволяющая, например, вызвать другое диалоговое окно типа QFileDialog для выбора имени файла.
- QCheckBox - элемент, показывающий, разрешена или запрещена опция. QCheckBox широко используется в диалоговых окнах конфигурации.
- QLCDNumber - отображает номер как на жидкокристаллическом (LCD) экране. Часто используется как часы.
- QRadioButton - как и QCheckBox, позволяет пользователю выбрать опцию. QRadioButton используется для установки опций, когда
они являются взаимозависимыми, например, вы имеете 3 кнопки, но выбрана может быть только одна из них. См.
QButtonGroup
для более детальной информации.
- QComboBox - позволяет пользователю установить значение, выбирая его из
выпадающего меню, или ввести значение, если элемент сконфигурирован доступным для этого.
- QListBox - предоставляет список элементов, состоящий из одной колонки, с возможностью прокрутки.
- QListView - создает многоколонный список, который может быть использован для отображения, например, иерархии каталогов в виде таблицы или дерева.
- QMultiLineEdit - предоставляет многострочный текстовый редактор.
- QProgressBar - показывает степень выполнения действия, если оно занимает много времени.
- QSpinBox - позволяет выбрать числовое значение с помощью стрелок вверх/вниз, или ввести его непосредственно в поле ввода, если позволяет конфигурация.
- QSlider - устанавливает значение в заданном программой диапазоне.
- QScrollBar - показывает диапазон изменения значения и устанавливает текущее значение с помощью ползунка и кнопок вверх/вниз; часто
используется для элементов, чье содержимое больше видимой области. С его использованием организуется прокрутка и видимая область элемента может меняться.
- QGroupBox - предоставляет фрейм с заголовком, чтобы показать, что элементы внутри сгруппированы.
KDE-элементы:
- KColorButton - кнопка, отображающая выбранный цвет. При нажатии вызывается KDE-окно выбора цвета, в котором пользователь
может выбрать другой цвет. Часто используется для приложений типа графического редактора и в других случаях, когда может быть выбран цвет.
- KCombo - аналогичен
QComboBox
. Позволяет пользователю выбирать значение из выпадающего списка.
- KDatePicker - мощный элемент для ввода даты пользователем.
- KDateTable - табличка календаря для выбора дня месяца. Используется
KDatePicker
для построения диалога ввода даты.
- KKeyButton - кнопка для выбора значения клавиши. Если кнопка выбрана, то она активируется, и нажатие клавиши на клавиатуре
изменяет установленный для кнопки код. Может быть использована для конфигурирования обработки клавиатурных команд.
- KLed - LED (Light Emitting Diode), светящийся диод. Предназначен для отображения текущего состояния.
- KLedLamp - аналогичен KLed, но поддерживает нажатие мышью.
- KProgress - аналогичен
QProgressBar
, но поддерживает другие диапазоны значений.
- KRestrictedLine -
QLineEdit
с возможностями фильтрации ввода. Может быть использован для создания окна ввода пароля.
- KSeparator - разделитель, который используется во всех случаях, где необходимо что-то отделить от чего-то.
Часто используется в диалогах для выделения логических частей там, где не может быть использован
QGroupBox
.
- KTreeList - сворачивающийся список для отображения деревьев, похожий на
QListView
.
Эта глава дает полный обзор поддерживаемых в настоящее время элементов Qt. Чтобы достичь лучшего понимания
назначения свойств, они разделены в соответствии с иерархией наследования. Так как все элементы имеют предком QWidget
, этот класс описан
первым. Все свойства QWidget
доступны для всех остальных элементов, поэтому повторно не приводятся. Для групп элементов,
которые унаследованы от абстрактных подклассов (QWidget
- базовый класс), свойства базового класса приведены вначале
(хотя этот класс и не предоставляет видимых элементов в редакторе диалогов).
Затем приводятся свойства для доступных элементов группы, содержащих специфичные опции.
Для лучшего понимания иерархии наследования дерево, представляющее ее, приводится ниже:
Свойства QWidget
QWidget
- базовый класс почти для всех элементов Qt и KDE. Поэтому элементы, унаследованные от QWidget
, позволяют использовать те же
установки в большинстве случаев.
- Appearance:
- BgColor: Цвет заднего плана (background) элемента
- BgMode: Режим заднего плана элемента
- BgPalColor: Цветовая палитра заднего плана элемента
- BgPixmap: Имя файла картинки заднего плана элемента
- Cursor: Курсор над элементом
- Font: Шрифт элемента
- MaskBitmap: Имя файла для накладываемого точечного рисунка (masking bitmap)
- C++ Code:
- AcceptsDrops: если установлено в true, экземпляр элемента воспринимает механизм drag'n drop Qt-протокола, не KDE 1.x !
- Connections: соединение сигналов и слотов элемента
- FocusProxy: элемент, предоставляющий фокус данному элементу
- HasFocus: устанавливается, если элемент имеет фокус по умолчанию. Помните, что только один объект в диалоге может иметь данное свойство равным true
- ResizeToParent: изменяет размер элемента до размера родителя (не виден в режиме редактирования)
- VarName: имя переменной объекта. Измените это на имя, описывающее предназначение элемента.
- General:
- IsEnabled: устанавливается, если элемент должен принимать пользовательские события
- IsHidden: делает элемент невидимым (true) или видимым (false)
- Name: устанавливает имя элемента. Помните, что имя отличается от VarName в коде C++.
- Geometry:
- Height: высота элемента
- IsFixedSize: true - имеет фиксированный размер
- MaxHeight: максимальное значение для высоты Height
- MaxWidth: максимальное значение для ширины Width
- MinHeight: минимальное значение для высоты Height
- MinWidth: минимальное значение для ширины Width
- SizeIncX: количество пикселей в одном шаге при изменении размеров по X
- SizeIncY: количество пикселей в одном шаге при изменении размеров по Y
- Width: ширина элемента
- X: положение по горизонтали, считаемое от левого угла
- Y: положение по вертикали, считаемое сверху вниз
Наследуемые элементы QButton
QButton
- абстрактный класс, предоставляющий свойства для всех кнопок.
Порожден от
QWidget
Наследуется
QCheckBox,
QPushButton и
QRadioButton.
- Appearance:
- setPixmap: имя файла используемой картинки
- General:
- setText: текст на метках, кнопках и ящиках (boxes), также предустановленный текст для строк ввода
- setAutoRepeat: если разрешено, сигнал clicked() испускается через равные интервалы времени, пока кнопка находится в нажатом состоянии. Не действует на переключаемые (toggle) кнопки.
- setAutoResize: Если true, то разрешается автоматическое изменение размера. Если оно разрешено, то кнопка изменяет свой размер
при изменении содержимого.
Свойства QCheckBox
Порожден от
QWidget и
QButton
- General:
- isChecked: (setChecked) определяет, выбрана ли кнопка при создании
Свойства QPushButton
Порожден от
QWidget и
QButton
- General:
- isAutoDefault: (setAutoDefault) если установлено авто-умолчание, то кнопка становится кнопкой по умолчанию, когда она получает фокус ввода с клавиатуры
- isDefault: (setDefault) может быть только одна кнопка по умолчанию и это может быть использовано только в диалоге.
Кнопка по умолчанию испускает сигнал
clicked()
при нажатии пользователем клавиши Enter.
- isMenuButton: (setIsMenuButton) сообщает кнопке о необходимости нарисовать стрелку меню. Меню должно быть вставлено отдельно.
- isToggleButton::(setToggleButton) делает кнопку переключаемой, то есть заставляет ее вести себя аналогично QCheckBox.
- isToggledOn: (setOn) (public slot) включает переключаемую кнопку.
Свойства QRadioButton
Порожден от
QWidget и
QButton
- General:
- isChecked: (setChecked) определяет, выбрана ли кнопка при создании
Свойства QComboBox
Порожден от
QWidget
(нет дополнительных свойств)
Элементы, унаследованные от QFrame
Порожден от
QWidget
Сейчас используется только как абстрактный класс.
- Appearance:
- Margin (setMargin): устанавливает отступ, равный расстоянию от самого внутреннего пикселя рамки и до
самого внешнего пикселя содержимого
Свойства QGroupBox
Порожден от
QWidget и
QFrame
- General:
- Title: (setTitle) устанавливает заголовок группы, который отображается на групповой рамке
Свойства QLCDNumber
Порожден от
QWidget и
QFrame
- General:
- NumDigits:(setNumDigits) устанавливает количество цифр, отображаемых в QLCDNumber
- Value: (display) (public slot) отображает исходное значение QLCDNumber
Свойства QLabel
Порожден от
QWidget и
QFrame
- Appearance:
- Margin (setMargin): устанавливает отступ, который для QLabel равен расстоянию от рамки до первого символа текста метки,
в зависимости от выравнивания метки
- C++ Code:
- Buddy: (setBuddy) определяет объект, которому передается фокус при выборе метки
- General:
- Text: (setText) устанавливает текст метки
- isAutoResize: (setAutoResize) если true, то метка изменяет свой размер при изменении содержимого. Левый верхний угол
не передвигается
Свойства QProgressBar
Порожден от
QWidget и
QFrame
- General:
- TotalSteps: (setTotalSteps) (public slot) устанавливает общее количество шагов для индикатора прогресса. В процессе выполнения вашего задания
для отображения прогресса вы должны вызывать метод setProgress(int) для отображения количества пройденных шагов (int).
QScrollView
Порожден от
QWidget and
QFrame
Наследуется
QListBox
(сейчас абстрактный)
Предоставляет элемент с возможностью прокрутки, который управляет отображением дочерних элементов с помощью вертикальной и горизонтальной прокрутки
QListView
Порожден от
QWidget,
QFrame и
QListView
Предоставляет список для отображения иерархических данных как в виде таблицы, так и в виде дерева. Имеет прокрутку, организованную с помощью
QScrollView.
- Appearance:
- ListViewFont: (setFont()) устанавливает шрифт для строк списка
- ListViewPalette: (setPalette()) устанавливает палитру для строк списка
- TreeStepSize: (setTreeStepSize(int)) смещение в пикселях дочернего элемента от родительского
- hScrollBarMode: Режим прокрутки предоставляется
QScrollView для горизонтальной прокрутки
- isAllColumnsShowFocus: (setAllColumnsShowFocus(bool)) показывает фокус для всех колонок списка
- isMultiSelection: разрешает множественный выбор строк списка
- isRootDecorated: разрешает показ "+" и "-" для развернутых и свернутых веток
- vScrollBarMode: Режим прокрутки предоставляется
QScrollView для вертикальной прокрутки
- General:
- Entries: позволяет вам вставить список строк, который устанавливается как QListViewItems
- isAutoUpdate:
Свойства QSpinBox
Порожден от
QWidget и
QFrame
- General:
- MaxValue: максимальное значение, которое пользователь может выбрать
- MinValue: минимальное значение, которое пользователь может выбрать
- Prefix:
- Suffix:
- Value: предустановленное значение при отображении элемента
- isWrapping:
Элементы, унаследованные от QTableView
Порожден от
<QWidget,
QFrame и
QTableView
Наследуется
QListBox and
QMultiLineEdit
Свойства QListBox
Порожден от
QWidget,
QFrame и
QTableView
- General:
- isAutoBottomScrollBar: (setAutoBottomScrollBar)
- isAutoScroll: (setAutoScroll)
- isAutoScrollBar: (setAutoScrollBar)
- isAutoUpdate: (setAutoUpdate)
- isBottomScrollBar: (setBottomScrollBar)
- isDragSelect: (setDragSelect)
- isSmoothScrolling: (setSmoothScrolling)
- Geometry:
- setFixedVisibleLines: устанавливает фиксированную высоту элемента, указывая количество текстовых строк, которые отображаются с использованием текущего шрифта
Свойства QMultiLineEdit
Порожден от
QWidget,
QFrame и
QTableView
- General:
- Text: (setText) (public slot) устанавливает текст элемента
- isAutoUpdate: (setAutoUpdate) используется для того, чтобы избежать мигания при больших изменениях; элемент не обновляется, если запрещено
- isOverWriteMode: (setOverwriteMode) (public slot) включает режим замены при вводе
- isReadOnly: (setReadOnly) (public slot) если установлен в true, то текст не может редактироваться
- isTextSelected: (selectAll)(public slot) делает выбранным весь текст
- Geometry:
- setFixedVisibleLines: устанавливает фиксированную высоту для элементов, при этом отображается заданное количество текстовых строк текущим шрифтом
Свойства QLineEdit
Порожден от
QWidget
- General:
- CursorPosition: (setCursorPosition) устанавливает позицию курсора по умолчанию
- MaxLength: (setMaxLength) устанавливает максимальную длину строки
- Text: (setText) (public slot) устанавливает текст, отображаемый при создании
- hasFrame: (setFrame) если разрешено, то рисует элемент внутри рамки шириной 2 пикселя
- isTextSelected: (selectAll) (public slot) делает текст выбранным
Свойства QScrollBar
Порожден от
QWidget и QRangeControl
.
- General:
- MaxValue: устанавливает максимальное значение ползунка; используется в конструкторе (не обязательно)
- MinValue: устанавливает минимальное значение ползунка; используется в конструкторе (не обязательно)
- Orientation: (setOrientation) устанавливает горизонтальное или вертикальное положение
- Value: устанавливает начальное положение (не обязательно)
- isTracking: (setTracking) если разрешено, то элемент испускает сигнал
valueChanged()
, пока он перемещает ползунок при нажатой кнопке мыши; иначе
сигнал испускается после того, как кнопка мыши будет отпущена
Свойства QSlider
Порожден от
<QWidget и QRangeControl
.
- General:
- MaxValue: устанавливает максимальное значение ползунка; используется в конструкторе (не обязательно)
- MinValue: устанавливает минимальное значение ползунка; используется в конструкторе (не обязательно)
- Orientation: (setOrientation) устанавливает горизонтальное или вертикальное положение
- Value: (setValue) (public slot) использует
QRangeControl::setValue()
для присвоения значения
- isTracking:(setTracking) если разрешено, то элемент испускает сигнал
valueChanged()
, пока он перемещает ползунок при нажатой кнопке мыши; иначе
сигнал испускается после того, как кнопка мыши будет отпущена
KColorButton
Порожден от
QPushButton
- General
- DisplayedColor (setColor()) отображаемый цвет кнопки
KKeyButton
KCombo
Порожден от
QComboBox
- General
- Entries список входов, отображаемых в элементе
- Text текущий отображаемый текст
- isAutoResize изменить размер в соответствии с размером текущего элемента
KDatePicker
- Appearance
- FontSize размер шрифта элемента
KLedLamp
KProgress
KSeparator
- General
- Orientation устанавливает ориентацию разделителя - горизонтальная или вертикальная; по умолчанию горизонтальная
KDateTable
KTreeList
- Appearance
- TreeListBgColor
- TreeListPalette
- isBottomScrollbar
- isScrollBar
- isShowItemText
- isSmoothScrolling
- isTreeDrawing
- General
KRestrictedLine
KLed
Порожден от
QWidget
- Appearance
- LedColor: (setColor()) устанавливает отображаемый цвет индикатора
Создание нового диалога очень простой процесс, если у вас уже есть опыт графической разработки приложений. KDevelop предоставляет
возможность создавать элементы визуально и показывает, как они будут выглядеть в приложении. Кроме того, вы можете выбрать команду предварительного просмотра
"Preview" из меню "View".
Для создания диалога или любого другого элемента переключитесь в режим Dialogeditor'а и выберите "New" из меню "File". Затем введите
всю необходимую информацию в диалог "New Dialog". Это:
- От какого класса наследуется диалог (The Dialog inheritance). Это необходимо, потому что любой элемент в конце концов порожден от
QWidget
. Кроме типов элементов,
предоставляемых Qt, вы можете наследовать элемент, например, от абстрактного базового класса, который вы создали сами в проекте. В этом случае
выберите "custom" и введите путь файла заголовка в строку ввода ниже.
- Имя диалога (The Dialog name). Это устанавливает имя класса для генерируемого диалога. Выберите осмысленное имя, отражающее назначение диалога;
в случае наследования от
QDialog
, вы можете ввести имя, заканчивающееся буквами Dlg
, чтобы помнить, что это диалог.
При присвоении имени следует использовать принятые в KDE и Qt соглашения: используйте заглавные буквы в имени класса. Например, диалог выбора размеров таблицы
вы можете назвать GridSizeDlg
.
- Имена генерируемых файлов (The generated filenames). Они заполняются при вводе имени диалога, но могут быть изменены. Если вы хотите использовать другие
имена файлов, также необходимо придерживаться соглашений KDE и Qt: все имена файлов набираются строчными буквами и содержат имя класса
для напоминания, что он содержится в этом файле. Файл данных, который будет задан позднее, содержит сгенерированный код, получаемый при создании диалога.
Вы не должны редактировать этот файл непосредственно; используйте файл реализации для любых добавлений в диалог и реализации его методов.
После этого диалог отобразится как элемент с сеткой. Поскольку сетка используется редактором диалогов для привязки элементов к ее узлам, вы можете
изменять шаг сетки с помощью пункта "Grid Size" в меню "View", если вас не удовлетворяет значение по умолчанию
Выберите переключатель "Widgets" на левой панели и нажмите тот элемент, который вы хотите добавить в главное окно. Он
появится в главном окне в левом верхнем углу и будет выбран рамкой, позволяющей производить изменение размеров. Передвиньте или измените размер элемента
с помощью мыши. Курсор будет при этом изменяться, чтобы показать, какое действие может быть выполнено в данной позиции.
После завершения создания диалога выберите "Generate Files" из меню "Build" или нажмите соответствующую кнопку панели инструментов.
Файлы будут сгенерированы в предопределенном месте и включены в исходники вашего проекта. Команда "Build" или "Make" перекомпилирует все сгенерированные
файлы вашего проекта и вы сможете добавить соответствующий вызов конструктора в ваше приложение для отображения диалога или элемента.
Для проектов KDE все свойства элементов могут быть просмотрены позже, например текст метки, установленный с помощью макроса i18n()
из kapp.h
для поддержки интернационализации. Таким образом, вы должны выполнить "Make Messages and merge" после завершения создания и реализации.
При создании диалога или элемента вы должны следовать следующим советам:
- Всегда стремитесь к стандарту! Это, наверное, наиболее важное правило при разработке элементов графического пользовательского интерфейса. Помните, что пользователь
воспримет только те приложения, которые легко понять, независимо от того, насколько сложны решаемые ими задачи.
- Добавляйте везде, где это возможно, всплывающие подсказки. Что это..? Помощь, или Быстрая помощь. Это позволяет получить информацию
о целях конкретного объекта пользовательского интерфейса.
- Следите за фокусом ввода клавиатуры! Генератор не заботится об этом - об этом надо помнить при создании любого элемента;
иначе вы будете вынуждены переупорядочивать ваш инициализационный код вручную, что является очень неблагодарным занятием. Порядок изменения фокуса ввода клавиатуры значит
порядок, в котором составляющие диалог элементы получают фокус, когда пользователь нажимает клавиши Tab и Shift+Tab. Очень надоедливо,
когда фокус изменяется как угодно, но только не на следующий элемент, расположенный ниже или справа от текущего. Поэтому начинайте
создание ваших элементов сверху вниз слева направо для уверенности в правильности перемещения фокуса.
Свойства элемента могут быть легко установлены через окно свойств элемента. Когда выбирается элемент, окно свойств
автоматически обновляется и отображает свойства текущего элемента. Поскольку все элементы произошли от QWidget
, вы можете установить
свойства QWidget
и свойства, специфичные для выбранного элемента. Свойства могут быть:
- Значениями типа integer, такие как положение элемента или размер шрифта
- Значениями типа boolean для разрешения/запрещения определенных параметров элемента. Установленные выбором из списка содержат true и false
- Значения перечислимых типов, например, палитра. При установке выбором из списка содержат все доступные значения
- Значение цвета, например, для цвета элемента. Устанавливается с помощью диалога выбора цветов KDE
- Шрифт, например, текста метки. Будьте осторожны, задавая значение шрифта, отличное от шрифта по умолчанию, поскольку может случиться, что KDE не обновит шрифт.
- Имена файлов для картинок заднего плана. Не используйте файлы формата gif,
поскольку они могут не поддерживаться последующими версиями Qt.
Когда вы создаете элемент, вы, вероятно, хотите добавить его в проект для выполнения функций, для которых он был разработан. Поскольку элемент
может быть создан для выполнения нескольких функций, мы рассмотрим 2 случая - элемент унаследован от QWidget
, и элемент унаследован от QDialog
.
Наследование от QWidget
Предположим, вы создали элемент, который будет входить в состав главного окна. Если вы заполняете всю видимую область, вы должны добавить
указатель на экземпляр объекта в файл заголовка с определением вашего экземпляра KTMainWindow
, заменив текущий объект Просмотр. Затем измените код в
методе initView
для установки вашего элемента главным. Кроме того, вы можете удалить класс View из сгенерированного проекта, но помните,
что экземпляр документа и экземпляр приложения (App) зависят от класса View. В этой ситуации технически гораздо более удобно создать
мини-KDE приложение и создать свой экземпляр KTMainWindow
.
Гораздо чаще элемент будет частью видимой области, что предполагает его объединение с другими элементами. Это может быть сделано
с использованием одного из следующих классов, которые предлагают разделители для отделения двух элементов:
QSplitter
KPanner
KNewPanner
Если видимая область будет содержать более двух элементов, вы сможете использовать второй экземпляр разделителя в качестве объекта управления
в одной из первоначальных областей. Добавьте соответствующие элементы на каждую из частей видимой области и установите первый разделитель как видимую область.
(см. Netscape Mail - прим. переводч.)
Наследование от QDialog
Если ваш элемент унаследован от QDialog
, то, вероятно, он используется для изменения одного или нескольких значений; часто это необходимо для установки
настроек приложения. Для вызова диалога вы должны добавить слот в класс App
, вставляя объявление метода и его реализацию.
Затем добавьте вызов конструктора для метода, а также вызов show()
или exec()
диалога. Наконец, вы должны позаботиться
об обработке результатов работы диалога; это может быть сделано в диалоге изменением значений родителя, или
получением значений из диалога (что сделает ваш диалог гораздо более легко переносимым в другие проекты). Имейте в виду, что вы должны вызвать
delete
, если вы создаете экземпляр диалога с помощью new
, чтобы избежать потери памяти.
Наконец, вы должны связать вход меню (обеспечив соответствующее сообщение в строке статуса) с новым методом, вызывающим диалог; можно
создать горячую клавишу и кнопку на панели инструментов. Для этого добавьте ресурсный ID в файл resource.h
. Затем
добавьте соответствующий вход меню в одно из выпадающих меню, уже имеющихся в панели меню, или создайте новое.
Вход меню состоит из:
- необязательной иконки. Установите ее вызовом макроса
Icon("iconname.xpm")
из KApplication
, чтобы использовать
уже существующий экземпляр KIconLoader
.
- имени входа меню. Добавьте его с использованием макроса
i18n("&имя_входа")
из KApplication
, чтобы обеспечить
интернационализацию. Амперсант должен быть перед буквой, которая обеспечивает доступ по горячей клавише.
- экземпляр, содержащий вызываемый метод. Обычно это указатель
this
.
- вызываемый слот. Используйте
SLOT(ваш_метод())
для вызова слота по сигналу activated()
.
- горячая клавиша. Должна быть установлена в 0, поскольку это назначение делается в
initKeyAccel()
, где вы
вводите горячие клавиши вместе с слотами для вызова. Затем вызовите changeMenuAccel()
для изменения
горячей клавиши. Это позволит сделать ее конфигурируемой через стандартный диалог в дальнейшем. Для стандартных действий используйте
значения, определенные KAccel
.
- меню ID, установленный в
resource.h
Next
Previous
Table of Contents