На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Simple Word Processing with an Edit Control



The following example implements much of the functionality of a simple word processor by filling the client area of a window with a multiline edit control. The system automatically performs wordwrap operations for this edit control and also handles the processing for the vertical scroll bar (created by specifying ES_AUTOVSCROLL in the call to the CreateWindow function). The WM_COMMAND message processes menu items; they allow the user to undo the previous action, cut or copy selections to the clipboard, paste text from the clipboard, and delete the current selection.

LONG APIENTRY MainWndProc(
HWND hwnd, /* window handle */
UINT message, /* type of message */
UINT wParam, /* additional information */
LONG lParam) /* additional information */
{
static HWND hwndEdit;

CHAR lpszTrouble[] = "When in the Course of human Events "
"it becomes necessary for one People "
"to dissolve the Political Bands which "

"have connected them with another, and "
"to assume among the Powers of the "
"Earth, the separate and equal Station "
"to which the Laws of Nature and of "
"Nature's God entitle them, a decent "
"Respect to the Opinions of Mankind "
"requires that they should declare the "
"causes which impel them to the "

"Separation. ";

switch (message) {
case WM_CREATE:
hwndEdit = CreateWindow(
"EDIT", /* predefined class */
NULL, /* no window title */
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
0, 0, 0, 0, /* set size in WM_SIZE message */
hwnd, /* parent window */

(HMENU) ID_EDITCHILD, /* edit control ID */
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); /* pointer not needed */

/* Add text to the window. */

SendMessage(hwndEdit, WM_SETTEXT, 0,
(LPARAM) lpszTrouble);

return 0;

case WM_COMMAND:
switch (wParam) {
case IDM_EDUNDO:


/*
* Send WM_UNDO only if there is something
* to be undone.
*/

if (SendMessage(hwndEdit, EM_CANUNDO, 0, 0))
SendMessage(hwndEdit, WM_UNDO, 0, 0);
else
MessageBox(hwndEdit,
"Nothing to undo.",
"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", /* resource to use */
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", /* resource to use */
hwnd, /* parent handle */
(DLGPROC) About);
break;

default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
break;


case WM_SETFOCUS:
SetFocus(hwndEdit);
return 0;

case WM_SIZE:

/*
* Make the edit control the size of the window's
* client area.
*/

MoveWindow(hwndEdit,
0, 0, /* starting x- and y-coordinates */
LOWORD(lParam), /* width of client area */
HIWORD(lParam), /* height of client area */

TRUE); /* repaint window */
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;

default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return NULL;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Простая Текстовая Обработка с Управлением Редактирования



Следующий пример осуществляет большинство функционального назначения простого текстового процессора заполняя область клиента окна управлением редактирования multiline. Система автоматически выполняет wordwrap действия для этого управления редактирования и также оперирует обработку для вертикального перемещать бар (созданное определением ES_AUTOVSCROLL на вызове в функцию CreateWindow). Сообщение WM_COMMAND обрабатывает пункты меню; они позволяют пользователя, чтобы снимать предшествующее действие, вырезанное или выборы копии в буфер, текст пасты из буфера и удаляет текущий выбор.

ДОЛГО (ДЛИНОЙ) APIENTRY MainWndProc(
HWND hwnd, /* РУЧКА окна */ сообщение UINT, /* тип сообщения */ UINT wParam, /* дополнительная информация */ ДОЛГО (ДЛИНОЙ) lParam) /* дополнительная информация */
{
статический HWND hwndEdit;

СИМВОЛ lpszTrouble[] = "Когда в ходе человеческих Событий " ", это становится необходимым для одних Людей " ", чтобы растворять Политические Полосы какое "

"связал им с другим, и " ", чтобы приниматься среди Сил " "Земли, отдельная и равная Станция " "на которые Законы Природы и " "Бога Природы называют ими, скромное " "Отношение во Мнения о Человечестве " " требует, чтобы они объявляли " "причины, которые побуждают их на "

"Разделение. ";

ключ (сообщение) { случай WM_CREATE: hwndEdit = CreateWindow( "РЕДАКТИРОВАНИЕ", /* встроенный класс */ НЕДЕЙСТВИТЕЛЬНЫЙ, /* никакое название окна */ 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), НЕДЕЙСТВИТЕЛЬНЫЙ); /* указатель не нужно */

/* Добавьте текст к window. */

SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) lpszTrouble);

возврат 0;

случай WM_COMMAND: ключ (wParam) { случай IDM_EDUNDO:


/*
* Пошлите WM_UNDO только если есть что-то
*, чтобы быть отмененн.
*/

если (SendMessage(hwndEdit, EM_CANUNDO, 0, 0)) SendMessage(hwndEdit, WM_UNDO, 0, 0);
еще MessageBox(hwndEdit, "Ничто, чтобы сниматься.",
"Уведомление Отмены", MB_OK);
прерывание;


случай IDM_EDCUT: SendMessage(hwndEdit, WM_CUT, 0, 0);
прерывание;

случай IDM_EDCOPY: SendMessage(hwndEdit, WM_COPY, 0, 0);
прерывание;

случай IDM_EDPASTE: SendMessage(hwndEdit, WM_PASTE, 0, 0);
прерывание;

случай IDM_EDDEL: SendMessage(hwndEdit, WM_CLEAR, 0, 0);

прерывание;

случай IDM_PASSWORD: DialogBox(hinst, /* текущий пример */ "PassBox", /* ресурс, чтобы использоваться */ hwnd, /* родительская ручка */ (DLGPROC) PassProc);
прерывание;

случай IDM_WRAP: SendMessage(hwndEdit, EM_SETWORDBREAKPROC,

(WPARAM) 0, (LPARAM) (EDITWORDBREAKPROC) WordBreakProc);
SendMessage ИСТИНЫ(hwndEdit, EM_FMTLINES, (WPARAM), (LPARAM) 0);
SendMessage(hwndEdit, EM_SETSEL, 0, -1); /* выберитесь весь текст */ SendMessage(hwndEdit, WM_CUT, 0, 0);
SendMessage(hwndEdit, WM_PASTE, 0, 0);

прерывание;

случай IDM_ABOUT:
DialogBox(hinst, /* ТЕКУЩИЙ пример */ "AboutBox", /* ресурс, чтобы использоваться */ hwnd, /* родительская ручка */ (DLGPROC) О);
прерывание;

умолчание:
возвращайте DefWindowProc(hwnd, сообщение, wParam, lParam);
}
прерывание;


случай WM_SETFOCUS: SetFocus(hwndEdit);
возврат 0;

случай WM_SIZE:

/*
* Сделайте редактированием управлять размером окно
* область клиента.
*/

MoveWindow(hwndEdit, 0, 0, /* ЗАПУСКАЯ x- и y-coordinates */ LOWORD(lParam), /* ширина области клиента */ HIWORD(lParam), /* высота области клиента */

ИСТИНА); /* перекрасьте окно */ возврат 0;

случай WM_DESTROY: PostQuitMessage(0);
возврат 0;

умолчание:
возвращайте DefWindowProc(hwnd, сообщение, wParam, lParam);
}
возвращайте НЕДЕЙСТВИТЕЛЬНЫЙ;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz