Lớp Edit Text Trong Lập Trình C Trên Windows

LỚP EDIT TEXT TRONG LẬP TRÌNH C TRÊN WINDOWS

Trong một phương diện nào đó thì lớp soạn thảo (edit text) được xem là một cửa sổ được định nghĩa sẵn đơn giản nhất. Nhưng xét một khía cạnh khác thì nó lại phức tạp nhất. Dùng tên lớp "edit" cùng với các thông số ví trí x, vị trí y, chiều rộng, chiều cao trong hàmCreateWindow để tạo ra cửa sổ soạn thảo. Khi cửa sổ soạn thảo nhận focus thì chúng ta có thể gõ chữ vào, xoá các chữ, đánh dấu các chữ…vv. Các thao tác trên được Windows hỗ trợ hoàn toàn.
Một trong những ứng dụng thường xuyên nhất, và đơn giản nhất của lớp soạn thảo là tạo ra một cửa sổ cho phép người dùng nhập các chữ vào. Để minh họa cho cửa sổ nhập ta xét ví dụ 3.2 sau.
* EDITTEXT.CPP
#include <windows.h>
#define ID_EDIT 1
LRESULTCALLBACK WndProc (HWNDUINTWPARAMLPARAM);
TCHAR szAppName[] = TEXT ("PopPad1") ;
LRESULTCALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hwndEdit ;
switch (message)
{
case WM_CREATE :
hwndEdit = CreateWindow (TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU)ID_EDIT, ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
return 0 ;
case WM_SETFOCUS :
SetFocus (hwndEdit) ;
return 0 ;
case WM_SIZE :
MoveWindow (hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
return 0 ;
case WM_COMMAND :
if (LOWORD (wParam) == ID_EDIT)
if ( HIWORD(wParam)==EN_ERRSPACE || HIWORD(wParam)==EN_MAXTEXT )
MessageBox(hwnd, TEXT("Edit control out of space."), szAppName, MB_OK | MB_ICONSTOP) ;
return 0 ;
case WM_DESTROY :
PostQuitMessage(0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Hạn chế của edit box được định nghĩa sẵn là số ký tự người dùng nhập vào phải không quá 30.000 ký tự chữ.

Các kiểu lớp Edit Text

Trong ví dụ trên đã tạo một edit box bằng cách gọi hàm CreateWindow. Có kiểu cửa sổ là WS_CHILD, cùng một số tùy chọn. Chúng ta có thể canh trái, phải, giữa các chữ trong vùng cửa sổ edit box bằng cách thay đổi thông số kiểu cửa sổ ES_LEFTES_RIGHT,ES_CENTER trong hàm CreateWindow.
Có thể tạo một edit control cho phép hiển thị nhiều hàng bằng cách chọn kiểu cửa sổ ES_MULTILINE. Một edit control mặc định chỉ cho phép nhập một hàng ký tự cho đến cuối edit box. Sử dụng ES_AUTOHSCROLLES_AUTOVSCROLL để tạo một edit control có thanh cuộn ngang, và cuộn đứng tự động. Có thể thêm thanh cuộn ngang và đứng vào edit control bằng cách sử dụng kiểu cửa sổWS_HSCROLLWS_VSCROLL. Dùng kiểu cửa sổ WS_BORDER để tạo đường viền cho edit control.
Kích thước của edit control được xác định bằng cách gọi hàm MoveWindow khi hàm WndProc xử lý thông điệp WM_SIZE. Trong ví dụ trên thì kích thước của edit control được đặt bằng kích thước của cửa sổ chính.
MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
Các edit control gởi thông điệp WM_COMMAND cùng các thông số wParam, lParam đến window cửa sổ cha. Với ý nghĩa :LOWORD(wParam) là ID cửa sổ con, HIWORD(wParam) là mã thông báo. lParam là handle của edit control.
Danh sách mã thông báo của edit Control.
Mã thông báoý nghĩa
EN_SETFORCUSEndit control nhận focus nhập.
EN_KILLFORCUSEndit control mất focus nhập.
EN_CHANGENội dung của edit control sẽ thay đổi.
EN_UPDATENội dung của edit control thay đổi.
EN_ERRSPACEEdit control chạy quá thời gian.
EN_MAXTEXTEdit control chạy quá không gian khi chèn.
EN_HSCROLLThanh cuộn đứng của edit control bị tác động.
EN_VSCROLLThanh cuộn nằm của edit control bị tác động.

Các thông điệp đến một lớp Edit Text

Các thứ tự thông điệp sau cho phép cắt, sao chép, xoá các phần chữ được chọn (selected).
SendMessage (hwndEdit, WM_CUT, 0, 0);
SendMessage (hwndEdit, WM_COPY, 0, 0);
SendMessage (hwndEdit, WM_CLEAR, 0, 0);
Với WM_CUT cắt phần chữ đã được đánh dấu đưa vào vùng Clipboard. WM_COPY sao chép phần chữ đã được đánh dấu đưa vào Clipboard nhưng phần đánh dấu vẫn còn trên edit control. WM_CLEAR xóa phần chữ đã được đánh dấu mà không đưa vào clipboard.
Chèn phần chữ nằm trong clipboard vào vùng soạn thảo edit control bằng cách gọi hàm.
SendMessage (hwndEdit, WM_PASTE , 0, 0);
Nhận bắt đầu và kết thúc của phần chữ đã chọn bằng cách gọi hàm :
SendMessage (hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iEnd );
iStart lưu vị trí bắt đầu và iEnd lưu ví trí kết thúc.
Để thay thế phần chữ đã chọn bằng chữ khác, ta dùng hàm ;
SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)szString);
Trong đó szString là chuỗi muốn thay thế.
Đối với edit control nhiều dòng, ta đếm số dòng chữ bằng hàm.
iCount = SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0);
Các dòng trong edit control được đánh số bắt thứ tự từ 0. Lấy chiều dài của một dòng bằng lệnh.
iLength = SendMessage (hwndEdit, EM_LINELENGTH, iLine, 0).
Chép hàng này vào bộ đệm bằng cách gọi hàm.
iLength = SendMessage ( hwdEdit, EM_GETLINE, iLine, (LPARAM)Buffer ).

1 Comment:

1xbet » Free Bet, Bonus, Deposit & Review | Dec 2021
What is 1xbet? — 1xbet 출장안마 is a casino that 바카라 사이트 offers a selection 바카라 사이트 of online https://febcasino.com/review/merit-casino/ casino games, such as slots, 1xbet login roulette, and poker. There are

Đăng nhận xét

Thank you for your comments!