C语言Windows程序设计 -> 第十四天 -> 文本输入框
2012-12-31 18:15
651 查看
[b]C语言Windows程序设计 -> 第十四天 -> 文本输入框[/b]
[b]一、文本输入框的介绍[/b]
从用户那里获取文字信息是与用户进行交互的一个重要组成部分, 输入框的作用则是搭建起用户与软件交互的一个直接桥梁之一。
通常, 当我们点击输入框的编辑区域时, 输入框中会出现插入光标,我们可以直接在输入框中输入文字或文本信息。 我们还可以使用一些快捷键例如Ctrl + C(复制)、Ctrl + V(粘贴)等快捷键操作, 前提是如果你想允许用户这么做的话。
文本输入框分为单行输入框和多行输入框, 单行输入框即不能进行换行操作, 所有内容都将在一行写完, 常用来输入一些较短的文本, 例如常见的用户名/密码输入框。
多行文本输入框常用于输入较长的段落时文本, 用户可以使用回车键进行换行, 例如Windows自带的记事本的文本编辑窗口。
多行文本输入框通常会在紧靠右侧的地方带上一个垂直滚动条, 或者在底部带上一个水平滚动条, 方面用户快速查看输入框中的内容。图示中是一个带有水平滚动条和垂直滚动条的多行文本输入框:
View Code - SimpleEdit-Demo.c
运行效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/c77fc035dccfa345846f4660815e5445.png)
本篇随笔中所有的DEMO代码下载: http://files.cnblogs.com/mr-wid/Learn_WinC_day_14.rar
再长的路, 一步步也能走完, 再短的路, 不迈开双脚也无法到达。2013, 期待你的到来!
--------------------
wid, 2012.12.31
上一篇: C语言Windows程序设计 -> 第十三天 -> 按钮类控件
[b]一、文本输入框的介绍[/b]
从用户那里获取文字信息是与用户进行交互的一个重要组成部分, 输入框的作用则是搭建起用户与软件交互的一个直接桥梁之一。
通常, 当我们点击输入框的编辑区域时, 输入框中会出现插入光标,我们可以直接在输入框中输入文字或文本信息。 我们还可以使用一些快捷键例如Ctrl + C(复制)、Ctrl + V(粘贴)等快捷键操作, 前提是如果你想允许用户这么做的话。
文本输入框分为单行输入框和多行输入框, 单行输入框即不能进行换行操作, 所有内容都将在一行写完, 常用来输入一些较短的文本, 例如常见的用户名/密码输入框。
多行文本输入框常用于输入较长的段落时文本, 用户可以使用回车键进行换行, 例如Windows自带的记事本的文本编辑窗口。
多行文本输入框通常会在紧靠右侧的地方带上一个垂直滚动条, 或者在底部带上一个水平滚动条, 方面用户快速查看输入框中的内容。图示中是一个带有水平滚动条和垂直滚动条的多行文本输入框:
View Code - SimpleEdit-Demo.c
/*C语言Windows程序设计 -> 简易文本编辑器 -> 演示*/ #include <windows.h> #include <stdio.h> /*各控件所使用的ID*/ #define ID_EDITBOX 1 //文本编辑框控件 #define ID_TXTPATH 2 //路径编辑框控件 #define ID_SAVEBTN 3 //保存文件按钮 #define ID_CLSBTN 4 //清空编辑区按钮 #define ID_GROUP 5 //组合框 LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; int CreateChildWindow(HWND, HWND *, LPARAM ) ; //创建将使用到的子窗口控件 int SavaInputContent( TCHAR *, TCHAR * ) ; //保存输入的文字到文件 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) { static TCHAR szAppName[] = TEXT( "demo" ) ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.lpfnWndProc = WndProc ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.hInstance = hInstance ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hbrBackground = CreateSolidBrush(RGB(236, 233, 216)) ; wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ) ; wndclass.lpszClassName = szAppName ; wndclass.lpszMenuName = NULL ; if( !RegisterClass(&wndclass) ) { MessageBox( NULL, TEXT("无法注册窗口类!"), TEXT("错误"), MB_OK | MB_ICONERROR ) ; return 0 ; } hwnd = CreateWindow( szAppName, TEXT("C语言Windows程序设计 -> 简易文本编辑器 -> 演示"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ) ; ShowWindow( hwnd, iCmdShow ) ; UpdateWindow( hwnd ) ; while( GetMessage(&msg, NULL, 0, 0) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } return msg.wParam ; } LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { static HWND hwndChild[5] ; HDC hdc ; PAINTSTRUCT ps ; RECT rect ; static TCHAR *szBuffer ; //缓冲区 static TCHAR szPath[256] ; //文本路径 static TCHAR szLineNum[32] ; static TCHAR szCharNum[32] ; static int iLength ; int iLineCount, iCharCount ; switch( message ) { case WM_CREATE: CreateChildWindow( hwnd, hwndChild, lParam ) ; return 0 ; case WM_SIZE: GetClientRect(hwnd, &rect) ; MoveWindow( hwndChild[ID_EDITBOX], 0, 0, rect.right, rect.bottom-50, TRUE ) ; //调整文本编辑区 MoveWindow( hwndChild[ID_TXTPATH], 60, rect.bottom-31, 200, 20, TRUE ) ; //调整文本路径输入框 MoveWindow( hwndChild[ID_SAVEBTN], 280, rect.bottom-35, 50, 25, TRUE ) ; //调整保存按钮 MoveWindow( hwndChild[ID_CLSBTN ], 400, rect.bottom-35, 50, 25, TRUE ) ; //调整清空按钮 MoveWindow( hwndChild[ID_GROUP ], 10, rect.bottom-50, 330, 48, TRUE ) ; //调整组合框 return 0 ; case WM_PAINT: GetClientRect(hwnd, &rect) ; hdc = BeginPaint( hwnd, &ps ) ; TextOut( hdc, 20, rect.bottom-30, TEXT("路径:"), lstrlen(TEXT("路径:")) ) ; TextOut( hdc, 500, rect.bottom-30, szLineNum, lstrlen(szLineNum) ) ; EndPaint( hwnd, &ps ) ; return 0 ; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_EDITBOX: switch(HIWORD(wParam)) { case EN_UPDATE: iLineCount = SendMessage( hwndChild[ID_EDITBOX], EM_GETLINECOUNT, 0, 0 ) ; iCharCount = GetWindowTextLength( hwndChild[ID_EDITBOX] ) ; wsprintf(szLineNum, "行数: %i 字符数量: %i", iLineCount, iCharCount) ; InvalidateRect(hwnd, NULL, FALSE) ; break ; default: break ; } return 0 ; case ID_SAVEBTN: iLength = GetWindowTextLength(hwndChild[ID_EDITBOX]) ; if( iLength != 0) szBuffer = malloc(iLength*2) ; else return -1 ; GetWindowText( hwndChild[ID_EDITBOX], szBuffer, GetWindowTextLength(hwndChild[ID_EDITBOX]) + 1 ) ; if(GetWindowText( hwndChild[ID_TXTPATH], szPath, 256 ) < 1) { MessageBox(NULL, TEXT("路径不能为空"), TEXT("提示"), MB_OK | MB_ICONINFORMATION) ; return -1 ; } SavaInputContent( szPath, szBuffer ) ; return 0 ; case ID_CLSBTN: SetWindowText( hwndChild[ID_EDITBOX], TEXT("") ) ; return 0 ; default: break ; } return 0 ; case WM_DESTROY: PostQuitMessage(0) ; return 0 ; } return DefWindowProc( hwnd, message, wParam, lParam ) ; } int CreateChildWindow(HWND hwnd, HWND *hwndChild, LPARAM lParam) { HINSTANCE hInst = ((LPCREATESTRUCT) lParam) -> hInstance ; //创建编辑区 hwndChild[ID_EDITBOX] = CreateWindow( TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU)ID_EDITBOX, hInst, NULL ) ; //路径输入框 hwndChild[ID_TXTPATH] = CreateWindow( TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU)ID_TXTPATH, hInst, NULL ) ; //保存按钮 hwndChild[ID_SAVEBTN] = CreateWindow( TEXT("button"), TEXT("保存"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hwnd, (HMENU)ID_SAVEBTN, hInst, NULL) ; //清空按钮 hwndChild[ID_CLSBTN] = CreateWindow( TEXT("button"), TEXT("清空"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hwnd, (HMENU)ID_CLSBTN, hInst, NULL) ; //组合框 hwndChild[ID_GROUP] = CreateWindow( TEXT("button"), NULL, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, 0, 0, 0, hwnd, (HMENU)ID_GROUP, hInst, NULL) ; return 0 ; } int SavaInputContent( TCHAR *path, TCHAR *content ) { FILE *fSvae ; fSvae = fopen( path, "w" ) ; if(fSvae == NULL) { MessageBox(NULL, TEXT("文件创建失败!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION) ; return -1 ; } fputs( content, fSvae ) ; fclose(fSvae) ; MessageBox(NULL, TEXT("保存成功!"), TEXT("成功"), MB_OK | MB_ICONINFORMATION) ; return 0 ;
运行效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/04/c77fc035dccfa345846f4660815e5445.png)
本篇随笔中所有的DEMO代码下载: http://files.cnblogs.com/mr-wid/Learn_WinC_day_14.rar
再长的路, 一步步也能走完, 再短的路, 不迈开双脚也无法到达。2013, 期待你的到来!
--------------------
wid, 2012.12.31
上一篇: C语言Windows程序设计 -> 第十三天 -> 按钮类控件
相关文章推荐
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- C语言Windows程序设计->第四天->详解我的窗口(上)
- C语言Windows程序设计->第五天->详解我的窗口(下)
- C语言Windows程序设计 -> 第十三天 -> 按钮类控件
- C语言Windows程序设计-> 第八天-> 滚动条
- C语言Windows程序设计 -> 第十三天 -> 按钮类控件
- C语言Windows程序设计 -> 补充 -> Windows窗口样式与编辑框样式
- C语言Windows程序设计->第一天->首次接触
- C语言Windows程序设计 -> 第十天 -> 响应键盘事件
- C语言Windows程序设计 -> 第十二天 -> 使用计时器
- C语言Windows程序设计 -> 第十一天 -> 使用鼠标
- C语言Windows程序设计->第三天->变参与Windows版printf
- C语言Windows程序设计->第六天->GDI与设备环境
- C语言Windows程序设计->第三天->属于自己的窗口
- C语言Windows程序设计->第一天->我的第一个Windows程序
- C语言Windows程序设计->第二天->宽字符和C语言
- C语言Windows程序设计->第三天->属于自己的窗口
- C语言Windows程序设计->第二天->ASCII与Unicode
- C语言Windows程序设计->第四天->详解我的窗口(中)
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础