1 / 1 / 1
Регистрация: 11.11.2016
Сообщений: 68
1

При вводе текста в окне: перевод строки при нажатии "Enter"

12.07.2017, 11:09. Показов 1192. Ответов 1

Значит, есть программа, работающая на строке TCHAR и "vector <TCHAR*> vtr";
Проблема в том, что при вводе с клавиатуры символы вовсе не отображаются и я не пойму почему. Если я в WM_CHAR (файл stdafx.h) перенесу строку InvalidateRect(hwnd, 0, 1); из if в else, то текст вводится, но строка не переводится при нажатии на ENTER, в чем, собственно, и заключается суть задания.


Сама программа:
stdafx.h
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
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
 
#include <windows.h>
#include <string.h>
#include <stdio.h>
 
#include <stdlib.h>
#include <ctime>
#include <vector>
 
 
LRESULT CALLBACK WFunc (HWND,UINT,WPARAM,LPARAM);
 
// Буфер
TCHAR str[256] = "";
 
#endif
Main.cpp
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
#include "stdafx.h"
 
 
 
char name[] = "Qwerty"; //Необходимо для регистрации окна
 
// указатель на нижнюю границу загрузки приложения
HINSTANCE hInst;
 
int APIENTRY WinMain(HINSTANCE hInstance,   //хендлер приложения
                     HINSTANCE , //незадаваемый параметр
                     LPSTR     lpCmdLine,   //командная строка
                     int       nCmdShow)    //вид окна
{
    
    hInst = hInstance;  //Создание копии 
    // 1.Создание внешнего вида ОКНА
    WNDCLASS win; //объект для информации об окне
    win.style = CS_HREDRAW | CS_VREDRAW; //Стили перерисовки
    win.lpfnWndProc = WFunc; //Имя (параметр) оконной функции должно соответствовать иени ф-ци 
    win.cbClsExtra = win.cbWndExtra = 0; // ВСЕГДА =0
    win.hInstance = hInstance;  //имя приложения, к которому привязано окно
    win.hIcon = LoadIcon(NULL, IDI_ASTERISK);   //иконка, идентификатор иконки ID_APPLIKATION
    win.hCursor = LoadCursor(NULL, IDC_ARROW); //курсор
    win.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //Цвет фона
    win.lpszMenuName = NULL;    //меню отсутствует
    win.lpszClassName = name;   //Имя для регистрации = qwerty
 
    //2.Регистрация окна в Операционной системе
    if (!RegisterClass(&win))
    {
        MessageBox(NULL,"Окно не зарегистрировано","Ошибка",MB_OK|MB_ICONERROR);
        return -1;  //если окно не зарегистрировано
    }
 
    //3.Создание ОКНА
    HWND hwnd; //Объявление хендлера Окна
    hwnd=CreateWindow(name,"Первое окно",WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/,50,50,
                      500,500,HWND_DESKTOP,NULL,hInstance,NULL);    //Создание хендлера Окна
 
    
    //4*.Отображение окна
 
    ShowWindow(hwnd,nCmdShow); //nCmdShow - для показа  окна
    UpdateWindow (hwnd); //обновить сразу окно - перерисовка
 
    //5.создание насоса сообщений
    MSG msg; //описание переменной Сообщения
    while (GetMessage(&msg,0,0,0))  // МОЖНО ОГРАНИЧИТЬ СООБЩЕНИЯ
    {
        TranslateMessage(&msg);  //разрешает использовать клавиатуру
        DispatchMessage(&msg); //отправка обработанного сообщения в ОС
    }
    return msg.wParam; //корректное закрытие основной программы
}

stdafx.cpp
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
#include "stdafx.h"
 
extern HINSTANCE hInst; //!
std::vector <TCHAR*> vtr;
 
LRESULT CALLBACK WFunc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;    //хендлер контекста устройства, служит для вывода-ввода информации
    PAINTSTRUCT ps;
    TCHAR ch[256] = "";
    static int sx, sy;
    
    switch (message)
    {
    case WM_SIZE:
            sx = LOWORD(lParam);
            sy = HIWORD(lParam);
        break;
 
    case WM_CHAR:
            ch[0] = (TCHAR)wParam;
            if (wParam == VK_RETURN)
            {
                vtr.push_back(str);
                InvalidateRect(hwnd, 0, 1);
            }
 
            else
            {
                ch[0] = (TCHAR)wParam;
                strcat(str, ch);
                //InvalidateRect(hwnd, 0, 1);
            }
        break;
 
    case WM_PAINT:
            hDC = BeginPaint(hwnd, &ps);
            RECT rect;
            rect.left = 1;
            rect.top = 1;
            rect.bottom = sy;
            rect.right = sx;
            DrawText(hDC, str, strlen(str), &rect, DT_EDITCONTROL);
            EndPaint(hwnd, &ps);
        break;
 
    case WM_DESTROY:
                    PostQuitMessage(0); //корректная обработка окончания сообщения
                    break;
    default:
        return
            DefWindowProc(hwnd,message,wParam,lParam);  //возврат неотработанного сообщения
    }
    return 0L;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2017, 11:09
Ответы с готовыми решениями:

Ошибка с массивом: программа при вводе "ступорится" при нажатии клавиши Enter
Задание: Напишите программу, используя указатели, которая вычисляет адреса чётных элементов...

Ввести один из символов "Y" или "n". При вводе "Y" вывести на экран слово "Да", а при вводе "n" слово "нет"
1.Ввести один из символов &quot;Y&quot; или &quot;n&quot;. При вводе &quot;Y&quot; вывести на экран слово &quot;Да&quot;, а при вводе...

При нажатии Enter при фокусе в нижнем QTextEdit печатать "Ok" в консоль (программа неправильно работает)
require 'Qt4' class Test&lt;Qt::TextEdit def keyPressEvent(e) ...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе...

1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
12.07.2017, 15:18 2
Цитата Сообщение от AGOUTI Посмотреть сообщение
но строка не переводится при нажатии на ENTER
Потому что VK_RETURN не добавляется в str.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2017, 15:18
Помогаю со студенческими работами здесь

Как сделать так чтоб при нажатии кнопки "enter" происходило нажатие кнопки "button1" на форме
Пишу программу которая должна сложить числа по нажатии кнопки &quot;button1&quot;. Подскажите, пожалуйста,...

Перевод строки при нажатии на Enter
Как сделать, чтобы при нажатии на Enter, как-то вставлялся тег &lt;br&gt;? Есть поле с отправкой...

Раскрытие блока при табировании и нажатии "Enter"
Есть скрипт $(&quot;.accordion-section-title-1&quot;).click(function() { ...

Нажатие кнопки на форме при нажатии "Enter"
Прошу помощи. Искал на форумах, пробовал разные примеры. Ни один не работает. Самый...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru