Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.doc
Скачиваний:
0
Добавлен:
12.11.2019
Размер:
96.77 Кб
Скачать

5.Контрольные вопросы

  1. Какие API функции используются для создания кнопок и редакторов?

  2. Как добавить меню? Как добавить в меню пункт меню?

  3. Как запустить и остановить таймер? Какие функции для этого используются?

  4. Какое сообщение посылается окну от таймера? Где и как обрабатываются сообщения от таймеров?

  5. Для чего необходим файл ресурсов? Что содержит файл ресурсов? Объяснить назначение в проекте файла resource.h

  6. Каким образом обрабатываются сообщения от кнопок и пунктов меню? Какое сообщение для этого используется?

  7. Какие сообщения и функции используются для получения и помещения текста в редакторы (поля ввода)?

Приложение Файл rctm.Cpp

#include <windows.h>

#include "resource.h""

LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);

/* дескриптор приложения */

HINSTANCE hInstance;

/* кнопка */

HWND BtHwnd;

/* редактор */

HWND EdtHwnd;

char szWinName[] ="MyWin"; /* имя класса окна */

/* главная функция */

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,

LPSTR lpszArgs, int nWinMode )

{

HWND hwnd;

MSG msg;

WNDCLASSEX wcl;

/* определение класса окна */

wcl.hInstance=hThisInst; /* дескриптор данного экземпляра */

wcl.lpszClassName=szWinName; /* имя класса окна */

wcl.lpfnWndProc=WindowFunc; /* функция окна */

wcl.style=0; /* стиль по умолчанию */

wcl.cbSize = sizeof(WNDCLASSEX); /*размер структуры */

/* WNDCLASSEX */

wcl.hIcon = LoadIcon(NULL,IDI_APPLICATION);/* большая */

/* пикторграмма */

wcl.hIconSm = LoadIcon(NULL,IDI_WINLOGO); /* малая */

/* пиктограмма */

wcl.hCursor = LoadCursor(NULL,IDC_ARROW); /* форма курсора */

wcl.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); /* меню не используется */

wcl.cbClsExtra = 0; /* дополнительная информация отсутствует */

wcl.cbWndExtra = 0;

/* фон окна задается белым */

wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);

/* регистрация класса окна */

if(!RegisterClassEx(&wcl)) return 0;

/* Создание окна */

hwnd = CreateWindow (

szWinName, /* имя класса окна */

"Menu & Timer & Edit & Button", /* заголовок */

WS_OVERLAPPEDWINDOW, /* стандартное окно */

CW_USEDEFAULT, /* координата Х - определяется Windows */

CW_USEDEFAULT, /* координата Y - определяется Windows */

CW_USEDEFAULT, /* ширина - определяется Windows */

CW_USEDEFAULT, /* высота - определяется Windows */

HWND_DESKTOP, /* родительского окна нет */

NULL, /* меню уже описано в классе */

hThisInst, /* дескриптор данного экземпляра приложения */

NULL /* дополнительных аргументов нет */

);

/* запоминаем дескриптор приложения для создания дочерних элементов управления */

hInstance = hThisInst;

/* отображение окна */

ShowWindow(hwnd,nWinMode);

UpdateWindow(hwnd);

/* цикл сообщений */

while (GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg); /* разрешает

использование клавиатуры */

DispatchMessage(&msg); /* возвращает управление Windows */

}

return msg.wParam;

}

/* Эта функция вызывается Windows 95, которая передает ей */

/* сообщения из очереди сообщений */

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam,

LPARAM lParam)

{

char msg[10];

int r;

/* обработка сообщений */

switch (message){

case WM_DESTROY: /* завершение программы */

PostQuitMessage(0);

break;

/* сообщение от пунктов меню и элементов управления */

case WM_COMMAND:

/* пункт меню - Start */

if(LOWORD(wParam)==IDM_START)

{

MessageBox(hwnd,"Timer started","Generation started",MB_OK);

/* установка таймера */

SetTimer(hwnd,1,1000,NULL);

}

/* пункт меню - Stop */

if(LOWORD(wParam)==IDM_STOP)

{

MessageBox(hwnd,"Timer stoped","Generation stopped",MB_OK);

/* завершение работы таймера */

KillTimer(hwnd,1);

}

/* от кнопки*/

if(HWND(lParam)==BtHwnd)

{

lstrcpy(msg,"0");

/* помещение текста в поле ввода */

SendMessage(EdtHwnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)msg);

}

break;

/* сообщение от таймера*/

case WM_TIMER:

int k;

r=rand()%20;

/* получение длины текста в поле ввода */

k=SendMessage(EdtHwnd,WM_GETTEXTLENGTH,0,0);

/* получение текста из поля ввода */

SendMessage(EdtHwnd,WM_GETTEXT,k+1,(LPARAM)msg);

/* перевод значения из строки в число и суммирование*/

r+=atoi(msg);

/* перевод из числа в строку*/

wsprintf(msg,"%d",r);

/* помещение текста в поле ввода */

SendMessage(EdtHwnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)msg);

break;

/* сообщение - создание окна */

case WM_CREATE:

/* создание кнопки */

BtHwnd = CreateWindow (

"BUTTON", /* имя класса окна */

"Reset", /* заголовок */

WS_CHILD|WS_VISIBLE|WS_BORDER, /* стиль */

5, /* координаты и размеры */

10,

50,

40,

hwnd, /* дескриптор родительского окна */

NULL, /* меню нет */

hInstance, /* дескриптор приложения*/

NULL

);

/* создание (поля ввода) редактора */

EdtHwnd = CreateWindow (

"EDIT", /* имя класса окна */

"0", /* заголовок */

WS_CHILD|WS_VISIBLE|WS_BORDER|WS_THICKFRAME/*стиль*/,

60, /* координаты и размеры */

10,

70,

70,

hwnd, /* дескриптор родительского окна */

NULL, /* меню нет*/

hInstance, /* дескриптор приложения */

NULL

);

default:

/* позволяет Windows обрабатывать любые сообщения

неуказанные в предыдущем случае */

return DefWindowProc(hwnd, message,wParam,lParam);

}

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]