Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 6

Метод DrawText

07.09.2011, 16:33. Показов 2539. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, дайте пожалуйста пример использования метода DrawText под DX9. Есть инициализация приложения, как вывести текст?


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

Мне нужно только вывести текст и оформить его методом DrawText.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <windows.h>
#include <windowsx.h>
#include <d3d9.h>
#pragma comment (lib, "d3d9.lib")
 
LPDIRECT3D9 d3d;   
LPDIRECT3DDEVICE9 d3ddev;   
 
void initD3D(HWND hWnd);   
void render_frame(void);    
void cleanD3D(void);    
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    HWND hWnd;
    WNDCLASSEX wc;
 
    ZeroMemory(&wc, sizeof(WNDCLASSEX));
 
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = L"WindowClass";
 
    RegisterClassEx(&wc);
 
    hWnd = CreateWindowEx(NULL,
                          L"WindowClass",
                          L"Инициализация",
                          WS_OVERLAPPEDWINDOW,
                          300, 300,
                          800, 600,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);
 
    ShowWindow(hWnd, nCmdShow);
 
    initD3D(hWnd);
 
    MSG msg;
 
    while(TRUE)
    {
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
 
        if(msg.message == WM_QUIT)
            break;
 
        render_frame();
    }
 
    cleanD3D();
 
    return msg.wParam;
}
 
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            } break;
    }
 
    return DefWindowProc (hWnd, message, wParam, lParam);
}
 
 
void initD3D(HWND hWnd)
{
    d3d = Direct3DCreate9(D3D_SDK_VERSION);  
 
    D3DPRESENT_PARAMETERS d3dpp; 
 
    ZeroMemory(&d3dpp, sizeof(d3dpp));    
    d3dpp.Windowed = TRUE;   
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;   
    d3dpp.hDeviceWindow = hWnd;    
 
 
 
    d3d->CreateDevice(D3DADAPTER_DEFAULT,
                      D3DDEVTYPE_HAL,
                      hWnd,
                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                      &d3dpp,
                      &d3ddev);
}
 
void render_frame(void)
{
    
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
    d3ddev->BeginScene();    
    d3ddev->EndScene();    
    d3ddev->Present(NULL, NULL, NULL, NULL);  
}
 
 
void cleanD3D(void)
{
    d3ddev->Release();   
    d3d->Release();    
}
Добавлено через 54 минуты
Неужели никто не знает?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2011, 16:33
Ответы с готовыми решениями:

ANSI и DrawText
Вопрос, видимо, простой, но я пока не могу разобраться, что не так... Поиски по интернету решения не дали - видимо, не могу правильно...

Вывод текста не экран с помощью DrawText (DirectX)
Здравствуйте, проблема такая: пытаюсь вывести текст на экран, если я пишу вот так pFont-&gt;DrawText(NULL, L&quot;Все работает&quot;, -1,...

Класс Qpainter метод DrawText
Народ как можно у метода DrawText сделать перенос строки, а то у меня есть прямоугольник 160 на 120 и мне надо чтобы текст не вылезал за...

10
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2011, 16:36
Цитата Сообщение от LucikyMan Посмотреть сообщение
Есть инициализация приложения, как вывести текст?
- если есть HDC или же CDC::m_hDC то есть такая функция TextOut
Тут можешь посмотреть как меню прорисовал с помощью TextOut https://www.cyberforum.ru/cpp/... ost1962638

Добавлено через 50 секунд
Зная HWND HDC найти нет никаких проблем
HDC = GetWindowDC(HWND)
0
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 6
07.09.2011, 16:38  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1>------ Build started: Project: 15, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(39) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(145) : see declaration of 'getch'
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(50) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(84) : error C2664: 'TextOutW' : cannot convert parameter 4 from 'char [11]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(91) : error C2664: 'TextOutW' : cannot convert parameter 4 from 'char [5]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(92) : error C2664: 'TextOutW' : cannot convert parameter 4 from 'char *' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(95) : error C2664: 'TextOutW' : cannot convert parameter 4 from 'char *' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Code\15\15\Debug\BuildLog.htm"
1>15 - 5 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2011, 16:43
LucikyMan, что за предупреждения выложил?

Добавлено через 1 минуту
Если компилил моё меню, ну уж позаботься о типах, мой проект написан в 6-ке, у тебя 2009, неужели сложности есть просто подумать что вместо char * wchar * - порой диву даюсь
0
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 6
07.09.2011, 16:45  [ТС]
Какие же тут предупреждения? Тут сконвертировать не может.

Добавлено через 1 минуту
А именно DrawText можно?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2011, 16:46
LucikyMan, тебе сюда, у меня желание помогать отпало
Вывод текста с помощью TextOut()
хотябы немножко уходили от простого copy_past-a и включали б логику...

Добавлено через 47 секунд
Цитата Сообщение от LucikyMan Посмотреть сообщение
Какие же тут предупреждения? Тут сконвертировать не может.
- да потому что студия у тебя другая, настрой проект должным образом, ладно см топик выше, удачи!
0
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 6
07.09.2011, 16:51  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
LucikyMan, тебе сюда, у меня желание помогать отпало
Вывод текста с помощью TextOut()
хотябы немножко уходили от простого copy_past-a и включали б логику...
:Р А зачем Хд

Добавлено через 2 минуты
Сделал как сказано: С TextOut на TextOutA, ошибок меньше, но тем не менее (проект консольный):


C++
1
2
3
4
5
6
7
8
9
10
1>------ Build started: Project: 15, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(39) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(145) : see declaration of 'getch'
1>c:\documents and settings\admin\мои документы\code\15\15\main.cpp(50) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Code\15\15\Debug\BuildLog.htm"
1>15 - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Добавлено через 1 минуту
На вин32 тоже самое
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2011, 16:58
В топике о меню специально приложил скриншот работы, если твой компилятор ругается, значит ну наверное прочесть предупреждения надобно, кто виноват что Майкрос отрубил поддержку ранних версий - вот пожинаем результаты, код как будто на другом языке написанным воспринимается

LucikyMan,
Цитата Сообщение от LucikyMan Посмотреть сообщение
c:\documents and settings\admin\мои документы\code\15\15\main.cpp(50) : error C2664: 'MessageBoxW
MessageBoxA используй (уже машина сама подсказывает)

Цитата Сообщение от LucikyMan Посмотреть сообщение
warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
- ну млин getch у тебя как _getch идёт + POSIX либ юзаешь, Вставь в свою программу
C++
1
2
HDC hDC = GetWindowDC(hWnd);
TextOutA(hDC,0,30,"TEXT",strlen("TEXT"));
и не мучайся...
0
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 6
07.09.2011, 17:02  [ТС]
Получилось, спасибо!
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2011, 17:10
Цитата Сообщение от LucikyMan Посмотреть сообщение
Получилось, спасибо!
- ну слава богу, а то у меня уже глаз подёргиваться начал
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
07.09.2011, 19:35
LucikyMan, для вывода текста не надо использовать собственные наработки от GDI лучше передать объект-GDI HFONT подсистеме Direct3D пусть она на уровне ядра делает быструю работу, для этого есть интерфейс LPD3DXFONT
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
LPD3DXFONT  font = NULL;   // интерфейс для работы со шрифтом
 
void initD3D(HWND  hWnd)
{
   LOGFONTA  logf;
   ZeroMemory(&logf, sizeof(LOGFONTA));  
   logf.lfHeight = 18; // размер шрифта
   logf.lfWidth = 0;
   logf.lfWeight = FW_NORMAL;
   logf.lfCharSet = RUSSIAN_CHARSET;
   logf.lfOutPrecision = OUT_TT_PRECIS;
   logf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
   logf.lfQuality = DEFAULT_QUALITY;
   logf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
   lstrcpyA(logf.lfFaceName, "Arial");  // название шрифта: Arial, Impact, Tahoma, Roman...
 
   HFONT fgdi = CreateFontIndirect(&logf);
   D3DXCreateFont(d3ddev,  fgdi, &font);  // связать GDI-шрифт с интерф-D3D
   DeleteObject(fgdi);
}  
 
void render_frame(void)
{
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0); // твой код
     
    // вот код вывода текста
    D3DCOLOR   color = D3DCOLOR_XRGB(255, 28, 25); // красный цвет текста
    RECT   rect  = {  10L, 10L, 110L, 50L }; // прямоугольник вывода текста
    font->Begin();
    font->DrawText("Hello DirectX9 !!!" , -1, rect, DT_WORDBREAK, color);
    font->End();
 
    d3ddev->Present(NULL, NULL, NULL, NULL); // твой код
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2011, 19:35
Помогаю со студенческими работами здесь

Ошибка при рисовании текста - в XE3 не линкуется метод TCustomStyleServices::DrawText()
#include &lt;System.Types.hpp&gt; #include &lt;Vcl.Themes.hpp&gt; //--------------------------------------------------------------------------- ...

DrawText
как при пощи DrawText сделать надпись в окне , если можно простенький исходник. Заранее всем огромное спасибо!!!

( ? ) DrawText + очистка
Здравствуйте написал такой код,для того,чтобы вывести текст на экран: ... hDC = GetWindowDC(hWindow); SetBkColor(hDC, RGB(0, 0,...

DRAWTEXT(DT_CALCRECT)
Доброго времени суток. Пытаюсь создать окно &quot;static&quot; с определённой шириной и высотой, в зависимости от текста окна(чтобы высоты хватало на...

DrawText, TextOut
i - глобальная case WM_PAINT: { i++; wchar_t s; hdc=BeginPaint(hwnd,&amp;ps); GetClientRect(hwnd,&amp;rect); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru