- •З лабораторних робіт з предмету:
 - •Лабораторна робота № 1
 - •Контрольні запитання
 - •Лабораторна робота № 2 Дослідження особливостей організації ресурсів інтерфейсу користувача для Windows-додатків
 - •Лабораторна робота № 3. Вікна діалогу у Windows-додатках
 - •Контрольні запитання та завдання
 - •Лабораторна робота № 4. Дослідження особливостей використання арі-функцій для роботи із процесами та потоками у Windows
 - •Контрольні запитання та завдання
 - •Лабораторна робота № 5 Дослідження особливостей планування потоків у операційній системі Windows Контрольні запитання та завдання
 - •Пріоритети
 - •Динамічне підвищення пріоритету
 
Лабораторна робота № 3. Вікна діалогу у Windows-додатках
Програма:
#include "stdafx.h"
#include "windows.h"
#include "resource.h"
#include <malloc.h>
#include <stdlib.h>
HDC dc, memDc;
HINSTANCE hInst;
unsigned short int maxX, maxY;
int Xstart,Ystart,Xend,Yend;
char* buf;
long len;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
LRESULT CALLBACK MyDlgProc (HWND Dialog, UINT Message, WPARAM wparam, LPARAM lparam);
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS w;
memset(&w,0,sizeof(WNDCLASS));
w.style = CS_HREDRAW | CS_VREDRAW;
w.lpfnWndProc = WndProc;
w.hInstance = hInstance;
w.hbrBackground = (HBRUSH)COLOR_WINDOW;
w.lpszClassName = "C Windows";
//w.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1);
RegisterClass(&w);
hwnd = CreateWindow("C Windows","C Windows", WS_OVERLAPPEDWINDOW,
10,10,600,480,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
HMENU hMenu=LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));
SetMenu(hwnd, hMenu);
UpdateWindow(hwnd);
hInst= hInstance;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK MyDlgProc (HWND Dialog, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
len=SendDlgItemMessage(Dialog,IDC_EDIT1,WM_GETTEXTLENGTH,0,0);
buf=(char*)malloc(len+1);
GetDlgItemText(Dialog,IDC_EDIT1,buf,len+1);
Xstart=atoi(buf);
free(buf);
len=SendDlgItemMessage(Dialog,IDC_EDIT2,WM_GETTEXTLENGTH,0,0);
buf=(char*)malloc(len+1);
GetDlgItemText(Dialog,IDC_EDIT2,buf,len+1);
Ystart=atoi(buf);
free(buf);
len=SendDlgItemMessage(Dialog,IDC_EDIT3,WM_GETTEXTLENGTH,0,0);
buf=(char*)malloc(len+1);
GetDlgItemText(Dialog,IDC_EDIT3,buf,len+1);
Xend=atoi(buf);
free(buf);
len=SendDlgItemMessage(Dialog,IDC_EDIT4,WM_GETTEXTLENGTH,0,0);
buf=(char*)malloc(len+1);
GetDlgItemText(Dialog,IDC_EDIT4,buf,len+1);
Yend=atoi(buf);
free(buf);
EndDialog(Dialog, LOWORD(wParam));
return TRUE;
}
break;
if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(Dialog, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
if (Message == WM_DESTROY)
{
PostQuitMessage(0);
return 0;
}
if (Message == WM_RBUTTONUP)
{
MessageBox(hwnd, "WM_RBUTTONUP", "Message", MB_ICONINFORMATION | MB_OK);
}
// створення в³кна
if (Message == WM_CREATE)
{
maxX=GetSystemMetrics(SM_CXSCREEN);
maxY=GetSystemMetrics(SM_CYSCREEN);
dc= GetDC(hwnd);
memDc=CreateCompatibleDC(dc);
SelectObject(memDc,CreateCompatibleBitmap(dc,maxX,maxY));
PatBlt(memDc,0,0,maxX,maxY,PATCOPY);
ReleaseDC(hwnd,dc);
}
if (Message == WM_PAINT)
{
PAINTSTRUCT ps;
dc= BeginPaint(hwnd, &ps);
BitBlt(dc,0,0,maxX,maxY,memDc,0,0,SRCCOPY);
EndPaint(hwnd, &ps);
}
//обробка под³й меню
if (Message == WM_COMMAND)
{
dc= GetDC(hwnd);
switch ( LOWORD(wparam) )
{
case ID_DRAWTEXT:
{
RECT rect;
GetClientRect(hwnd, &rect);
SetTextColor(memDc,RGB(0,0,0));
DrawText(memDc, "Hello!", -1, &rect, DT_CENTER);
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_TEXTOUT:
{
SelectObject(memDc,GetStockObject(ANSI_VAR_FONT));
SetTextColor(memDc,RGB(0,0,255));
TextOut(memDc,10,150,"Hello again!",strlen("Hello again!"));
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_LINE:
{
MoveToEx(dc, 100, 100, NULL);
HPEN pen= CreatePen(PS_SOLID, 5, RGB(0, 200, 0));
SelectObject(memDc, pen);
LineTo(memDc, 100, 300);
DeleteObject(pen);
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_CURVE:
{
HPEN pen= CreatePen(PS_SOLID, 5, RGB(200, 200, 0));
SelectObject(memDc, pen);
POINT p[4];
p[0].x=100; p[0].y=20;
p[1].x=30; p[1].y=400;
p[2].x=50; p[2].y=60;
p[3].x=70; p[3].y=80;
SelectObject(dc, pen);
PolyBezier(memDc, p, 4);
DeleteObject(pen);
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_RECTANGLE:
{
DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_DIALOG),hwnd, (DLGPROC)MyDlgProc, wparam);
//DialogBox(hInst, (LPCTSTR)IDD_DIALOG, hwnd, (DLGPROC)MyDlgProc);
RECT rect;
rect.left=Xstart;rect.top=Ystart;
rect.right=Xend;rect.bottom=Yend;
FillRect(memDc,&rect,CreateSolidBrush(RGB(255,0,0)));
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_ELLIPSE:
{
HRGN rgn;
rgn=CreateEllipticRgn(20,20,300,100);
FillRgn(memDc,rgn,CreateSolidBrush(RGB(0,255,0)));
InvalidateRect(hwnd, NULL, TRUE);
break;
}
case ID_INFO:
{
MessageBox(hwnd, "Лабораторна робота з ОС", "Info", MB_ICONINFORMATION);
break;
}
ReleaseDC(hwnd, dc);
}
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}
