Начальная версия проекта.

- Создана структура меню в ресурсном файле.
- Добавлены классы для создания окна и регистрации оконного класса.
This commit is contained in:
Victor 2012-04-03 21:48:47 +03:00
commit 4ab9bfee5b
6 changed files with 389 additions and 0 deletions

91
src/DonNUEdgeDetector.rc Normal file
View File

@ -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

85
src/Window.cpp Normal file
View File

@ -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;
}

33
src/Window.h Normal file
View File

@ -0,0 +1,33 @@
#pragma once
#include <windows.h>
#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;
};

111
src/WindowClass.cpp Normal file
View File

@ -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;
}

32
src/WindowClass.h Normal file
View File

@ -0,0 +1,32 @@
#pragma once
#include <windows.h>
/**
* Класс регистрации 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;
};

37
src/resource.h Normal file
View File

@ -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