编辑类
这个类就相当于一个简易的文本编辑器,这个文本编辑器的窗口又绝大部分文本编辑器的特性:可以Ctrl+c,+v+x进行复制粘贴剪切等基本操作
声明方法:
hWnd = CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|...,0,0,0,0,hWndPar,(HMENU)ID,hInstance,NULL)
其中窗口大小要通过MoveWindow进行修改,中间的…是可选项,这里可选项很多,就不一一例举了,并且可以通过像向这个窗口SendMessage加上相应的消息就可以让其返回一些需要的东西:
EM_GETLINECOUNT,得到行数(最后两个参数为0就好)
EM_LINELENGTH,得到一行的文本长度(wParam需要获得所需要的行的号)
EM_GETLINE,得到一整行的内容到缓冲区(wParam为行号,lParam为缓冲区指针)
同样的,可以通过SetWindowLong来设置一个额外的窗口过程来增加其消息特性(窗口子类化)
列表框
列表框就是类似于一个列表里面是可供选定的文本串
创建方法:
hWnd = CreateWindow(TEXT("lisybox"),NULL,WS_CHILD|WV_VISIBLE...,x,y,Width,Height,hWndPar,(HMENU)ID,hInstance,NULL);
现在来整理几个这个窗口类的几个特殊的消息:
LB_ADDSTRING,LB_INSTERSTRING前者是当有LBS_SORT风格时插入字符串的方法(SendMessage(hWnd,….,0.(LPARAM)szString)后者是没有的,并且,这个插入将返回一个值,当返回为LB_ERRSPACE时表示超过了可用的内存空间,LB_ERR表示其他的原因,返回0表示正确
LB_DELETESTRING,LB_RESETCONTEXT前者是删除一行wParam就是行数,后者是删除所有
下面是一个有意义的例子:
/*---------------------------------------------
HEAD.C -- Displays beginning (head) of file
(c) Charles Petzold, 1998
---------------------------------------------*/
#include <windows.h>
#define ID_LIST 1
#define ID_TEXT 2
#define MAXREAD 8192
#define DIRATTR (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | \
DDL_DIRECTORY | DDL_ARCHIVE | DDL_DRIVES)
#define DTFLAGS (DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX)
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK ListProc (HWND, UINT, WPARAM, LPARAM) ;
WNDPROC OldList ;
int WINAPI WinMain (HINSTANCE hInstance,