From 4ab9bfee5bb9b4d4c636c7cfefb40780795a83d8 Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 3 Apr 2012 21:48:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0.=20-=20=D0=A1=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D0=B0=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B5=D1=81=D1=83=D1=80=D1=81=D0=BD=D0=BE=D0=BC=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B5.=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=BA=D0=BD=D0=B0=20=D0=B8=20=D1=80=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BE=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DonNUEdgeDetector.rc | 91 ++++++++++++++++++++++++++++++++ src/Window.cpp | 85 ++++++++++++++++++++++++++++++ src/Window.h | 33 ++++++++++++ src/WindowClass.cpp | 111 +++++++++++++++++++++++++++++++++++++++ src/WindowClass.h | 32 +++++++++++ src/resource.h | 37 +++++++++++++ 6 files changed, 389 insertions(+) create mode 100644 src/DonNUEdgeDetector.rc create mode 100644 src/Window.cpp create mode 100644 src/Window.h create mode 100644 src/WindowClass.cpp create mode 100644 src/WindowClass.h create mode 100644 src/resource.h diff --git a/src/DonNUEdgeDetector.rc b/src/DonNUEdgeDetector.rc new file mode 100644 index 0000000..9363c8f --- /dev/null +++ b/src/DonNUEdgeDetector.rc @@ -0,0 +1,91 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Русский (Россия) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MENU1 MENU +BEGIN + POPUP "&Камера" + BEGIN + MENUITEM "&Захват кадра\tF10", ID_SNAPSHOT + MENUITEM "У&стройство", ID_DEVICE + MENUITEM SEPARATOR + MENUITEM "Вы&ход\tAlt+F4", ID_EXIT + END + POPUP "&Вид" + BEGIN + MENUITEM "&Робертс\t1", ID_OP_ROBERTS + MENUITEM "&Прюитт\t2", ID_OP_PREWITT + MENUITEM "&Собель\t3", ID_OP_SOBEL + MENUITEM SEPARATOR + MENUITEM "&Оригинал\tCtrl+O", ID_EF_ORIGINAL + MENUITEM "О&ттенки серого\tCtrl+G", ID_EF_GRAYSCALE + MENUITEM "&Негатив\tCtrl+I", ID_EF_INVERSE + END + POPUP "&Справка" + BEGIN + MENUITEM "&О программе", ID_ABOUT + END +END + +#endif // Русский (Россия) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/Window.cpp b/src/Window.cpp new file mode 100644 index 0000000..5b07f69 --- /dev/null +++ b/src/Window.cpp @@ -0,0 +1,85 @@ +#include "Window.h" + +/** + * Конструктор. + * Задаёт стиль и размеры окна по умочанию. + */ +Window::Window() { + x = CW_USEDEFAULT; + y = CW_USEDEFAULT; + w = CW_USEDEFAULT; + h = CW_USEDEFAULT; + style = WS_OVERLAPPEDWINDOW; +} + +/** + * Установка класса окна. + */ +void Window::setClassName(LPCWSTR className) { + this->className = className; +} + +/** + * Получение класса окна. + */ +LPCWSTR Window::getClassName() { + return className; +} + +/** + * Установка размера и положения окна. + */ +void Window::setBounds(int x, int y, int w, int h) { + this->x = x; + this->y = y; + this->w = w; + this->h = h; +} + +/** + * Установка дескриптора приложения. + */ +void Window::setInstance(HINSTANCE hInstance) { + this->hInstance = hInstance; +} + +/** + * Установка стиля окна. + */ +void Window::setStyle(int style) { + this->style = style; +} + +/** + * Задание заголовка окна. + */ +void Window::setTitle(LPCWSTR title) { + this->title = title; +} + +/** + * Создание окна. + * Вызывается после задания параметров. + * return true - окно успешно создано, false - произошла ошибка. + */ +bool Window::createWindow() { + hWnd = CreateWindow( + className, title, style, + x, y, w, h, + NULL, NULL, + hInstance, NULL + ); + + if(!hWnd) { + MessageBox(NULL, L"Cannot create window", L"Error", MB_OK); + return false; + } + return true; +} + +/** + * Получение дескриптора окна. + */ +HWND Window::getWindow() { + return this->hWnd; +} \ No newline at end of file diff --git a/src/Window.h b/src/Window.h new file mode 100644 index 0000000..51cb4d6 --- /dev/null +++ b/src/Window.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include "WindowClass.h" + +/** + * Класс создания окна + * @author aNNiMON + */ +class Window { +public: + Window(); + + void setClassName(LPCWSTR className); + LPCWSTR getClassName(); + + void setBounds(int x, int y, int w, int h); + void setInstance(HINSTANCE hInstance); + void setStyle(int style); + void setTitle(LPCWSTR title); + + bool createWindow(); + HWND getWindow(); + +private: + HWND hWnd; + HINSTANCE hInstance; + LPCWSTR title, className; + int x, y, w, h; + int style; +}; + + diff --git a/src/WindowClass.cpp b/src/WindowClass.cpp new file mode 100644 index 0000000..e8b21e9 --- /dev/null +++ b/src/WindowClass.cpp @@ -0,0 +1,111 @@ +#include "WindowClass.h" + +/** + * Конструктор. + * Задаёт параметры по умочанию. + */ +WindowClass::WindowClass() { + WndClass.cbClsExtra = 0; + WndClass.cbWndExtra = 0; + setToDefault(); +} + +/** + * Регистрация класса окна. + * return true - класс зарегистрирован, false - произошла ошибка. + */ +bool WindowClass::registerClass() { + if(!RegisterClass(&WndClass)) { + MessageBox(NULL, L"Cannot register class", L"Error", MB_OK); + return false; + } + return true; +} + +/** + * Задать параметры по умочанию. + */ +void WindowClass::setToDefault() { + setStyle( CS_HREDRAW | CS_VREDRAW ); + setIconType(IDI_APPLICATION); + setCursorType(IDC_ARROW); + setBackgroundBrushColor(WHITE_BRUSH); + setMenuName(L"MyMenu"); +} + +/** + * Установка цвета кисти для фона окна. + */ +void WindowClass::setBackgroundBrushColor(int color) { + WndClass.hbrBackground = (HBRUSH) GetStockObject(color); +} + +/** + * Установка имени класса. + */ +void WindowClass::setClassName(LPCWSTR className) { + WndClass.lpszClassName = className; +} + +/** + * Установка курсора. + */ +void WindowClass::setCursor(HCURSOR hCursor) { + WndClass.hCursor = hCursor; +} + +/** + * Загрузка и установка курсора по его типу. + */ +void WindowClass::setCursorType(LPCWSTR cursorType) { + setCursor( LoadCursor(NULL, cursorType) ); +} + +/** + * Установка иконки. + */ +void WindowClass::setIcon(HICON hIcon) { + WndClass.hIcon = hIcon; +} + +/** + * Загрузка и установка иконки по её типу. + */ +void WindowClass::setIconType(LPCWSTR iconType) { + setIcon( LoadIcon(NULL, iconType) ); +} + +/** + * Установка дескриптора приложения. + */ +void WindowClass::setInstance(HINSTANCE hInstance) { + WndClass.hInstance = hInstance; +} + +/** + * Задать имя меню. + */ +void WindowClass::setMenuName(LPCWSTR menuName) { + WndClass.lpszMenuName = menuName; +} + +/** + * Установка стиля. + */ +void WindowClass::setStyle(int style) { + WndClass.style = style; +} + +/** + * Задание оконной процедуры. + */ +void WindowClass::setWindowProcedure(WNDPROC procedure) { + WndClass.lpfnWndProc = procedure; +} + +/** + * Получить имя класса. + */ +LPCWSTR WindowClass::getClassName() { + return WndClass.lpszClassName; +} diff --git a/src/WindowClass.h b/src/WindowClass.h new file mode 100644 index 0000000..e4044b9 --- /dev/null +++ b/src/WindowClass.h @@ -0,0 +1,32 @@ +#pragma once + +#include + +/** + * Класс регистрации WNDCLASS + * @author aNNiMON + */ +class WindowClass { +public: + WindowClass(); + + bool registerClass(); + + void setToDefault(); + void setBackgroundBrushColor(int color); + void setCursor(HCURSOR hCursor); + void setCursorType(LPCWSTR cursorType); + void setClassName(LPCWSTR className); + void setIcon(HICON hIcon); + void setIconType(LPCWSTR iconType); + void setInstance(HINSTANCE hInstance); + void setMenuName(LPCWSTR menuName); + void setStyle(int style); + void setWindowProcedure(WNDPROC procedure); + + LPCWSTR getClassName(); + +private: + WNDCLASS WndClass; +}; + diff --git a/src/resource.h b/src/resource.h new file mode 100644 index 0000000..8e8d45b --- /dev/null +++ b/src/resource.h @@ -0,0 +1,37 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by DonNUEdgeDetector.rc +// +#define IDR_MENU1 101 +#define ID_40001 40001 +#define ID_40002 40002 +#define ID_40003 40003 +#define ID_SNAPSHOT 40004 +#define ID_EXIT 40005 +#define ID_ABOUT 40006 +#define ID_40007 40007 +#define ID_40008 40008 +#define ID_40009 40009 +#define ID_OP_ROBERTS 40010 +#define ID_OP_PREWITT 40011 +#define ID_OP_SOBEL 40012 +#define ID_40013 40013 +#define ID_40014 40014 +#define ID_40015 40015 +#define ID_40016 40016 +#define ID_DEVICE 40017 +#define ID_EF_ORIGINAL 40018 +#define ID_EF_GRAYSCALE 40019 +#define ID_EF_NEGATIVE 40020 +#define ID_EF_INVERSE 40021 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40022 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif