以下示例通过使用多行编辑控件填充窗口的客户端区域来实现简单文字处理器的大部分功能。系统会自动对该编辑控件执行文字包装操作,并处理垂直滚动条的处理(通过在CreateWindow函数的调用中指定ES_AUTOVSCROLL来创建)。WM_COMMAND消息处理菜单项;它们允许用户撤消先前的操作,剪切或复制选择到剪贴板,从剪贴板粘贴文本,并删除当前的选择。
龙APIENTRY MainWndProc(
HWND hwnd,/ *窗口句柄* /
UINT消息,/ *消息类型* /
UINT wParam,/ *附加信息* /
LONG lParam)/ *附加信息* /
{
static HWND hwndEdit;
CHAR lpszTrouble[] = "When in the Course of human Events "
“一个人就有必要”
“解散政治乐队”
“把它们与另一个连接起来,”
“承担在”
“地球,平分站”
“自然法则和”
“大自然的上帝赋予他们一个体面的”
“尊重人类意见”
“要求他们宣布”
“引发他们的原因”
"Separation. ";
switch(message){
case WM_CREATE:
hwndEdit = CreateWindow(
“编辑”,/ *预定义类* /
NULL,/ *无窗口标题* /
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
0,0,0,0,/ *在WM_SIZE消息中设置大小* /
hwnd,/ *父窗口* /
(HMENU)ID_EDITCHILD,/ *编辑控件ID * /
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),en
NULL); /* pointer not needed */
/ *向窗口添加文本。*/
SendMessage(hwndEdit,WM_SETTEXT,0,
(LPARAM) lpszTrouble);
return 0;
case WM_COMMAND:
开关(wParam){
case IDM_EDUNDO:
/*
*只有有事情发送WM_UNDO
*撤销。
*/
if(SendMessage(hwndEdit,EM_CANUNDO,0,0))
SendMessage(hwndEdit, WM_UNDO, 0, 0);
其他
MessageBox(hwndEdit,
“没什么可以撤销的”,
"Undo notification", MB_OK);
break;
case IDM_EDCUT:
SendMessage(hwndEdit, WM_CUT, 0, 0);
break;
case IDM_EDCOPY:
SendMessage(hwndEdit, WM_COPY, 0, 0);
break;
case IDM_EDPASTE:
SendMessage(hwndEdit, WM_PASTE, 0, 0);
break;
case IDM_EDDEL:
SendMessage(hwndEdit, WM_CLEAR, 0, 0);
break;
case IDM_PASSWORD:
DialogBox(hinst,/ * current instance * /
“PassBox”,/ *资源使用* /
hwnd,/ * parent handle * /
(DLGPROC) PassProc);
break;
case IDM_WRAP:
SendMessage(hwndEdit,
EM_SETWORDBREAKPROC,
(WPARAM) 0,
(LPARAM) (EDITWORDBREAKPROC) WordBreakProc);
SendMessage(hwndEdit,
EM_FMTLINES,
(WPARAM) TRUE,
(LPARAM) 0);
SendMessage(hwndEdit,
EM_SETSEL,
0, -1); /* select all text */
SendMessage(hwndEdit, WM_CUT, 0, 0);
SendMessage(hwndEdit, WM_PASTE, 0, 0);
break;
case IDM_ABOUT:
DialogBox(hinst,/ * current instance * /
“AboutBox”,/ *资源使用* /
hwnd,/ * parent handle * /
(DLGPROC) About);
break;
默认:
return DefWindowProc(hwnd, message, wParam, lParam);
}
break;
case WM_SETFOCUS:
SetFocus(hwndEdit);
return 0;
case WM_SIZE:
/*
*使编辑控件的窗口大小
*客户区。
*/
MoveWindow(hwndEdit,
0,0,/ *起始x和y坐标* /
LOWORD(lParam),/ *客户区域的宽度* /
HIWORD(lParam),/ *客户区域的高度* /
TRUE); /* repaint window */
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
默认:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return NULL;
}