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

WM_PAINT && TextOut()

27.09.2017, 02:29. Показов 1678. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Вопрос насчет TextOut() и генерации события WM_PAINT. Имеется следующий код:
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
    case WM_PAINT:
        hDC = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
 
        switch(LOWORD(wParam)){
            case MENU_ITEM_1:
            {
                bool result = TextOut(hDC, 0, 0, "_1", 3);
                if(result)MessageBox(NULL, "true", "Message", MB_OK);
                else MessageBox(NULL, "false", "Message", MB_OK);
                break;
            }
            case MENU_ITEM_2:
            {
                //...
                break;
            }
            default:
                //MessageBox(NULL, "MENU", "Message", MB_OK);
                //TextOut(hDC, 0, 0, "", 3);
                break;
        }
        EndPaint(hwnd, &ps);
        break;
    case WM_COMMAND:
        SendMessage(hwnd, WM_PAINT, wParam, lParam);
        break;
Хотела сделать так, чтобы при выборе одного пункта меню отображалось одно, другого - другое. Для этого после получения события WM_COMMAND генерировала новое событие WM_PAINT с сохранением тех же параметров. Все получается, result равен true, но экран не перерисовывается. Подскажите, пожалуйста, в чем проблема?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2017, 02:29
Ответы с готовыми решениями:

Как заблокировать сочетание клавиш в C++ && WinApi
Как заблокировать сочетания клавиш, например alt + F4 в моей программе на C++ && WinApi?

C++ & DirectX
Подскажите уроки по DirectX 11 и С++ или книгу.

CryptoAPI & C++
Добрый день. Вот возникла такая задачка: есть ключ, в BLOB формате(т.е. набор байтов, алгоритм RSA_AES) нужно перевести его в формат...

3
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 3
27.09.2017, 17:25  [ТС]
Atakai, хорошо. Вот переделанный код:
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
case WM_PAINT:
        {
            hDC = BeginPaint(hwnd, &ps);
 
            MessageBox(hwnd, "WM_PAINT", "Info", MB_OK);
            //GetClientRect(hwnd, &rect);
            //TextOut(hDC, 0, 0, "Loading...", 10);
 
            EndPaint(hwnd, &ps);
            break;
        }
        case WM_COMMAND:
        {
            hDC = GetDC(hwnd);
 
            //InvalidateRect(hwnd, NULL, TRUE);        //Заносит событие в очередь, поэтому после того, как отобразились
//надписи из WM_COMMAND, обрабатывает WM_PAINT, и стирает то, что появилось
            UpdateWindow(hwnd);        //Вообще ничего не делает, хотя и возвращает не равное 0 значение
 
            switch(LOWORD(wParam)){
                case MAIN_0:
                    TextOut(hDC, 0, 0, "MAIN_1", 6);
                    break;
                case MAIN_1:
                    TextOut(hDC, 0, 0, "MAIN_2", 6);
                    break;
                default:
                    TextOut(hDC, 0, 0, "MAIN_345", 8);
                    break;
            }
            ReleaseDC(hwnd, hDC);
            break;
        }
Может, так и нельзя делать. Но как полностью перерисовать окно после выбора соответствующего пункта меню? Чтобы выбрав одно - нарисовалось одно, а другое - другое. Как я поняла, WM_PAINT все под один шаблон вывод и все.
0
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 3
27.09.2017, 23:10  [ТС]
Atakai, спасибо. Как раз то, что нужно)
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
28.09.2017, 10:03
Добавьте ещё это в WM_PAINT перед выводом текста:
C++
1
SetBkColor((HDC)wParam, GetSysColor(COLOR_BTNFACE));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2017, 10:03
Помогаю со студенческими работами здесь

InternetOpenUrl & other
Господа пытаюсь при помощи WinApi - шных функций вывести интернет страницу , но получается какая то белеберда , быть может я , что то не...

SetPixelFormat & 0xC0070006
Вкратце SetPixelFormat возвращает false, GetLastError возвращает 0xC0070006. Как исправить сие недоразумение ?

WM_KEYDOWN & WM_CHAR
Приветствую . Необходимо получить символ введенный с клавиатуры в любом окне ОС . Делаю хук , отлавливаю событие : int APIENTRY...

WinAPI & INI
Доброго времени суток. Прошу помощи делаю окно WINAPI. Сделал запись параметров окна так : std::ofstream test("test.txt",...

C++Builder XE2 & WinAPI
Что бы я хотел узнать, как мне в C++Builder XE2 с помощью winapi функция создать окно, пустое окно.чтобы его можно было переключать...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru