Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






ЛАБОРАТОРНАЯ РАБОТА №1

Операционные системы


по дисциплине «_____________________________________________________»

Основы программирования приложений Windows.


на тему______________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

Лащенов Сергей Александрович


Студент_____________________________________________________________

ВИП-208
(имя, отчество, фамилия)

Группа________________________

 

 

Оценка ________________________

(в баллах )

Панцакова Ю.П.


Проверил ________________________ _____________________

(подпись и дата подписания) ( инициалы и фамилия)

 

 

Волжский, 2014 г.

 

 

Цель работы:

Изучение структуры приложений Windows, способов их взаимодействия с операционной системой и основных приемов программирования в API Win32.

Вариант задания:

18. Формируется список для выбора стилей простого редактора текста (ES_AUTOHSCROLL, ES_AUTOVSCROLL, ES_LEFT, ES_RIGHT, ES_CENTER, ES_LOWERCASE, ES_UPPERCASE, ES_PASSWORD, ES_NUMBER, ES_OEMCONVERT), две кнопки и статическое окно. Нажатие на первую кнопку приводит к созданию многострочного текстового редактора с заданными стилями. Нажатие на вторую кнопку отображает выделенный пользователем текст в статическом окне.

18. Формируется 3 радиокнопки и статическое окно. Радиокнопки определяют содержимое статического окна (12ти часовой формат времени, 24х часовой формат времени, текущая дата).

 

Ход решения:

Задача №1

 

#include <windows.h>

HINSTANCE hInstance;

HWND hWnd;

HWND hlistbox, hedit, hedit1, Hstatic;

int ultem;

#define ID_edit 40

BYTE chBuff[80];

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM LParam) Функция CallWindowProc передает информацию сообщения процедуре заданного окна

{

switch (msg)

{

case WM_COMMAND: Сообщение WM_COMMAND отправляется тогда, когда пользователь выбирает командный пункт из меню, когда орган управления отправляет уведомительное сообщение своему родительскому окну, или когда транслируется нажатие клавиши - ускорителя

if(wParam == 20)

{

WORD cbText;

* (WORD *) chBuff = sizeof (chBuff) - 1;

hedit1=CreateWindow(TEXT("edit"), TEXT(""), ES_MULTILINE | ES_AUTOHSCROLL | WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 0, 0, 1, 1, hWnd, (HMENU)ID_edit, hInstance, 0); На мой взгляд эта функция является одной из главной. Ведь именно она создаёт окна в системе.



SendMessage(hedit, WM_COPY, 0, 0); Посылает сообщение оконной функции указанного окна. Возвpат из функции осуществляется только после обpаботки сообщения.

SendMessage(hedit1, WM_PASTE, 0, 0);

SendMessage(hedit1, EM_GETLINE, 0, (LPARAM)(LPSTR)chBuff);

MessageBox(hWnd, (LPCWSTR)(LPARAM)(LPSTR)chBuff, TEXT("содержимое буфера"), MB_OK); Функция MessageBox создает, отображает на экране и оперирует окном сообщений. Окно сообщений содержит определяемое программой сообщение и заголовок, плюс любую комбинацию предопределенных пиктограмм и командных кнопок.

}

 

if (wParam==10)

{

MessageBox(hWnd, TEXT("Привет я кнопка! Зачем ты меня нажал?"), TEXT("Монолог"), 0);

ultem=(int)SendMessage(hlistbox, LB_GETCURSEL, 0, 0L);

 

if (ultem==0)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_MULTILINE | ES_AUTOHSCROLL | WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==1)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_AUTOVSCROLL | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==2)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_LEFT | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==3)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_RIGHT | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);



 

if (ultem==4)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_CENTER | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==5)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_LOWERCASE | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==6)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_UPPERCASE | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==7)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_PASSWORD | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==8)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_NUMBER | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

if (ultem==9)

hedit=CreateWindow(TEXT("edit"), TEXT(""), ES_OEMCONVERT | WS_DLGFRAME | WS_CHILD | ES_MULTILINE | WS_VISIBLE, 250, 10, 200, 100, hWnd, (HMENU)ID_edit, hInstance, 0);

 

break;

}

 

if (wParam==20)

{

MessageBox(hWnd, TEXT("Привет я кнопка! хорош!!!"), TEXT("Монолог"), 0);

Hstatic=CreateWindow(TEXT("static"), (LPCWSTR)(LPARAM)(LPSTR)chBuff, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 250, 210, 200, 25, hWnd, (HMENU)50, hInstance, 0);

}

 

break;

 

case WM_DESTROY: Это сообщение посылается когда необходимо уничтожить окно.

PostQuitMessage(0); В ответ на это сообщение мы должны поместить в очередь сообщение WM_QUIT. Это и делает функция PostQuitMessage() посылая в очередь это сообщение и говоря, что процесс должен быть завершен.

break;

}

return DefWindowProc(hWnd, msg, wParam, LParam); Обеспечивает стандаpтную обpаботку сообщений для сообщений, котоpые явно не обpабатываются пpикладной задачей.

}

 

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE h2, LPSTR cmd, int cmShaw)

{

WNDCLASS wc={0};

wc.lpszClassName=TEXT("Myclass");

wc.lpfnWndProc=WndProc;

RegisterClass(&wc);

 

hWnd=CreateWindow(wc.lpszClassName, TEXT("Моя форма"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 500, 500, 0, 0, hInstance, 0); она создаёт окна в системе

CreateWindow(TEXT("button"), TEXT("Кнопка Сергея"), WS_CHILD | WS_VISIBLE, 250, 100, 200, 100, hWnd, (HMENU)10, hInstance, 0);

CreateWindow(TEXT("button"), TEXT("Ещё одна кнопка Сергея"), WS_CHILD | WS_VISIBLE | WM_COPY, 10, 100, 200, 100, hWnd, (HMENU)20, hInstance, 0);

 

hlistbox=CreateWindow(TEXT("listbox"), NULL, LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 200, 100, hWnd, (HMENU)30, hInstance, 0);

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_AUTOHSCROLL")); Посылает сообщение оконной функции указанного окна. Возвpат из функции осуществляется только после обpаботки сообщения

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_AUTOVSCROLL"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_LEFT"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_RIGHT"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_CENTER"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_LOWERCASE"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_UPPERCASE"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_PASSWORD"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_NUMBER"));

SendMessage(hlistbox, LB_ADDSTRING, 0, (LPARAM)TEXT("ES_OEMCONVERT"));

MSG msg;

while (GetMessage(&msg, NULL, 0, 0)) Эта функция извлекает сообщение из очереди

{

TranslateMessage(&msg); Эта функция переводит сообщения формата виртуальных клавиш в сообщения символы

DispatchMessage(&msg); Эта функция пересылает сообщение оконной процедуре

}

return 0;

}

 

 

Задача №2

 

#include <windows.h>

#include <ctime>

HINSTANCE hInstance;

HWND hWnd;

HWND Hstatic;

#define ID_button1 10

HWND hbutton1;

HWND hbutton2;

HWND hbutton3;

int a=0;

 

 

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM LParam)

{

switch (msg)

{

case WM_COMMAND:

if(wParam == 10)

{

SendMessage(hbutton1,BM_SETCHECK,BST_CHECKED,0);

SendMessage(hbutton2,BM_SETCHECK,BST_UNCHECKED,0);

SendMessage(hbutton3,BM_SETCHECK,BST_UNCHECKED,0);

a=1;

}

 

if(wParam == 20)

{

SendMessage(hbutton1,BM_SETCHECK,BST_UNCHECKED,0);

SendMessage(hbutton2,BM_SETCHECK,BST_CHECKED,0);

SendMessage(hbutton3,BM_SETCHECK,BST_UNCHECKED,0);

a=2;

}

 

if(wParam == 30)

{

SendMessage(hbutton1,BM_SETCHECK,BST_UNCHECKED,0);

SendMessage(hbutton2,BM_SETCHECK,BST_UNCHECKED,0);

SendMessage(hbutton3,BM_SETCHECK,BST_CHECKED,0);

a=3;

}

 

switch (a)

{

case 1:

{

char buffer[80];

TCHAR a11;

time_t seconds = time(NULL); способен представлять время и поддерживает арифметические операции.

tm* timeinfo = localtime(&seconds); преобразует число секунд типа t_time в структуру типа tm

char* format = "%H:%M:%S";

strftime(buffer, 80, format, timeinfo); помещает информацию о времени и дате в строку, адресуемую параметром str

a11=(LPARAM)(TCHAR)buffer;

long uLen = MultiByteToWideChar(CP_ACP Система Windows по умолчанию кодовую страницу ANSI, 0, buffer, -1, NULL, NULL);уют строку однобайтовых символов в строку Unicode

WCHAR * lpszW = new WCHAR[uLen];

MultiByteToWideChar(CP_ACP, 0, buffer, uLen, lpszW, uLen);

MessageBox(hWnd, (LPCWSTR)lpszW, TEXT("Монолог"), 0);

 

Hstatic=CreateWindow(TEXT("static"), (LPCWSTR)lpszW, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 250, 210, 200, 25, hWnd, (HMENU)50, hInstance, 0);

}

break;

case 2:

{

char buffer[80];

time_t seconds = time(NULL);

tm* timeinfo = localtime(&seconds);

char* format = "%I:%M:%S";

strftime(buffer, 80, format, timeinfo);

long uLen = MultiByteToWideChar(CP_ACP, 0, buffer, -1, NULL, NULL);

WCHAR * lpszW = new WCHAR[uLen];

MultiByteToWideChar(CP_ACP, 0, buffer, uLen, lpszW, uLen);

MessageBox(hWnd, (LPCWSTR)lpszW, TEXT("Монолог"), 0);

 

Hstatic=CreateWindow(TEXT("static"), (LPCWSTR)lpszW, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 250, 210, 200, 25, hWnd, (HMENU)50, hInstance, 0);

}

break;

case 3:

{

char buffer[80];

time_t seconds = time(NULL);

tm* timeinfo = localtime(&seconds);

char* format = "%A, %B, %d, %Y, %H:%M:%S";

strftime(buffer, 80, format, timeinfo);

long uLen = MultiByteToWideChar(CP_ACP, 0, buffer, -1, NULL, NULL);

WCHAR * lpszW = new WCHAR[uLen];

MultiByteToWideChar(CP_ACP, 0, buffer, uLen, lpszW, uLen);

MessageBox(hWnd, (LPCWSTR)lpszW, TEXT("Монолог"), 0);

Hstatic=CreateWindow(TEXT("static"), (LPCWSTR)lpszW, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 250, 210, 200, 25, hWnd, (HMENU)50, hInstance, 0);

}

break;

 

default:

MessageBox(hWnd, TEXT("Привет вы нечего не нажали! Зачем вы так?"), TEXT("Монолог"), 0);

break;

}

break;

 

case WM_DESTROY:

PostQuitMessage(0);

break;

}

return DefWindowProc(hWnd, msg, wParam, LParam);

}

 

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE h2, LPSTR cmd, int cmShaw)

{

WNDCLASS wc={0};

wc.lpszClassName=TEXT("Myclass");

wc.lpfnWndProc=WndProc;

RegisterClass(&wc);

 

HWND hWnd=CreateWindow(wc.lpszClassName, TEXT("Моя форма"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 500, 500, 0, 0, hInstance, 0);

hbutton1=CreateWindow(TEXT("button"), TEXT("24 x"), BS_RADIOBUTTON | WS_VISIBLE | WS_CHILD, 10, 100, 200, 15, hWnd, (HMENU)10, hInstance, 0);

hbutton2=CreateWindow(TEXT("Button"), TEXT("12 x"), BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE, 10, 115, 200, 15, hWnd, (HMENU)20, hInstance, 0);

hbutton3=CreateWindow(TEXT("Button"), TEXT("Ещё одна кнопка Сергея"), BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE, 10, 130, 200, 15, hWnd, (HMENU)30, hInstance, 0);

 

MSG msg;

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

 

<== предыдущая лекция | следующая лекция ==>
Лабораторная работа №1. по дисциплине: Релейная защита и автоматика электроэнергетических систем | Задание на лабораторную работу. Таблица 1 – Типовые динамические звенья № Название звена ПФ звена Апериодическое 1-го порядка (инерционное)

mylektsii.ru - Мои Лекции - 2015-2018 год. (0.032 сек.)Пожаловаться на материал