Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 20.09.2015
Сообщений: 69
1

Использование ListBox для вывода результатов

03.03.2016, 21:41. Показов 759. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программа для перевода текста в верхний регистр с выводом результата с помощью функции DrawText. Как изменить ее и сделать вывод в LISTBOX? Решение нужно срочно, поэтому желательно предоставить измененный текст кода. Заранее благодарю
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
130
131
132
133
#include <Windows.h>
#include <iostream>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK BtnProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    setlocale(LC_ALL, "Russian");
    static LPCWSTR szAppName = TEXT("MyWindowApp");
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;                      // Структура настройки класса
 
    wndclass.cbSize = sizeof(wndclass);       // Размер структуры
    wndclass.style = CS_HREDRAW | CS_VREDRAW; // Cтиль окна (перекрашивать при изменении размера)
    wndclass.lpfnWndProc = WndProc;           // Указатель для callback
    wndclass.cbClsExtra = 0;                  // Количество дополнительных байт windowinstance
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;           // Хэндл окна
    wndclass.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(nullptr, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(COLOR_BACKGROUND);
    wndclass.lpszMenuName = nullptr;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon(nullptr, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);               // Регистрация класса окна
 
    hwnd = CreateWindow(szAppName, TEXT("Лабораторная работа №2"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, hInstance, nullptr);
 
    ShowWindow(hwnd, iCmdShow);               // Показать окно
    UpdateWindow(hwnd);                       // Перекрасить окно
 
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
TCHAR*  ToUpperCase(TCHAR *input) {
    static TCHAR buffer[1000];
    TCHAR *s = input;
    TCHAR *t = buffer;
 
    while (*s != '\0') {
        *t = toupper(*s);
        s++;
        t++;
    }
    return buffer;
}
 
HWND editHwnd;
HMENU editIdentifier = (HMENU)10000;
TCHAR string[100];
TCHAR* upperString = nullptr;
WNDPROC OldBtnProc;
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    GetWindowRect(hwnd, &rect);
    // Cообщения обработки
    switch (iMsg)
    {
    case WM_CREATE:
        editHwnd = CreateWindow(
            L"EDIT",     // Предопределенный класс (+юникод)
            L"",         // Текст поля ввода (пусто) 
            WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_TABSTOP,  // Стили 
            100,         // x (абсцисса)  
            100,         // y (ордината)
            400,         // Ширина поля
            25,          // Высота поля
            hwnd,        // Родительское окно
            editIdentifier,
            (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
            NULL);       // Указатель не требуется
 
        // Подкласс кнопки управления
        OldBtnProc = reinterpret_cast<WNDPROC>(static_cast<LONG_PTR>(
            SetWindowLongPtr(editHwnd, GWLP_WNDPROC,
                reinterpret_cast<LONG_PTR>(BtnProc))));
 
        // Сохранить оригинал, кнопка оконной процедуры по умолчанию в качестве
        // кнопки управления пользовательскими данными
        SetWindowLongPtr(editHwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(OldBtnProc));
        break;
 
    case WM_PAINT:
        if (upperString != nullptr) {
            hdc = BeginPaint(hwnd, &ps);
            DrawText(hdc, upperString, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
            EndPaint(hwnd, &ps);
        }
        return 0;
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
 
LRESULT CALLBACK BtnProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    // Оконная процедура подкласса для кнопки
    static HWND hEdit;
    // Восстановить ранее сохраненную кнопку процедуры окна 
    static WNDPROC OrigBtnProc = reinterpret_cast<WNDPROC>(static_cast<LONG_PTR>(
        GetWindowLongPtr(hwnd, GWLP_USERDATA)));
    switch (uMsg)
    {
    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_RETURN:
            GetWindowText(editHwnd, string, 100);
            upperString = ToUpperCase(string);
            SendMessage(hwnd, WM_PAINT, 0, 0);
            break;
        }
 
    default:
        // Вызов хэндла по умолчанию для управления процессом
        return CallWindowProc(OrigBtnProc, hwnd, uMsg, wParam, lParam);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2016, 21:41
Ответы с готовыми решениями:

Оптимальная длина строки для вывода результатов программы
прога в цикле делает всякие вычисления и печатает результат в конце цикла: for (int i = 0; i &lt;...

Разработать приложение для ввода и вывода результатов сессии учебной группы
Разработать приложение для ввода и вывода результатов сессии учебной группы. Вывести список...

Использование Tasks для отображения результатов операции
Я совсем с этими тасками запутался. Поэтому объясню проще, чтобы мне подсказали. Есть форма, на ней...

Код для постраничного вывода результатов поиска как у поисковиков. Что не так?
Есть код, который выбирает из базы значения в соответствии с запросом и выводит их пользователю...

2
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
04.03.2016, 01:34 2
Цитата Сообщение от Nickolas97 Посмотреть сообщение
Как изменить ее и сделать вывод в LISTBOX?
1. в строке 57 добавь определение hListBox
2. в обработке WM_CREATE (WndProc) добавь
C++
1
hListBox = CreateWindow(L"LISTBOX",NULL,WS_VISIBLE|WS_CHILD|LBS_STANDARD,600,100,400,250,hwnd,0,GetModuleHandle(0),NULL);
3. строку 125 заменить/добавить после нее
C++
1
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM) upperString);
0
1 / 1 / 0
Регистрация: 20.09.2015
Сообщений: 69
09.03.2016, 17:17  [ТС] 3
Не работает такой вариант. Программа запускается, но даже ввести текст не могу.
0
09.03.2016, 17:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2016, 17:17
Помогаю со студенческими работами здесь

Разработать форму для ввода исходных данных и вывода результатов, используя компоненты страницы Standard.
ДОбрый вечер уважаемые форумчане! Пишу вам и прошу помощи в написании программы. Если у вас будет...

Разработать форму для ввода исходных данных и вывода результатов, используя компоненты страницы Standard
1.Определить, является ли заданное целое число А нечетным двузначным числом 2.Заданы площади круга...

Как найти ошибку в программе для расчета произведения Х1*Х2 и вывода полученных результатов в виде таблицы
Как найти ошибку в программе для расчета произведения Х1*Х2 и вывода полученных результатов в виде...

Запрос для вывода в listbox информации за год
Добрый день! Прошу о помощи: Не знаю как записать запрос на вывод информации в листбокс,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru