Создание другого окна из кода? - PullRequest
1 голос
/ 22 июля 2009

В настоящее время я работаю над игрой и хочу добавить к ней внешнюю консоль (сейчас она встроена в главное окно игры).

Что мне действительно нужно, так это создать новое окно, которое будет действовать как консоль, возможно, с текстовым полем внизу для добавления новых команд и большим текстовым полем вверху, которое выводит информацию.

Я использую DirectX и не уверен, что буду делать это. Создать новое окно из C ++? Если да, то как мне поступить с заданными требованиями (и я бы предпочел, чтобы окно, которое я создаю, не было iN CLR). Будет ли проблема между главным окном приложения и окном консоли? Я не возражаю против использования реальных объектов формы Windows, чтобы это произошло (на самом деле я бы предпочел это так, поскольку это дало бы преимущества копирования + вставки и тому подобное).

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

Ценю любую помощь по этому вопросу =)

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Первый совет: ищите библиотеку, которая предлагает то, что вы хотите. Возможно SDL или QT .

Или вы делаете это вручную: CreateWindowEx - ваша отправная точка. Остальное много читают о программировании Windows. Чарльз Петцольд может быть вашим другом здесь.

1 голос
/ 22 июля 2009

Многое зависит от вашего компилятора. Если вы используете Visual Studio (не экспресс), вы можете сделать это довольно легко, создав шаблон диалога. Затем вы можете использовать CreateDialogIndirect для создания вещи. Возможно, вы захотите использовать элемент управления RichEdit, встроенный в диалоговое окно (хотя элемент управления RichEdit не простой, поэтому ... если вы просто хотите использовать простой текст, вам будет намного проще использовать стандартный элемент управления Edit) для чего вы после. Затем вы можете передавать сообщения, используя SendDlgItemMessage, в расширенное редактирование, чтобы поместить текст в элемент управления RichEdit.

Если вы не можете использовать построитель шаблонов диалогов, это будет намного сложнее. Как указывает Тобиас, вам нужно использовать CreateWindow (Ex) для создания диалога, а затем CreateWindow - элемент управления rich edit внутри. Оттуда вы все равно сможете использовать SendDlgItemMessage для заполнения элемента управления RichEdit.

В любом случае вам нужно будет обрабатывать множество оконных сообщений. Каждый раз, когда пользователь щелкает или даже наводит указатель мыши на окно, вы получаете сообщение о Windows. Вам не нужно обрабатывать их все, но вам нужно будет выяснить, какие сообщения вам необходимо обработать, а затем обработать их. По общему признанию, используя простой элемент управления для редактирования, было бы довольно легко спамить текст в элемент управления для редактирования. Вы можете установить текстовое содержимое элемента управления, просто используя функцию SetWindowText (которая внутренне отправляет сообщение WM_SETTEXT).

...