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

Лабораторна робота № 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);

}

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