windows程序设计之编辑框简介
来源:互联网 发布:社交网络 英文剧本 编辑:程序博客网 时间:2024/06/06 00:18
今天碰到一个很无语的问题,创个编辑框创建了两个多小时,就是不知道哪里出问题。
后来我就索性新建一个最简单的工程进行测试,就创建一个窗口,然后中间加个长方形的编辑框(*^__^*)。
结果出丑了,编辑框是出来了,结果无法编辑,就连焦点都没法设置。
看代码:
#include <windows.h>LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){static HWND hwndEdit;switch (message){case WM_CREATE:hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,20,20,300,25,hwnd,NULL,((LPCREATESTRUCT) lParam) -> hInstance,NULL);return 0;case WM_SETFOCUS :SetFocus (hwndEdit) ;return 0 ;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc (hwnd, message, wParam, lParam) ;}int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("Edit") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass(&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName, // window class nameszAppName, // window captionWS_OVERLAPPEDWINDOW, // window styleCW_USEDEFAULT, // initial x positionCW_USEDEFAULT, // initial y positionCW_USEDEFAULT, // initial x sizeCW_USEDEFAULT, // initial y sizeNULL, // parent window handleNULL, // window menu handlehInstance, // program instance handleNULL) ; // creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}
就是诡异了,原以为编辑框创建不是挺简单的吗??可创建出来后,不能编辑啊···我就奇怪了。
然后又拿起《windows程序设计》找到编辑框这部分内容,看了下Demo,好像也和我的没很大区别额。比较大的区别就是他在处理消息WM_CREATE时候用了CreateWindow来创建,我怀疑问题出现在这里,结果也用他的Demo整合到我自己的程序上试试,
就在上面的代码做了些小改变
#define ID_EDIT 1//code//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,20, 20, 300, 25, hwnd, (HMENU) ID_EDIT,((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;return 0;case WM_SIZE : MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;return 0 ;
结果就更加蛋疼了,连编辑框也没了,真是诡异了。
我还去找了CreateWindow和CreateWindowEx的区别。发现也没什么区别啊,不过是CreateWindowEx提供了更详细的参数,而CreateWindow里面有很多参数是系统默认了,Ex的功能有所增强罢了,那就奇怪了。
直到最后我终于发现,我把static TCHAR szAppName[] = TEXT ("Edit") ;
只要把文本内容改了就行,反正不要Edit(不区分大小写)就行了。仔细一想,好像可以理解。第一次我创建窗口时候窗口类用了Edit,好的。Windows说OK!
但是我在创建编辑框的时候CreateWindow (TEXT ("Edit"), ......),Windows就不高兴了,怎么拿一样的窗口类来创建父窗口和子窗口控件呢??
static TCHAR szAppName[] = TEXT ("Edit") ;改成static TCHAR szAppName[] = TEXT ("Name Except Edit") ;这样Windows就不会为难了,
编辑框也就成功创建了,也就不会有“乱七八糟的功能”了。
后来我又做了些小测试,CreateWindow (TEXT ("Edit"), .....)第一个参数可不能乱指定,要“edit”(不区分大小写),可能是系统自己预设的吧?(在默认创建的情况下)
既然介绍到了编辑框,我就顺便再做些总结。
CreateWindow第二参数可是很强大的,默认时,编辑控制是单行的,使用ES_MULTILINE窗口风格就可以建立多行编辑控制。对于单行编辑控制,一般只可以在编辑框
的尾部输入正文。要建立一个水平的编辑控制,我们可以采用风格ES_AUTOHSCROLL。对于一个多行编辑控制,正文不会整字回行,除非使用ES_AUTOHSCROLL风
格,在这种情况下,我们必须按Enter键来开始新的一行。还可以设置ES_AUTOVSCROLL来将垂直滚动条包括到多行编辑控制中。
再是MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;Demo中编辑框的大小是WndPro接收到WM_SIZE消息才定义的。
我们可以设置不同的值进行测试。
再简单介绍下发送给编辑框控制的消息
SendMessage(hwndEdit,WM_CUT,0,0) :对编辑框内容进行剪切,将内容送到剪切板。
SendMessage(hwndEdit,WM_COPY,0,0):对编辑框内容进行拷贝,复制到剪切板。
SendMassage(hwndEdit,WM_CLEAR,0,0):对编辑框内容进行清除。
SendMessage(hwndEdit,WM_PASTE,0,0):对编辑框内容进行粘贴,将剪切板中文本送到编辑控制中的光标处。
SendMessage(hwndEdit,EM_GETSEL,(WPARAM)&iStart,&(LPARAM)&iEnd) :选中当前选择的起始位置和末尾位置。
SendMessage(hwndEdit,EM_GETLINECOUNT,0,0) :对于多行文本编辑,获取行数。
SendMessage(hwndEdit,EM_GETLINE,iLine,(lPARAM)szBuffer) :将行本身复制到一个缓存区。
上面就是对编辑框的简单介绍,就到这里了,出去活动下(*^__^*) 。
参考书记 《windows程序设计》
- windows程序设计之编辑框简介
- windows程序设计之菜单简介
- windows程序设计之GDI简介
- Windows程序设计[之]Unicode 简介
- windows程序设计之对话框简介1
- windows程序设计编辑类 edit
- windows程序设计简介
- windows程序设计 Unicode简介
- windows程序设计 GDI简介
- windows程序设计之鼠标,键盘,绘制文本简介
- glade程序设计简介(For Windows)
- 《Windows程序设计》之列表框控件
- Windows程序设计之计时器
- Windows程序设计之对话框
- 《Windows程序设计》之键盘
- 《Windows程序设计》之鼠标
- 《Windows程序设计》之BLOKOUT1
- 《Windows程序设计》之BLOKOUT2
- HTML 5的10个顶级资源
- ASP.NET 验证控件与Attributes.Add 脚本并存
- MYSQL用户权限管理(Grant,Revoke)
- linux学习笔记之(一)--初学linux
- 单调队列学习
- windows程序设计之编辑框简介
- 您未被授权查看该页 错误 401.3
- Catalan数
- 【SQL】SQL 2005 数据库如何转换成 SQL 2000类型
- MVC
- 桥接模式与其它几种相近的设计模式之间的区别与比较
- Struts2获取request,response,session
- 判断数值类型
- usb鼠标驱动注解及测试