Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.
Как изменить текст в edit box'е
A: (Игорь Вартанов)
Оригинальная ссылка: http://www.rsdn.ru

Поскольку edit box является окном, то для изменения текста в нем вполне подойдет функция SetWindowText() (либо SetDlgItemText(), что, в сущности, дела не меняет). В этом случае произойдет полная замена текста в окне.
// Пример полной замены текста.
 
 
 
 LPCSTR szText = "Полная замена текста в окне редактирования.";
 
 HWND hwndEdit = GetDlgItem(hDlg, IDC_EDIT);
 
 SetWindowText(hwndEdit, szText);
Вставка/замена фрагмента

В зависимости от ситуации может потребоваться не полная, а частичная замена имеющегося текста, либо присоединение фрагмента текста к уже имеющемуся. И тот, и другой случаи обрабатываются выделением фрагмента текста (посылкой сообщения EM_SETSEL) и посылкой сообщения EM_REPLACESEL окну редактирования.
// Пример вставки фрагмента.
 
 // Если имеется выделение, оно будет заменено фрагментом текста,
 
 // если выделение отсутствует, фрагмент будет добавлен к концу текста.
 
 int selFirst = 0, selLast = 0;
 
 SendDlgItemMessage ( hDlg, IDC_EDIT1, EM_GETSEL,
 
                     (WPARAM) &selFirst, (LPARAM) &selLast );
 
 if(selFirst == selLast)
 
 {
 
     // Получим длину текста для многострочного окна редактирования
 
     selFirst = selLast = lstrlen(
 
              *(char**) SendDlgItemMessage (
 
                             hDlg, IDC_EDIT1,
 
                             EM_GETHANDLE, 0, 0 ) );
 
 }
 
 SendDlgItemMessage ( hDlg, IDC_EDIT1, EM_SETSEL, selFirst, selLast );
 
 SendDlgItemMessage ( hDlg, IDC_EDIT1, EM_REPLACESEL, TRUE, (LONG)szReplace );
ПРИМЕЧАНИЕ

Чтобы присоединить фрагмент к уже имеющемуся тексту, необходимо установить указатели начала и конца области выделения на позицию сразу за последним символом текста, для чего необходимо получить его общую длину. В данном примере использован способ получения указателя на внутренний буфер окна редактирования и определения длины хранящейся в нем строки (Внимание! сообщение EM_GETHANDLE имеет смысл только для окна редактирования, имеющего стиль ES_MULTILINE). Вы, разумеется, можете использовать любые другие способы определения искомой длины. Так, например, для однострочного окна можно использовать сообщение EM_LINELENGTH.

Кроме того, вставку фрагмента можно осуществить посредством операций с буфером обмена (посылкой окну сообщения WM_PASTE), при условии, что вставляемый фрагмент уже находится в буфере. Разумеется, предварительно необходимо установить область выделения в окне редактирования.
// Вставка текста из буфера обмена
 
 SendDlgItemMessage(hDlg, IDC_EDIT1, WM_PASTE, 0, 0);
Удаление фрагмента

Удаление фрагмента текста эквивалентно замене выделенного текста строкой нулевой длины. Следовательно, описанная выше методика позволяет выполнить удаление части (или всего) текста. Опять-таки, для этого необходимо осуществить выделение нужного участка текста и послать сообщение EM_REPLACESEL окну редактирования.
SendMessage(hwndEdit, EM_REPLACESEL, TRUE, (LPARAM)"");
Для той же цели можно воспользоваться посылкой сообщения WM_CLEAR.
SendMessage(hwndEdit, WM_CLEAR, 0, 0);



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS