[ windows程序设计(programing windows) ] - 控制项之编辑控件

    xiaoxiao2021-03-25  129

    编辑控件可以说是windows程序设计中用到很多的一个控件了,除了按钮以外。如windows下的经典程序notepad(记事本),它的核心控件就是编辑控件。编辑控件既支持两个字节的Unicode字符,也支持一个字节的ANSI字符。当你选中编辑控件的时候,编辑控件会显示一个闪烁的竖线来表示当前的输入位置。

    我这次以notepad为例介绍一下编辑控件。

    默认情况下的编辑控件是没有边框的并且是单行的,所以想要边框应该加入WS_BRODER和ES_MULTILINE风格,前者是为控件添加边框,后者是设置多行输入。这样建立出来的编辑控件起始还不完整,当你键入的内容超出显示范围的时候编辑控件就不会接收你接下来输入的内容了,为此,我们应该ES_AUTOHSCROLL和ES_AUTOVSCROLL风格,这是为了给编辑控件加入自动的水平滚动条和垂直滚动条。这样一个简单的编辑控件就建立完了。

    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, LOWORD(lParam), HIWORD(lParam), hwnd, (HMENU) ID_EDIT, ((LPCREATESTRUCT) lParam) −> hInstance, NULL) ;

    上面有一个我没有说到的内容,就是文字对齐方式,可以设置三种方式,左对齐,右对齐,居中对齐,依次对应ES_LEFT,ES_RIGHT,ES_CENTER。这个风格对notepad来说没有太大意义,只要设置为左对齐就够了。

    接下来就是文字部分了,我会介绍一些风格:

    ES_LOWERCASE和ES_UPPERCASE表示设置输入的英文固定为小写或者固定为大写。

    ES_NUMBER 固定只能输入数字。

    ES_READONLY 使编辑控件成为只读状态。

    ES_PASSWORD 指定这个编辑控件为输入密码的,默认的密码字符是 ‘ * ’ ,你可以发送EM_SETPASSWORDCHAR消息来改变这个字符。

    接下来说一下这个控件发给父窗口的WM_COMMAND消息,这个消息的识别码如下

    EN_CHANGE 当用户已修改编辑控件中的文字会发送此识别码,如改变字体。

    EN_ERRSPACE 当分配给编辑控件的内容不够时会发送此识别码。

    EN_H(V)SCROLL 当用户点击了水平(垂直)滚动条时发送此识别码。

    EN_UPDATE 当用户改变了编辑控件中的文本并且系统将要更新控件中的文本时发送此识别码,区别于EN_CHANGE,这个识别码只对文本的改变起作用,如果改变了字体则不发送此识别码。

    然后就是编辑控件中的文字了,设置文字比较简单,你可以使用SetWindowText函数或者发送WM_SETTEXT消息来设置文字;获取文字比较麻烦,要先用GetWindowTextLength函数或者发送WM_GETTEXTLENGTH消息来获取文本长度,然后给指针分配足够的内存,最后再用GetWindowText函数或者发送WM_GETTEXT消息来获取文本。

    接下来介绍一下部分发送给编辑控件的消息,

    EM_GETHANDLE (lParam,wParam参数不使用,必须为0),获取当前多行编辑控件文字的句柄。

    EM_SETHANDLE (lParam,wParam参数不使用,必须为0),用一个文件指针重设句柄,清空撤销缓冲区,重设滚动条位置为0,重画编辑控件。

    EM_SETSEL (lParam为起始字符的位置,wParam为结束字符的位置),将起始到结束的字符设为选中,如果起始为0,结束为-1则为全选。

    EM_UNDO (lParam,wParam参数不使用,必须为0),可以撤销上一步编辑控件操作,也可以撤销上一步的撤销操作,如果中间没有其他编辑操作的话。

    WM_COPY(lParam,wParam参数不使用,必须为0),将选中的文字复制到剪切板。

    WM_CUT(lParam,wParam参数不使用,必须为0),将选中文字复制到剪切板,并删除选中文字。

    WM_PASTE(lParam,wParam参数不使用,必须为0),将剪切板中的文字插入到所选位置,如果此时有选中文字,则将选中文字删除再将剪切板中的文字插入到所选位置。

    WM_UNDO(lParam,wParam参数不使用,必须为0),撤销上一步操作,当这个消息发送个编辑控件的时候,先前被删除的文字会恢复或者添加的文字会删除。

    还有一切消息在官方手册中都有给出,感兴趣的读者可以去查阅。

    以上便是本次的全部内容,欢迎评论,共同学习。

    转载请注明原文地址: https://ju.6miu.com/read-6224.html

    最新回复(0)