commit 4ab9bfee5bb9b4d4c636c7cfefb40780795a83d8 Author: Victor Date: Tue Apr 3 21:48:47 2012 +0300 Начальная версия проекта. - Создана структура меню в ресурсном файле. - Добавлены классы для создания окна и регистрации оконного класса. 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