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

Смена шрифта для текста в WinAPI

23.03.2011, 20:32. Показов 28960. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!)Уважаемые программисты, обращаюсь к Вам за помощью!У меня возникли проблемы при решении следующей задачи: нужно создать главное окно, зарегистрировать его, создать для него соответствующую оконную процедуру,где должна выводиться строка текста(до этого момента проблем не возникло).И вот собственно где проблема: отработать следующее событие: при нажатии ЛЕВОЙ кнопки мыши шрифт для текста изменяется на другой (например из "Times New Roman"--->"Monotype Corsiva").Программирую я на Visual C++ 6.0.И вся проблема в том, что компилятор у меня не ругается, но и не меняет шрифт для строки текста.Всем СПАСИБО заранее!)Ниже приведены мои старания.
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
124
125
126
127
128
129
#include "stdafx.h"   // Обязательно включаемые файлы
#include "string.h"
#include "stdlib.h"
#include "windows.h"
 
//---Прототип исп. ф-ии
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);      //Оконная ф-я главного окна
BOOL OnCreate(HWND, LPCREATESTRUCT); // Прототип ф-ии OnCreate
void OnPaint(HWND); // Прототип ф-ии OnPaint
void OnDestroy(HWND);   // Прототип ф-ии OnDestroy
 
//---Глобальные переменные
HINSTANCE hInst; 
HFONT hFont1, hFont2;   // Шрифты
 
//---Главная функция WinMain
int APIENTRY WinMain(HINSTANCE hInstance,
                              HINSTANCE hPrevInstance,
                              LPSTR     lpCmdLine,
                              int       nCmdShow)
{ char szClassName[] = "MainWindow";          // Имя класса
  char szTitle[] = "Главное Окно";   // Заголовок окна
  MSG Msg;      // Структура Msg типа MSG для получения сообщений Windows
  WNDCLASS wc;  // Структура wc типа WNDCLASS для задания характеристик окна
  HWND hwnd;  // Дескриптор окна приложения
 
//---Регистрация главного окна
  ZeroMemory(&wc, sizeof(wc));  
  wc.lpfnWndProc = WndProc;                     
  wc.hInstance = hInstance;    
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);   
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);     
  wc.hbrBackground = GetStockBrush(WHITE_BRUSH); 
  wc.lpszClassName = szClassName;                       
 
//---Регистрируем главное окно
  RegisterClass(&wc);
 
hwnd = CreateWindow( szClassName,           
                            szTitle,                
                            WS_OVERLAPPEDWINDOW,    
                            0,                      
                            0,                      
                            GetSystemMetrics(SM_CXFULLSCREEN),                  
                            GetSystemMetrics(SM_CXFULLSCREEN),                  
                            HWND_DESKTOP,                   
                            NULL,                   
                            hInstance,              
                            NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);     
 
//---Запуск цикла обработки сообщений
    while(GetMessage(&Msg, NULL, 0, 0))
    {
        
        TranslateMessage(&Msg);
    
        DispatchMessage(&Msg);
    }
    return Msg.wParam;  
 
} // Конец функции WinMain  
 
//---Оконная функция WndProc главного окна
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ 
    static char text1[]="ПРИВЕТ";
    static char text2[]="ВСЕМ";
    static RECT rc;
    static int x1,y1;
    static TEXTMETRIC tm;
    POINT cp;
    GetClientRect(hwnd,&rc);
 
    switch(msg) //Переход по значению msg - номеру сообщения            
    {   
 
    // Задание начальных координат вывода текста
    case WM_CREATE:
    {
        HDC hdc=GetDC(hwnd);    
        GetTextMetrics(hdc,&tm);
        x1=(GetSystemMetrics(SM_CXSCREEN)-tm.tmAveCharWidth*strlen(text1))/2;
        y1=(GetSystemMetrics(SM_CYSCREEN)-tm.tmHeight)/2;
        ReleaseDC(hwnd,hdc);
    };break;
    // Вывод текста в окно
    case WM_PAINT:
    {
        PAINTSTRUCT ps;      
        HDC hdc;
        hdc = BeginPaint(hwnd, &ps);
        HFONT
            hFont=CreateFont(15,5,0,0,FW_NORMAL,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH,"Times New Roman");
        
        SelectObject(hdc,hFont);
 
        TextOut(hdc,x1,y1-10,text1,strlen(text1));
        TextOut(hdc,x1,y1+10,text2,strlen(text2));
        DeleteObject(hFont);
        EndPaint(hwnd, &ps);
    };break;
 
    case WM_LBUTTONDOWN: //Отработка события нажатия ЛЕВОЙ кнопки мыши (ЗДЕСЬ ТО И ПРОБЛЕМА!)
    {
        
            HFONT hFont=CreateFont(15,5,0,0,FW_NORMAL,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH,"Monotype Corsiva");
 
            InvalidateRect(hwnd,&rc,TRUE);
            UpdateWindow(hwnd);
    };break;
 
    // Если пользователь удалил окно
    case WM_DESTROY:
    {
        PostQuitMessage(0);
    }; break;
        
    default: return DefWindowProc(hwnd, msg, wParam, lParam);
    } // Конец оператора switch
    return 01;
}// Конец процедуры WinProc
 
//---Функция OnDestroy обработки сообщений WM_DESTROY
void OnDestroy(HWND)
{ 
  PostQuitMessage(0); 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2011, 20:32
Ответы с готовыми решениями:

Смена шрифта во время набора текста
Здравстствуйте Пытаюсь сделать простейший текстовый редактор,на подобии Блокнота. Хочу сделать возможность выбора шрифта в нем. В...

Изменение размера шрифта текста с разными размерами шрифта в RichTextBox
Добрый вечер! Возникла такая проблема - в RichTextBox находится текст, размер которого мы можем изменять из ComboBox. Т.е выделяем фрагмент...

Изменение шрифта для текста в richTextBox
Всем привет еще раз. в Richtextbox есть текст. необходимо при нажатии на кнопку поменять шрифт и размер у этого текста на "Courier...

46
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
09.07.2021, 06:44
Студворк — интернет-сервис помощи студентам
Обычно. CreateFile(), WriteFile() или с помощью функций или классов стандартной библиотеки
https://docs.microsoft.com/en-us/windows/win32/fileio/creating-and-opening-files
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
09.07.2021, 16:27
Цитата Сообщение от politoto Посмотреть сообщение
Обычно. CreateFile(), WriteFile() или с помощью функций или классов стандартной библиотеки
https://docs.microsoft.com/en-... ning-files
Т.е даже так можно обрабатывать текст. Интересно жаль что статей нет по этому поводу, чем дальше в этот WinAPI тем меньше известно как с этим работать.

Добавлено через 2 минуты
Там значит есть какие-то атрибуты в CreateFile, в инструкциях Майкрософт есть RTF формат. Файл должен сохраниться с применением фонов покрашенных символов и т.д.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
10.07.2021, 18:49
Многие программы умеют обрабатывать RTF, не используя напрямую майкрософтовский код
https://interoperability.blob.... RTF%5d.pdf
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
10.07.2021, 21:56
Цитата Сообщение от politoto Посмотреть сообщение
Многие программы умеют обрабатывать RTF, не используя напрямую майкрософтовский код
дело в том что этот формат нужно получить на выходе с учётом того что мы открываем файл функцией CreateFile.

Добавлено через 2 минуты
А нет более краткого материала пока я эти 300 страниц переведу на русский скорее своё ПО сделаю. Изучить те функции будет куда быстрее, проблемно только шаблон сделать чтобы печатало нужные символы.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.07.2021, 08:46
Более краткий материал Вы можете сами себе наделать.
write'ом сделать пример текста с нужным форматированием, сохранить его в RTF,
открыть в "блокноте" или в редакторе Visual Studio и смотреть, какие теги и как нужно использовать.
В справочнике поискать подробности.
Windows Batch file
1
2
3
4
chcp 1251
@echo {\rtf1\ansi\ansicpg1251 {\colortbl ;\red255\green0\blue0;\red0\green255\blue0;\red0\green0\blue255;}\cf1 Красный \cf2 Зелёный \cf3 Синий} > mmm.rtf
type mmm.rtf
write mmm.rtf
Или HTML поизучайте. Он лучше документирован.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
11.07.2021, 15:34
Цитата Сообщение от politoto Посмотреть сообщение
сохранить его в RTF,
и как же сохранить его в RTF, я смотрю это очень трудоёмко в этом разбираться.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.07.2021, 15:41
Файл->Сохранить как..
Wordpad, вроде бы, по умолчанию сохраняет документы в формате RTF
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
11.07.2021, 22:44
Цитата Сообщение от politoto Посмотреть сообщение
Wordpad, вроде бы, по умолчанию сохраняет документы в формате RTF
программно так не сделаешь. Может у Rich Edit есть доступ к командам сохранить. Я про теги понял в принципе суть но до этого всего добраться как я без понятия. Какие-то функции WinApi какой-то Rich Edit даже не знаю за что хвататься, ваши идеи с тегами. Тут на Киберфоруме нету информации по этому поводу, самому всё это переворить тяжко?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.07.2021, 22:50
А зачем Вам программно? Вам же нужны краткие иллюстрации к спецификации формата RTF.
Это уже не API, а организация данных.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
11.07.2021, 22:52
Цитата Сообщение от politoto Посмотреть сообщение
Вам же нужны краткие иллюстрации к спецификации формата RTF.
Ну это конечный результат а обработка текста/документа будет программной, вот в чём идея.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.07.2021, 22:56
Записывать строчки в файл своей программой Вы, наверно, умеете.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
12.07.2021, 13:01
Цитата Сообщение от politoto Посмотреть сообщение
Записывать строчки в файл своей программой Вы, наверно, умеете.
ну записывать их не сложно, изучить какие символы есть и т.д. мне просто стала интересна идея с тэгами, интересно где оно так работает. Один из примеров вы привели это HTML. Также для меня критическим вопросом является перевод форматов. К примеру я могу создать своё ПО и использовать WinApi функции для печатания и покраски символов а вот как их перевести из своего формата в человекоподобные форматы я не знаю, нужно дохрена изучать а на это нет времени к сожалению хоть оно интересно и соблазн есть.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.07.2021, 13:11
Цитата Сообщение от Nexi99 Посмотреть сообщение
ак их перевести из своего формата в человекоподобные форматы я не знаю
Как вариант, один из человекоподобных форматов сделать своим.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
12.07.2021, 14:13
Цитата Сообщение от politoto Посмотреть сообщение
Как вариант, один из человекоподобных форматов сделать своим.
А нет функции WinApi которая может сохранить файл в нужный/возможный формат например RTF DOC и т.д.?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.07.2021, 15:53
Если нужно что-то готовое
https://docs.microsoft.com/en-... ument-save

Но самому генерировать RTF, думаю, проще.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
12.07.2021, 16:38
Цитата Сообщение от politoto Посмотреть сообщение
Но самому генерировать RTF, думаю, проще.
если ПО своё то нужно прописать метод сохранения правильно? Так а как конкретно выбрать RTF? Вот здесь кое что есть упоминается https://docs.microsoft.com/en-... ument-open
А там вначале указывается Save("file.rtf"...)

Добавлено через 5 минут
далее идут флаги
long Flags,
long CodePage

а что в них бить без понятия особенно в кодировку

Добавлено через 3 минуты
А флаги наверное нужно и брать по предложенной мною ссылке а вот с кодировкой что не понятно. Спасибо вам что тут сказать. Вопросов конечно много решать надо ещё картинки нужно как-то обрабатывать.

Добавлено через 12 минут
А какое ПО использует эти функции https://docs.microsoft.com/en-... xtdocument?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.07.2021, 18:08
Не знаю. Этот интерфейс добавили не так давно.
Может быть, какой-нибудь редактор на основе Rich Edit с макросами на скриптовом языке или на .Net ?
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
12.07.2021, 19:07
Цитата Сообщение от politoto Посмотреть сообщение
Не знаю. Этот интерфейс добавили не так давно.
Мне вот даже интересно а в чём эти документы сохраняются открываются и чем они должны быть, как оно их выкидает из процесса. Короче трудоёмко. Ну ребята находят функции вытаскивают из dll и описывают, исходников их конечно же нет.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.07.2021, 20:33
У ребят, которые эти интерфейсы опубликовали, исходники всех DLL, конечно, есть.
https://github.com/microsoft
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
13.07.2021, 01:37
Цитата Сообщение от politoto Посмотреть сообщение
У ребят, которые эти интерфейсы опубликовали, исходники всех DLL, конечно, есть.
Я так понял что нету раз эти функции в dll-ах сидят. С чего это вдруг они решили их показать эти функции, пусть бы дали нормальный прямой доступ к дескрипторам и т.д. чтобы не гемороиться с этими функциями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2021, 01:37
Помогаю со студенческими работами здесь

Считать из текстового файла параметры шрифта и применить их для текста
в текстовом файле содержатся несколько строк в формате %№вопроса%название шрифта%размер шрифта%цвет%признак ответа% (Признак ответа 1 –...

Одинаковый межстрочный отступ для текста с разным размером шрифта
Посоветуйте пожалуйста, как сделать одинаковый вертикальный отступ допустим в 15px для текста с разным размером шрифта и разным line-height...

Программа для смена текста?
Потскажите программу которая в случии если не переключил язык переписывала на другой что бы не стерать все и непечатать заного?

Изменение шрифта Winapi
Как можно менять шрифт в каждом дочернем окне, при это при изменении размеров окна, чтобы он сохранялся, а не менялся?!

Создать панель инструментов выбора гарнитуры шрифта для выделенного текста
помогите пожалуйста как можно создать панель инструментов, на которой реализовать возможность выбора гарнитуры шрифта, для ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru