- 公開視頻 ->?鏈接點擊跳轉公開課程
- 博客首頁 ->?鏈接點擊跳轉博客主頁
目錄
編輯框(edit)
控件樣式
創建控件
初始控件
消息處理
示例代碼
編輯框(edit)
控件樣式
- 編輯框(Edit Control)是Windows中最常用的控件之一,用于接收用戶輸入的文本信息。編輯框可以設置為單行或多行,支持多種文本格式和輸入限制。
- 風格樣式
WS_CHILD
:子窗口樣式。WS_VISIBLE
:控件創建時可見。WS_BORDER
:控件周圍有邊框。WS_TABSTOP
:用戶可以使用Tab鍵切換到此控件。
- 控件樣式
ES_AUTOHSCROLL
:當用戶輸入超過控件寬度時,文本自動向左滾動。ES_MULTILINE
:多行編輯框。ES_WANTRETURN
:在多行編輯框中,用戶按下Enter鍵時插入一個換行符,而不是發送WM_COMMAND
消息。
創建控件
- 使用
CreateWindow
或CreateWindowEx
函數創建編輯框控件。需要指定控件類名為"EDIT"
,并設置相應的窗口樣式。
初始控件
- 設置和獲取文本
- WM_SETTEXT:設置編輯框的文本。
- WM_GETTEXT:獲取編輯框的文本。
- WM_GETTEXTLENGTH:獲取編輯框文本的長度。
- 控制編輯框行為
- EM_SETREADONLY:設置編輯框為只讀模式。
- EM_SETSEL:選擇編輯框中的文本。
- EM_REPLACESEL:替換選定的文本。
- EM_GETSEL:獲取當前選定的文本范圍。
消息處理
- 通知消息
- EN_CHANGE:編輯框內容發生改變。
- EN_UPDATE:編輯框將要更新顯示。
- EN_SETFOCUS:編輯框獲得輸入焦點。
- EN_KILLFOCUS:編輯框失去輸入焦點。
示例代碼
#include <Windows.h>
#include "resource.h"#define ID_EDIT_SINGLELINE 1
#define ID_EDIT_MULTILINE 2
#define ID_EDIT_PASSWORD 3
#define ID_EDIT_READONLY 4HINSTANCE ghInstance = 0;LRESULT CALLBACK MainWindowProc (HWND, UINT, WPARAM, LPARAM);INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ghInstance = hInstance;// 注冊窗口WNDCLASSEX wndclass = { 0 };wndclass.cbSize = sizeof(WNDCLASSEX);wndclass.style = NULL;wndclass.lpfnWndProc = MainWindowProc;wndclass.cbClsExtra = NULL;wndclass.cbWndExtra = NULL;wndclass.hInstance = hInstance;wndclass.hIcon = NULL;wndclass.hCursor = NULL;wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;wndclass.lpszMenuName = NULL;wndclass.lpszClassName = TEXT("0xCC");wndclass.hIconSm = NULL;if (!RegisterClassEx(&wndclass)){MessageBox(NULL, TEXT("RegisterClassEx Failed"), TEXT("Error"), MB_OK);return 1;}// 創建窗口HWND hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("0xCC"),TEXT("CreateWindowEx"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,960,540,NULL,NULL,hInstance,NULL);if (hwnd == NULL){MessageBox(NULL, TEXT("CreateWindowEx Failed"), TEXT("Error"), MB_OK);return 1;}// 顯示窗口ShowWindow(hwnd, SW_SHOWDEFAULT);// 更新窗口UpdateWindow(hwnd);// 消息處理MSG msg = { 0 };while (GetMessage(&msg, 0, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}// 窗口過程
LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{static HWND hEditLine, hMultiple, hPassWord, hReadOnly;switch (uMsg){case WM_CREATE:{//創建控件hEditLine = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,10, 10, 200, 25,hwnd,HMENU(ID_EDIT_SINGLELINE),ghInstance,NULL);hMultiple = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,10, 50, 200, 100,hwnd,HMENU(ID_EDIT_MULTILINE),ghInstance,NULL);hPassWord = CreateWindow(TEXT("EDIT"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_PASSWORD,10, 165, 200, 25,hwnd,HMENU(ID_EDIT_PASSWORD),ghInstance,NULL);hReadOnly = CreateWindow(TEXT("EDIT"),TEXT("ES_READONLY"),WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_READONLY,10, 205, 200, 25,hwnd,HMENU(ID_EDIT_READONLY),ghInstance,NULL);// 初始控件// 設置文本//SendMessage(hEditLine, WM_SETTEXT, 0, (LPARAM)TEXT("Hello World"));// 獲取文件//TCHAR szBuffer[0xFF] = { 0 };//SendMessage(hEditLine, WM_GETTEXT, 0xFF, (LPARAM)szBuffer);// 獲取長度//DWORD dwLength = SendMessage(hEditLine, WM_GETTEXTLENGTH, 0, 0);// 設置風格SendMessage(hEditLine, EM_SETREADONLY, TRUE, 0);break;}case WM_DESTROY:{PostQuitMessage(0);break;}case WM_COMMAND:{switch (HIWORD(wParam)){case EN_CHANGE:{if (LOWORD(wParam) == ID_EDIT_SINGLELINE){TCHAR szBuffer[0xFF] = { 0 };SendMessage(hEditLine, WM_GETTEXT, 0xFF, (LPARAM)szBuffer);}}//case EN_SETFOCUS://{// if (LOWORD(wParam) == ID_EDIT_MULTILINE)// {// MessageBox(0, TEXT("EN_SETFOCUS"), 0, 0);// }// break;//}case EN_KILLFOCUS:{if (LOWORD(wParam) == ID_EDIT_MULTILINE){MessageBox(0, TEXT("EN_KILLFOCUS"), 0, 0);}break;}break;}}default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}}