Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 22:18, курсовая работа
Целью данной работы является: изучение способов создания, изменения свойств и уничтожения перекрывающихся и всплывающих окон, создания элементов управления на пользовательском блоке диалога с помощью редактора ресурсов, а также программно; применение в приложении вторичных потоков, входная функция которых позволяет реализовать прорисовку графических примитивов; научиться передавать параметры во вторичный поток.
ВВЕДЕНИЕ 4
1 Работа с окнами 9
1.1 Условие 9
1.2 Описание программного кода 9
1.3 Пример работы программы 13
2 Работа со стандартными элементами управления 15
2.1 Условие 15
2.2 Описание программного кода 15
2.3 Пример работы программы 19
3 Интерфейс графических устройств 20
3.1 Условие 20
3.2 Описание программного кода 21
3.3 Пример работы программы 23
4 Блоки диалога 24
4.1 Условие 24
4.2 Пользовательский блок диалога 25
4.3 Стандартные блоки диалога 26
4.4 Пример работы программы 27
5 Вторичный поток 31
5.1 Условие 31
5.2 Описание программного кода 31
5.3 Пример работы программы 34
ВЫВОД 36
Список ИСПользуемой литературы 37
Приложение А. Исходный код к заданию №1 38
Приложение Б. Исходный код к заданию №2 40
Приложение В. Исходный код к заданию №3 43
Приложение Г. Исходный код к заданию №4 45
Приложение Д. Исходный код к заданию №5 48
HDC dc=GetDC(dt->hwnd);
Ellipse(dc, dt->centerX-dt->dx , dt->centerY-dt->dy ,dt->centerX+dt->dx , dt->centerY+dt->dy );
/* Рисуем эллипс, центpиpованный в огpаничивающем пpямоугольнике, гpаница котоpого наpисована текущим пеpом и заполнена текущей кистью*/
ReleaseDC(dt->hwnd,dc); /*Освобождаем ресурсы*/
return 0;
}
Рис. 5.3.1- Прорисовка эллипса с начальными значениями
Рис. 5.3.2- Прорисовка
эллипса с новыми значениями
Выполнив курсовую, не трудно понять, что WinApi является мощным инструментом для создания приложений под Windows. Функции WinApi - это функции непосредственно самой операционной системы. Следовательно, используя, только WinApi без сторонних библиотек будет выигрыш в надежности и стабильности кода, его скорости, а так же меньше проблем с переносом программы (проекта) на другие машины.
Но можно
отметить, что WinApi имеет ряд недостатков,
которые заставляют программистов
прибегать к его функциям лишь
в редких случаях. Огромным недостатком
является не кроссплатформенность разрабатываемых
приложений, поэтому на смену Windows API
пришли такие платформы как .NET от
Microsoft и Java от Sun Microsystems (ныне принадлежит Oracle). Кроссплатформенное (межплатформенное)
программное обеспечение — программное обеспечение, работающее
более чем на одной аппаратной платформе
и/или операционной системе. Типичным примером
является программное обеспечение, предназначенное
для работы в операционных системах Linux и Windows однов
Еще одним
важным моментом является цена и качество
получаемого приложения. Разрабатывать приложения
на .NET или Java значительно проще, а
значит дешевле и количество ошибок при
разработке значительно меньше.
Естественно, работая на более высоком
уровне абстракции, мы теряем скорость
- но это в 99% случаев незаметно конечному
пользователю, зато получаем возможность
писать быстро, удобно отлаживаться и
т.д.
Конечно, общее впечатление говорит о том, что Windows API обладает огромными возможностями по работе с операционной системой. Можно даже сказать - безграничными.
#include <stdio.h>
#include <windows.h>
LONG WinProcMain(HWND, UINT, WPARAM, LPARAM);
BOOL RegWinClass(WNDPROC, LPCTSTR, UINT);
HWND hWnd;
static HWND hwndPopup;
MSG msg;
HINSTANCE hInst;
POINT LeftCorner;
RECT rect;
char ClassNameMain[]="MainWindow";
//----------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;
if (!RegWinClass((WNDPROC)
return false;
hWnd=CreateWindow(
if (!hWnd) return false;
GetWindowRect(hWnd,&rect);
hwndPopup=CreateWindow( ClassNameMain, 0, WS_POPUPWINDOW | WS_VISIBLE, rect.left, rect.top ,rect.right/5, rect.bottom/5, hWnd, NULL, hInst, NULL);
if (!hwndPopup) return false;
while (GetMessage(&msg, NULL, 0, 0))
DispatchMessage(&msg);
return int(msg.wParam);
}
//----------------------------
BOOL RegWinClass(WNDPROC proc, LPCTSTR lpszClassName, UINT hrBackGround)
{
WNDCLASS w;
w.lpszClassName=lpszClassName;
w.hInstance=hInst;
w.lpfnWndProc=proc;
w.hCursor=LoadCursor(NULL, IDC_ARROW);
w.hIcon=LoadIcon(NULL, lpszClassName);
w.lpszMenuName=NULL;
w.hbrBackground=(HBRUSH)(
w.style=CS_HREDRAW | CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
return (RegisterClass(&w)!=0);
}
//----------------------------
LONG WinProcMain(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static int corner=0;
switch(msg)
{
case WM_CREATE:
hwndPopup=0;
break;
case WM_LBUTTONDOWN:
if (hWnd!=hwndPopup)
{
GetWindowRect(hWnd,&rect);
switch(corner)
{
case 0:
LeftCorner.x=rect.right;
LeftCorner.y=rect.top;
corner++;
break;
case 1:
LeftCorner.x=rect.right;
LeftCorner.y=rect.bottom;
corner++;
break;
case 2:
LeftCorner.x=rect.left;
LeftCorner.y=rect.bottom;
corner++;
break;
case 3:
LeftCorner.x=rect.left;
LeftCorner.y=rect.top;
corner=0;
break;
}
MoveWindow(hwndPopup, LeftCorner.x, LeftCorner.y, rect.right/4, rect.bottom/4, TRUE);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return LONG(DefWindowProc( hWnd, msg, wParam, lParam));
}
return 0;
}
#include <windows.h>
#include <commctrl.h>
#include <tchar.h>
#include<stdio.h>
#pragma comment(lib, "comctl32.lib")
#define ID_STATUS 1
#define IDC_VERT -1
#define MAX_RANGE 50
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND hMainWnd;
HWND hWndVertScroll;
char szClassName[] = "MyClass";
MSG msg;
WNDCLASSEX wc;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// Заполняем структуру класса окна
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Регистрируем класс окна
if (!RegisterClassEx(&wc))
{
MessageBox(NULL, "Cannot register class", "Error", MB_OK);
return 0;
}
// Создаем основное окно приложения
hMainWnd = CreateWindow(szClassName, "Лабораторная
№ 2", WS_OVERLAPPEDWINDOW|WS_
if (!hMainWnd)
{
MessageBox(NULL, "Cannot create main window", "Error", MB_OK);
return 0;
}
ShowWindow(hMainWnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
static short cx;
static int pParts[4];
static HWND hStatus;
static HWND hScroll;
SYSTEMTIME st;
int day, month, year, sec, min, hour;
char Buf[256];
char pos[256];
static int maxX;
static int curX,pageX;
static int minX;
switch (msg)
{
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
DrawText(hDC, "В элементе 'StatusBar' будет отображаться положение элемента 'ScrollBar', дата и время.", -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint(hWnd, &ps);
return 0;
case WM_SIZE:
MoveWindow(hStatus, 0,0,0,0, TRUE);
cx=LOWORD(lParam);
pParts[0]=cx-500;
pParts[1]=cx-300;
pParts[2]=cx-150;
pParts[3]=cx;
SendMessage(hStatus, SB_SETPARTS, 4, (LPARAM)pParts);
return 0;
case WM_CREATE:
hStatus=CreateStatusWindow(WS_
SendMessage(hStatus, SB_SETTEXT, 0, (LONG)"Положение ScrollBar:");
SetTimer(hWnd, 1, 1000, NULL);
minX=0;
maxX=100;
pageX=10;
curX=30;
SetScrollRange(hMainWnd,SB_
SetScrollPos(hMainWnd,SB_VERT,
return 0;
/*============================
case WM_VSCROLL:
switch(LOWORD(wParam))
{
case SB_LINEUP:
curX--;
break;
case SB_LINEDOWN:
curX++;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
curX=HIWORD(wParam);
break;
}
if (curX>=maxX)
{
EnableScrollBar(hMainWnd, SB_VERT, ESB_ENABLE_BOTH);
curX=maxX;
EnableScrollBar(hMainWnd, SB_VERT, ESB_DISABLE_DOWN);
}
else
if (curX<=minX)
{
EnableScrollBar(hMainWnd, SB_VERT, ESB_ENABLE_BOTH);
curX=minX;
EnableScrollBar(hMainWnd, SB_VERT, ESB_DISABLE_UP);
}
else EnableScrollBar(hMainWnd, SB_VERT, ESB_ENABLE_BOTH);
SetScrollPos(hMainWnd, SB_VERT, curX, TRUE);
sprintf(pos,"%d",curX);
SendMessage(hStatus, SB_SETTEXT, 1, (LONG)pos);
break;
return 0;
/*============================
/*============================
case WM_TIMER:
GetLocalTime(&st);
day=st.wDay;
month=st.wMonth;
year=st.wYear;
hour=st.wHour;
min=st.wMinute;
sec=st.wSecond;
sprintf(Buf, "%02d.%02d.%02d", day, month, year);
SendMessage(hStatus, SB_SETTEXT, 2, (LONG)Buf);
sprintf(Buf, "%02d:%02d:%02d", hour, min, sec);
SendMessage(hStatus, SB_SETTEXT, 3, (LONG)Buf);
return 0;
/*============================
case WM_CLOSE:
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
KillTimer(hWnd,1);
return 0;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
#include <stdio.h>
#include <windows.h>
LONG WinProcMain(HWND, UINT, WPARAM, LPARAM);
BOOL RegWinClass(WNDPROC, LPCTSTR, UINT);
HWND hWnd;
static HWND hwndPopup;
MSG msg;
HINSTANCE hInst;
POINT LeftCorner;
RECT rect;
char ClassNameMain[]="MainWindow";
//===========================
HDC hdc;
PAINTSTRUCT ps;
HPEN pen;
HFONT font;
//----------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;
if (!RegWinClass((WNDPROC)
return false;
hWnd=CreateWindow(
if (!hWnd) return false;
while (GetMessage(&msg, NULL, 0, 0))
DispatchMessage(&msg);
return int(msg.wParam);
}
//----------------------------
BOOL RegWinClass(WNDPROC proc, LPCTSTR lpszClassName, UINT hrBackGround)
{
WNDCLASS w;
w.lpszClassName=lpszClassName;
w.hInstance=hInst;
w.lpfnWndProc=proc;
w.hCursor=LoadCursor(NULL, IDC_ARROW);
w.hIcon=LoadIcon(NULL, lpszClassName);
w.lpszMenuName=NULL;
w.hbrBackground=(HBRUSH)(
w.style=CS_HREDRAW | CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
return (RegisterClass(&w)!=0);
}
//----------------------------
LONG WinProcMain(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static int corner=0;
switch(msg)
{
case WM_CREATE:
hwndPopup=0;
break;
case WM_PAINT:
GetClientRect(hWnd,& rect);
hdc = BeginPaint(hWnd, &ps);
pen=CreatePen(PS_SOLID, 1 ,RGB(255,0,0));
SelectObject(hdc, pen);
MoveToEx(hdc, 0,rect.bottom/2, NULL);
LineTo(hdc,rect.right,rect.
DeleteObject(pen);
font=CreateFont(20,10,0,0,FW_
SelectObject(hdc, font);
SetTextColor(hdc,RGB(255,0,
TextOut(hdc,rect.right-200,
DeleteObject(font);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return LONG(DefWindowProc( hWnd, msg, wParam, lParam));
}
return 0;
}
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "resource.h"
#define ID_BUTTON1 2001
#define EditID 777
int penstyle;
LONG MyWinP(HWND, UINT,WPARAM,LPARAM);
LRESULT DialProc(HWND, UINT,WPARAM,LPARAM);
POINT p[7];
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char Title[]="Заголовок окна";
char ProgName[]="My Window";
HWND hWnd;
MSG msg;
WNDCLASS w;
w.lpszClassName=ProgName;
w.hInstance=hInstance;
w.lpfnWndProc=(WNDPROC)MyWinP;
w.hCursor=LoadCursor(NULL, IDC_HAND);
w.hIcon=LoadIcon(NULL, IDI_ASTERISK);
w.lpszMenuName=NULL;
w.hbrBackground=(HBRUSH)(
w.style=CS_HREDRAW | CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
if(!RegisterClass(&w)) return false;
hWnd=CreateWindow(ProgName,"
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return int(msg.wParam);
}
LONG MyWinP(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
TEXTMETRIC tm;
HPEN pen;
/*---------------Диалоговое окно для шрифта---------------------*/
char str[256];
static CHOOSEFONT cfont;
static LOGFONT lf;
static COLORREF colfont;
HFONT font;
/*----------------------------
/*---------------Диалоговое
static COLORREF colorPen;
static CHOOSECOLOR cc = {0};
cc.lStructSize = sizeof(cc);
COLORREF cust_colors[16] = { 0 };
cc.lpCustColors = cust_colors;
/*----------------------------
switch(msg)
{
case WM_CREATE:
penstyle=PS_DASHDOT;
ZeroMemory(&lf,sizeof(lf));
lf.lfHeight=30;
lf.lfItalic=1;
lf.lfWeight=FW_BOLD;
strcpy(lf.lfFaceName,"Arial");
colfont=RGB(255,0,0);
cfont.lStructSize=sizeof(
cfont.Flags=CF_SCREENFONTS|CF_
cfont.lpLogFont=&lf;
cfont.rgbColors=colfont;
break;
case WM_KEYDOWN:
switch(LOWORD(wParam))
{
case VK_F4: //Выбор цвета
if (ChooseColor(&cc))
{
colorPen=cc.rgbResult;
InvalidateRect(hWnd,NULL,TRUE)
}
break;
case VK_F5: //Выбор шрифта
if (ChooseFont(&cfont))
{
lf=*cfont.lpLogFont;
colfont=cfont.rgbColors;
InvalidateRect(hWnd,NULL,TRUE)
}
break;
case VK_F3: //Координаты первой точки
if (DialogBox(NULL,(LPSTR)IDD_
{
InvalidateRect(hWnd,NULL,TRUE)
}
break;
}
break;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
GetClientRect(hWnd,&rt);
pen=CreatePen(penstyle,1,
SelectObject(hdc,pen);
p[0].x=rt.right/2;
p[0].y=rt.bottom/2;
p[1].x=rt.right/2-40;
p[1].y=rt.bottom/2-20;
p[2].x=rt.right/2+40;
p[2].y=rt.bottom/2-10;
p[3].x=rt.right/2-50;
p[3].y=rt.bottom/2-80;
p[4].x=rt.right/2-31;
p[4].y=rt.bottom/2-10;
Polyline(hdc,p,4);
font=CreateFontIndirect(&lf);
SelectObject(hdc,font);
SetTextColor(hdc,colfont);
GetTextMetrics(hdc,&tm);
TextOut(hdc,rt.right-tm.
DeleteObject(font);
DeleteObject(pen);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return LONG(DefWindowProc(hWnd, msg, wParam, lParam));
}
return 0;
}
LRESULT DialProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hBut[6], hStatic;
static HWND Edit;
static char buf[512];
RECT rect;
switch(msg)
{
case WM_INITDIALOG:
hStatic=CreateWindow("static",
Edit=CreateWindowEx(WS_EX_
sprintf(buf, "P[0](x;y) = P[0](%02d;%02d)",p[0].x,p[0].
SetDlgItemText(hDlg,EditID,
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg,IDOK);
break;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
break;
}
return 0;
}
return 0;
}
#include <windows.h>
#include <string.h>
#include <stdio.h>
#define ButtonID 2109
#define EditID1 21100
#define EditID2 21110
#define EditID3 21120
#define EditID4 21130
typedef struct
{
HWND hwnd;
int centerX, centerY; //точка центра эллипса
int dx, dy; //длина полуосей
}
datas;
HWND butClick;
HWND Edit1,Edit2,Edit3,Edit4;
HWND hStatic1,hStatic2,hStatic3,
LONG MyWinP(HWND, UINT,WPARAM,LPARAM);
DWORD WINAPI Thread2(LPVOID params);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char ProgName[]="DoubleThread";
char Title[]="TitleProgram";
RECT value;
HWND hWnd; MSG msg;
WNDCLASS w;
w.lpszClassName=ProgName;
w.hInstance=hInstance;
w.lpfnWndProc=(WNDPROC)MyWinP;
w.hCursor=LoadCursor(NULL, IDC_ARROW);
w.hIcon=LoadIcon(NULL, IDI_APPLICATION);
w.lpszMenuName=NULL;
w.hbrBackground=(HBRUSH)(
w.style=CS_HREDRAW | CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
Информация о работе Изменения свойств и уничтожения перекрывающихся и всплывающих окон