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

Не могу включить возможность вводить табуляции в поле edit

07.07.2014, 03:20. Показов 1354. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите плиз Не могу включить возможность вводить табуляции в поле edit!!!!!!
код:

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
#include<Windows.h>
#include<windowsx.h>
#include"resource.h"
#include <fstream>
 
using namespace std ;
 
HWND program_edit ;
 
BOOL CALLBACK DlgProc ( HWND, UINT, WPARAM, LPARAM ) ;
 
 
void Cls_OnClose ( HWND hWnd ) {
    EndDialog ( hWnd, 0 ) ;
}
 
 
BOOL Cls_OnInitDialog ( HWND hWnd, HWND hwndFocus, LPARAM lParam ) {
    program_edit = CreateWindowEx (0, L"EDIT", 0, WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN, 0, 0, 500, 300, hWnd, 0, 0, 0 ) ;
    return TRUE ;
}
 
void Cls_OnCommand ( HWND hWnd, int id, HWND hwndCtl, UINT CodeNotify ) {
 
}
 
 
INT WINAPI WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int nShow ) {
    setlocale (LC_ALL, "rus") ;
    return DialogBox ( hInst, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DlgProc ) ;
}
 
BOOL CALLBACK DlgProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
    switch (uMsg) {
        HANDLE_MSG ( hWnd, WM_CLOSE, Cls_OnClose ) ;
        HANDLE_MSG ( hWnd, WM_INITDIALOG, Cls_OnInitDialog ) ;
        HANDLE_MSG ( hWnd, WM_COMMAND, Cls_OnCommand ) ;
    }
    return 0 ;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2014, 03:20
Ответы с готовыми решениями:

На форме предоставьте пользователю возможность вводить целые числа (в поле для ввода Edit). При нажатии на клавишу Enter (если поле не пусто) его соде
Разработайте приложение в соответствии с заданием. На форме предоставьте пользователю возможность вводить целые числа (в поле для ввода...

Как в поле edit вводить более 5 символов при ограниченных размерах?
Как в поле edit вводить более 5 символов при ограниченных размерах? Вводится только 5 символов. То есть если увеличить длину поля то...

Как запретить вводить запятую в начале и больше одной в поле Edit?
Как запретить вводить запятую в начале и больше одной в поле Edit?

6
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
07.07.2014, 04:16
WS_TABSTOP флаг добавь в флаги эдита
0
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 9
07.07.2014, 04:53  [ТС]
Добавлял - не работает, потому и спрашиваю как сделать
C++
1
program_edit = CreateWindowEx (0, L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | ES_WANTRETURN, 0, 0, 500, 300, hWnd, 0, 0, 0 ) ;
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
07.07.2014, 10:35
Izual, ему нужно пробелы вставлять клавишей TAB, как в Блокноте.
0
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 9
08.07.2014, 00:29  [ТС]
Так и не дождался ответа) Все самому приходится делать)
После изучения Блокнота понял причину - если создаешь основное окно ( не диалоговое) - все работает нормально, а причина, скорей всего, в стиле WM_CHILD, который делает окно дочерним и не дает вводить знак табуляции, зарезервированый для переключения между дочерними окнами.
Так что пришлось немного пошаманить с перехватом WM_KEYDOWN.
Если кому интересно - вот весь рабочий код ( создайте просто в ресурсах любой диалог с IDD_DIALOG1 )
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<Windows.h>
#include<windowsx.h>
#include"resource.h"
#include <fstream>
 
using namespace std ;
 
HWND program_edit ;
 
BOOL CALLBACK DlgProc ( HWND, UINT, WPARAM, LPARAM ) ;
LRESULT CALLBACK EditProc ( HWND, UINT, WPARAM, LPARAM ) ; // наша функция которая будет обрабатывать события edit'a
WNDPROC EditDefault ; // указатель на стандартную функцию обработчик событий edit'a
 
void Cls_OnClose ( HWND hWnd ) {
    EndDialog ( hWnd, 0 ) ;
}
 
BOOL Cls_OnInitDialog ( HWND hWnd, HWND hwndFocus, LPARAM lParam ) {
    program_edit = CreateWindowEx (0, L"EDIT", 0, WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_TABSTOP, 0, 0, 500, 300, hWnd, 0, 0, 0 ) ;
    EditDefault = ( WNDPROC ) GetWindowLongPtr ( program_edit, GWLP_WNDPROC ) ; // получаем указатель на стандартную функцию обработчик событий edit'a
    SetWindowLongPtr ( program_edit, GWLP_WNDPROC, ( LONG_PTR ) EditProc ) ; // меняем указатель на нашу функцию
    return TRUE ;
}
 
void Cls_OnCommand ( HWND hWnd, int id, HWND hwndCtl, UINT CodeNotify ) {
}
 
LRESULT CALLBACK EditProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
    switch ( message ) {
        case WM_KEYDOWN:
            switch ( wParam ) {
                case VK_TAB :
                    for ( int i = 0; i < 4; i++)
                    SendMessage ( hWnd, WM_CHAR, 0x20, 0) ; 
            }
        break ;
        default :
            return CallWindowProc ( EditDefault, hWnd, message, wParam, lParam ) ; // все остальные события пусть обрабатывает стандартный обработчик
    }
    return 0 ;
}
 
INT WINAPI WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int nShow ) {
    setlocale (LC_ALL, "rus") ;
    return DialogBox ( hInst, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DlgProc ) ;
}
 
BOOL CALLBACK DlgProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
    switch (uMsg) {
        HANDLE_MSG ( hWnd, WM_CLOSE, Cls_OnClose ) ;
        HANDLE_MSG ( hWnd, WM_INITDIALOG, Cls_OnInitDialog ) ;
        HANDLE_MSG ( hWnd, WM_COMMAND, Cls_OnCommand ) ;
    }
    return 0 ;
}
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
08.07.2014, 23:20
NoRDiX, нет, причина не в стиле WS_CHILD от основного окна. У меня табуляция в EDIT'е для него работает, достаточно EDIT'у добавить стиль ES_MULTILINE.
0
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 9
08.07.2014, 23:43  [ТС]
Digit@ll, Если ты заметил стиль включен и в основном окне работает без проблем. Проблема не в основном окне а в диалоговом модальном) И там WM_CHILD обязателен и мультилайн не помогает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2014, 23:43
Помогаю со студенческими работами здесь

Есть ли возможность быстро заменить все табуляции на двойные пробелы в VS2019?
В ряде проектов необходима отличная от дефолтной вижаулстудийной расстановки отступов, можно ли на определенном проекте их заменить таким...

Как в форме в Access в текстовое поле вводить данные, отображающиеся в этом поле звездочками?
Люди добрые может кто знает, а то я заработался. Как в форме в Access в текстовое поле вводить данные, отображающиеся в этом поле...

Обеспечить ограничение на возможность ввода символьной информации цифрами, пробелом, знаком табуляции, знак
1. Обеспечить ограничение на возможность ввода символьной информации цифрами, пробелом, знаком табуляции, знаками препинания, русским...

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

Запрет на ввод чисел в EDIT, пока не будет заполнено другое поле edit
Здравствуйте! Дело в том, что мне нужно сделать так, чтобы одно поле edit нельзя было заполнять до тех пор, пока не заполнено другое поле...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru