Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197

TextOut

19.06.2013, 17:14. Показов 5869. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста почему TextOut работает только в WM_PAINT?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2013, 17:14
Ответы с готовыми решениями:

Не работает Textout
Не получается вывести строку out. в ней точно есть текст, всё отлично выводится в messagebox, а через textout ничего не выводится. Сам...

Проблемы с TextOut
В одном из дочерних окон вывожу надпись. Данный фрагмент кода без ошибок, полностью компилируется, но надпись не выводится. В чем может...

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

10
Заблокирован
19.06.2013, 17:17
причём тут WM_PAINT? Можешь где хочешь вызывать. В WM_PAIN у тебя наверное в сгенерированном проекте просто уже есть HDC, а так тебе его надо самому получать и обновлять окно
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
19.06.2013, 17:48  [ТС]
FarStar, я попробовал такой код:

C++
1
2
3
4
5
6
    case WM_CREATE:
        support.b_Ok   = CreateWindow(L"button", L"Старт", WS_CHILD | WS_VISIBLE, 0, 0, 100, 50, hWnd, (HMENU)hb_Ok,hInst,0);
        support.t_Hour = CreateWindow(L"edit", L"Часы", WS_CHILD | WS_VISIBLE | WS_BORDER, 100, 0, 100, 50, hWnd, (HMENU)0,hInst,0);
        TextOut(hdc,100,101,(LPCWSTR)"666",3);
        UpdateWindow(hWnd);
        break;
не работает ;(
HDC hdc - глобальная переменная

Добавлено через 17 минут
Такой тоже ;(
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
    case WM_CREATE:
        support.b_Ok   = CreateWindow(L"button", L"Старт", WS_CHILD | WS_VISIBLE, 0, 0, 100, 50, hWnd, (HMENU)hb_Ok,hInst,0);
        support.t_Hour = CreateWindow(L"edit", L"Часы", WS_CHILD | WS_VISIBLE | WS_BORDER, 100, 0, 100, 50, hWnd, (HMENU)0,hInst,0);
        hdc = ::GetDC(hWnd);
        TextOut(hdc,100,101,(LPCWSTR)"Опа",3);
        UpdateWindow(hWnd);
        ::ReleaseDC(hWnd,hdc);
        break;


Добавлено через 9 минут
Подскажите пожалуйста что не так делаю ;(
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.06.2013, 19:04
А так не пробывал?
* * * * TextOut(hdc, 100, 101, L"Опа", 3);
Что за среда в обще?
На крайний случай можно за место GetDC попробывать получить дискриптор устройства
hDC = BeginPaint(hWnd, &ps);
Которая используется в WM_PAINT.
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
19.06.2013, 19:10  [ТС]
IPavel, VS 12. WinApi.
Бегин паинт пробовал, не работает ;(

Добавлено через 3 минуты
IPavel, ну т.е. всё компилируется прекрасно. Просто нет текста на окошке
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.06.2013, 20:26
Цитата Сообщение от PakistanCode Посмотреть сообщение
IPavel, VS 12. WinApi.
Бегин паинт пробовал, не работает ;(

Добавлено через 3 минуты
IPavel, ну т.е. всё компилируется прекрасно. Просто нет текста на окошке
Действительно в ветки WM_CREATE не пишет.
Думаю потому как ещё не прошла инициализация окна.
В ветки WM_PAINT рисует.
А зачем тебе понадобилось рисовать в WM_CREATE?
Для этого и создан WM_PAINT.
И почему он не подошёл?
0
Заблокирован
19.06.2013, 21:16
да что вы лепите
в любое место, после отработки функции ShowWindow вставляй
C++
1
2
3
4
5
HDC hdc;
   PAINTSTRUCT ps;
   hdc = BeginPaint(hWnd, &ps);
   TextOut(hdc,100,101,L"666",3);   
   EndPaint(hWnd, &ps);
естественно с макросом L перед "666", а не c тем, что у тебя было.

Чтобы рисовать в окне, оно должно быть показано на экране, а оно показано будет только после отработки ShowWindow.
А WM_CREATE, в котором ты пытаешься рисовать, ваще приходит от функции CreateWindow причём до возвата управления из этой функции и темпаче до отображения окна, тоесть окна в этом сообщение на экране показанно быть не может в принципе, как следствие - рисовать в WM_CREATE нельзя

WM_CREATE message
Sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
20.06.2013, 01:19  [ТС]
FarStar, спасибо!) Буду разбираться
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
20.06.2013, 10:34
Цитата Сообщение от FarStar Посмотреть сообщение
да что вы лепите
в любое место, после отработки функции ShowWindow вставляй
C++
1
2
3
4
5
HDC hdc;
   PAINTSTRUCT ps;
   hdc = BeginPaint(hWnd, &ps);
   TextOut(hdc,100,101,L"666",3);   
   EndPaint(hWnd, &ps);
естественно с макросом L перед "666", а не c тем, что у тебя было.

Чтобы рисовать в окне, оно должно быть показано на экране, а оно показано будет только после отработки ShowWindow.
А WM_CREATE, в котором ты пытаешься рисовать, ваще приходит от функции CreateWindow причём до возвата управления из этой функции и темпаче до отображения окна, тоесть окна в этом сообщение на экране показанно быть не может в принципе, как следствие - рисовать в WM_CREATE нельзя
Ну в обще то на личности пока ещё никто не переходил...
так что я думаю, что стоило бы и повежливее.
Я в принципе тоже самое написал, что не рисует он в WM_CREATE, только в тонкости не погружался и обобщил фразой
Думаю потому как ещё не прошла инициализация окна.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
20.06.2013, 12:13
FarStar, чему ты учишь ? Любое рисование в окне должно происходить в WM_PAINT , ЗАПОМНИ сам и недавай другим таких советов .
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.06.2013, 12:40
Цитата Сообщение от Игорь с++ Посмотреть сообщение
FarStar, чему ты учишь ? Любое рисование в окне должно происходить в WM_PAINT , ЗАПОМНИ сам и недавай другим таких советов .
ну не обязательно
"если Вас не интересует результат"(с)
сколько раз видел (даже в умных книжках) координаты мыши "рисуют" в WM_MOUSEMOVE
а потом удивляются, почему все пропало
WM_PAINT посылается системой окну когда оно должно быть перерисовано
окно вышло на передний план, развернулось,стало видимым ......
принудительно можно послать вызвав Invalidate
например те же координаты мыши
в WM_MOUSEMOVE
2 запомнили координаты
3 вызвали перерисовку
а в WM_PAINT уже рисовать эти координаты

Добавлено через 5 минут
Цитата Сообщение от FarStar Посмотреть сообщение
в любое место, после отработки функции ShowWindow вставляй
Цитата Сообщение от FarStar Посмотреть сообщение
hdc = BeginPaint(hWnd, &ps);
щас научишь
обвязка BeginPaint / EndPaint только в WM_PAINT
она не только получает дескриптор но и удаляет WM_PAINT из очереди сообщений
и если вызовешь не в WM_PAINT то сам себе злобный буратино
для всех остальных случаев GetDC
http://vsokovikov.narod.ru/New... _getdc.htm
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2013, 12:40
Помогаю со студенческими работами здесь

TextOut не работает
привет, столкнулся с такой проблемой #include <windows.h> #include <string.h> #define NUMLINES ((int)(sizeof devcaps / sizeof...

Проблемы с TextOut
Доброго времени суток! Стоит задача: вывести несколько строк из текстового файла. Считываю их в массив string, сохраняю как char* в...

функция TextOut
Помогите разобраться в функции TextOut(hdc, 0, 0, str.data(), str.size()); как я понял 1 параметр означает для какой структуры...

Помощь с Textout
я пытаюсь написать игру программист но мне нужен вывод денег и настроения но примеры с Textout я не понимаю...

Вывод текста в TextOut
Проблема с выводом сообщений из массива, походу выход за границы строк, ибо после основной строки выводится мусор. Не могу понять как тогда...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью 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 позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru