Редактор ресурсов типа курсор

Применение системы программирования Visual C++ как один из полных и совершенных продуктов, предназначенных для разработки программного обеспечения. Проектирование, реализация и тестирование программного обеспечения. Реализация механизма смены курсора.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 02.06.2012
Размер файла 339,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Белорусский национальный технический университет

Курсовая работа

По курсу: "Системное программное обеспечение"

На тему: "Редактор ресурсов типа курсор".

Выполнилст. гр. №307222/37 Лукашевич С.И.

Проверил Слабко Ю.И.

Минск 2005г.

Оглавление

  • Введение
  • 1.Обзор вопроса
  • 2. Постановка задачи
  • 3. Проектирование ПО
  • 4. Реализация ПО
  • 4.1 Основы GUI - реализации в Visual C++
  • 4.2 Генерация исходного кода
  • 4.3 Создание пользовательского интерфейса
  • 4.4 Реализация механизма смены курсора
  • 5. Тестирование ПО
  • Заключение
  • Литература
  • Приложения

Введение

Новый 32-разрядный компилятор Microsoft Visual C++ 6.0 для Windows NT и Windows 95 - одна из составных частей мощного пакета компиляторов Developer Sudio, в который вхолят новейшие версии таких известных программных продуктов, как Visual Basic, Visual J++, Visual FoxPro.

Система программирования Visual C++ - один из наиболее полных и совершенных продуктов, предназначенных для разработки программного обеспечения. Это высокоскоростная и удобная для программирования система, предлагающая широкий набор разнообразных инструментов проектирования для любого стиля программирования. Новые компоненты содержат средства для программирования приложений, улучшенную реализацию ActiveX и Internet, дополнительные возможности разработки баз данных, а также новые архитектуры приложений и элементы взаимодействия между пользователями.

Целью данной курсовой работой является разработка приложения, в котором пользователь имел бы возможность изменять внешний вид ресурса типа курсор.

курсор программное обеспечение редактор

1.Обзор вопроса

В приложениях Windows окно всегда создаётся на основе оконного класса. Оконный класс содержит несколько характеристик, на которых основывается создаваемое окно, включая и курсор мышки по-умолчанию. В некоторых случаях, приложению необходимо изменить курсор, связанный с окном, которое оно создаёт. Самым простым способом, позволяющим изменить стандартный курсор на любой другой является следующий.

Надо изменить курсор мышки для объекта класса окна путём переопределения функции CWnd:: OnSetCursor (). Следует использовать ClassWizard, чтобы в карте сообщений для сообщения WM_SETCURSOR добавить функцию CMyView:: OnSetCursor () и в тело функции добавить, например, следующий код:

BOOL CMyView:: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)

{

if (m_cur)

{

:: SetCursor (AfxGetApp () - >LoadStandardCursor (IDC_WAIT));

return TRUE;

}

return CView:: OnSetCursor (pWnd, nHitTest, message);

}

Естественно, это лишь основа всей процедуры изменения курсора. Чтобы приложение работало корректно, следует написать еще несколько обработчиков, методов классов, а также определить не одну вспомогательную переменную.

2. Постановка задачи

Разработать программу “Редактор ресурсов типа курсор”. Программа должна реализовывать следующие функции:

· работа со статичными и анимационными курсорами;

· загрузка списка доступных курсоров;

· изменение вида курсора.

Программа должна быть написана на языке С++. Средство разработки - Microsoft Visual C++. Должна быть предусмотрена возможность установки стандартного курсора Windows, а также функция обновления списка доступных курсоров для того, чтобы при добавлении новых курсоров в папку не приходилось перезагружать приложение.

3. Проектирование ПО

Проектирование задачи основано на объектно-ориентированной методологии. Но следует отметить, что объектно-ориентированное программирование можно эффективно использовать, если ему предшествуют объектно-ориентированный анализ задачи и объективно-ориентированное проектирование программного комплекса. Без объектно-ориентированного проекта попытки применения объектно-ориентированного программирования являются, по меньшей мере, малоэффективными и весьма трудоемкими.

Исходная задача разбивается на следующие две подзадачи:

· разработка интерфейса программы;

· доработка класса диалогового окна - добавление функций редактора типа курсор.

Сразу следует определиться, что интерфейс программы будет основан на диалоговом типе окна. Также главное окно должно содержать главное меню программы, выпадающий список с перечнем всех доступных курсоров и кнопку, по нажатию на которую будет изменяться внешний вид курсора. Таким образом, получим следующий интерфейс (рисунок 1).

Рисунок 1 - Интерфейс программы.

Вторым этапом проектирования является разработка механизма поиска доступных курсоров. Примем следующую структуру. Все курсоры - обычные и анимационные - находятся в папке “cursors”, которая, в свою очередь, находится в той же папке, где и исполняемый модуль программы. Таким образом, получим, что программа читает список, доступных ей курсоров из папки “cursors”.

Теперь опишем классы, необходимые для разработки программы, т.е. функциональную структуру.

Функциональная структура программного продукта содержит следующие классы:

· CMyCursorApp - основной класс приложения, наследуемый от CWinApp;

· CMyCursorDlg - класс окна, наследуемый от CDialog и контролирующий все свойства и особенности окна приложения.

Подробное дерево классов программного продукта с перечислением всех функций и переменных прилагается.

Таким образом, получим следующую диаграмму классов - Приложение В.

4. Реализация ПО

4.1 Основы GUI - реализации в Visual C++

Для создания программы потребуется программирование графического интерфейса (GUI - Graphical User Interface). В программах с графическим интерфейсом можно создавать одно и более окон с элементами интерфейса (меню, панели инструментов, строки состояния, списки, полосы прокрутки и тд). Данные программы могут выводить рисунки, растровые изображения и текст с использованием большого набора шрифтов. Программа создавалась с использованием мастера генерации приложений App Wizard и библиотек MFC.

Существует несколько способов написания программ с графическим интерфейсом с помощью Visual C++. Во-первых - на языке С или С++ с непосредственным обращением к основным функциям Win32 API, которые являются частью операционных систем Windows. При таком подходе требуется написать множество строк программного кода, прежде чем перейти к решению целевой задачи разрабатываемого приложения.

Во-вторых - с помощью библиотеки MFC, содержащей большой набор готовых классов и вспомогательный код для выполнения стандартных задач программирования в среде Windows (например, создания окон и обработки сообщений). Кроме того, MFC используется для быстрого добавления в программы панелей инструментов, многопанельных окон поддержки OLE. Применяется для создания элементов, которые используются программными компонентами и отображаются в Web-браузерах и других приложениях. Использование MFC позволяет упростить программы с графическим интерфейсом, что значительно облегчит процесс программирования. Отметим: функции MFC содержат вызовы функций Win32 API. Говорят, что Win32 API “упакован" в библиотеку MFC, представляющую более высокоуровневые и переносимые средства программного интерфейса. Кроме того, в MFC-программах можно свободно вызывать функции Win32 API, сохраняя возможность использования этого интерфейса.

В-третьих - на языке С++ с использованием библиотеки MFC и различных мастеров. Мастер AppWizard используется для генерации основы исходных файлов программ. Аналогично, мастер AppWizard генерирует основную часть кода для определения производных классов и обработчиков сообщений, настройки библиотеки MFC, управления диалоговыми окнами, а также выполнения других задач. Они позволяют создавать программы с большим набором сложных компонентов. К таковым относятся панели инструментов, строки состояния, контекстная справка, объекты OLE, средства доступа к базам данных и даже законченные меню с частично или полностью функционирующими командами открытия и сохранения файлов, печати, предварительного просмотра печати и выполнения других задач. После генерации основного кода программы с помощью мастера добавьте собственный код, определяющий логику работы программы

Преимущество третьего подхода состоит в использовании не только уже написанного кода MFC, но и сгенерированного исходного кода, позволяющего решить многие рутинные задачи программирования. Библиотека MFC и матера освобождают нас от необходимости создавать средства визуального интерфейса вручную и обеспечивают соответствие этого интерфейса требованиям MicroSoft.

4.2 Генерация исходного кода

Для генерации программы с помощью AppWizard создаётся новый проект необходимого типа. Затем в последовательности диалоговых окон, отображаемых мастером, задаются требуемые характеристики программы.

Для этого требуется запустить Developer Studio С++ и выполнить следующие шаги:

Выбрать в меню File команду New. В результате отобразится диалоговое окно New.

Открыть вкладку Projects (если она не отображена), чтобы можно было создать новый проект.

В списке типов проекта выбрать “MFC AppWizard (Exe) ”. Это приведёт к тому, что мастер AppWizard сначала предложит ввести необходимую информацию, а затем создаст основу кода MFC-программы.

Ввести имя MyCursor в поле Project Name. Visual C++ присвоит новому проекту и связанной с ним рабочей области имя MyCursor.

В поле Location задать путь к папке с файлами, т.е. к каталогу проекта. Можно принять стандартный каталог, указанный в этом поле. Стандартному каталогу присваивается то же имя, что и рабочей области - MyCursor.

Щелкнуть на кнопке ОК в диалоговом окне. Отобразится первое из диалоговых окон мастера AppWizard, помеченное “MFC AppWizard - Step 1”. В параметрах мастера AppWizard, выбираемых по умолчанию, будет указано стандартное значение. В диалоговом окне выбрать тип приложения Dialog Based, в следующем окне оставить галочку только в “3D Controls” и нажать Finish. Мастер создаст указанный каталог проекта, сгенерирует исходные файлы программы и откроет вновь созданный проект MyCursor.

4.3 Создание пользовательского интерфейса

В первую очередь надо создать меню приложения. Для этого надо нажать сочетание клавиш Ctrl+R и выбрать в появившемся окне Menu. Далее надо создать меню следующего вида:

Далее требуется отредактировать главное окно приложения, которое было создано Wizard-ом. А именно:

· удалить кнопки Ok, Cancel;

· Добавить кнопку “Установить курсор”;

· Добавить выпадающий список;

· Вызвать окно Dialog Properties и подключить ранее созданное меню к диалоговому окну.

В результате получится следующее окно:

4.4 Реализация механизма смены курсора

Далее необходимо реализовать собственно сам механизм смены внешнего вида курсора. Для этого необходимо:

· Добавить новые переменные и методы в класса CMyCursorDialog:

BOOL m_cur;

CString CursorName;

void LoadMyCursors (CComboBox* CB);

void RefreshList ();

void SetDefault ();

CComboBox m_CBCursor;

· Изменить функцию OnInitDialog () (добавить следующие строки):

LoadMyCursors (&m_CBCursor);

m_cur = false;

· С помощью мастера классов Class Wizard добавить новую функцию

OnMouseMove ()

· Редактировать функцию OnMouseMove ()

if (m_cur) {

:: SetCursor (:: LoadCursorFromFile (_T ("cursors\\" + CursorName)));

}

· С помощью мастера классов Class Wizard добавить новую функцию OnSetCursor ()

· Редактировать функцию OnSetCursor ()

if (m_cur)

return TRUE;

else

return CDialog:: OnSetCursor (pWnd, nHitTest, message);

· Определить функцию RefreshList ()

LoadMyCursors (&m_CBCursor);

· Определить функцию SetDefault ()

m_cur = false;

:: SetCursor (NULL);

· Определить функцию LoadMyCursors (CComboBox* CB)

struct _finddata_t c_file;

long hFile;

CString str = "";

// очищаем выпадающий список

CB->ResetContent ();

// загружаем анимационные курсоры

if ( (hFile = _findfirst ("cursors\\*. ani", &c_file)) == - 1L) {

} else {

str = c_file. name;

CB->AddString (str);

while (_findnext (hFile, &c_file) == 0) {

str = c_file. name;

CB->AddString (str);

}

_findclose (hFile);

}

// загружаем обычные курсоры

if ( (hFile = _findfirst ("cursors\\*. cur", &c_file)) == - 1L)

return;

else {

str = c_file. name;

CB->AddString (str);

while (_findnext (hFile, &c_file) == 0) {

str = c_file. name;

CB->AddString (str);

}

_findclose (hFile);

}

· С помощью мастера создать обработчики событий меню и записать в определение функций следующий код:

void CMyCursorDlg:: OnMrefresh ()

{

RefreshList ();

}

void CMyCursorDlg:: OnMstandart ()

{

SetDefault ();

}

· А также обработчик события нажатия на кнопку “Установить курсор”:

int i = m_CBCursor. GetCurSel ();

if (i! = - 1) {

m_CBCursor. GetLBText (m_CBCursor. GetCurSel (), CursorName);

m_cur = true;

:: SetCursor (:: LoadCursorFromFile (_T ("cursors\\" + CursorName)));

} else {

MessageBox ("Курсор не выбран!", "Ошибка!", MB_ICONERROR | MB_OK);

}

Таким образом реализуется класс CMyCursorDialog, представленный в приложении К.

5. Тестирование ПО

Одним из наиболее важных этапов разработки программного обеспечения является этап его тестирования (или испытания). Целью этого этапа является проверка правильности и точности реализации функций, выполнение которых возлагается на данное программное обеспечение. В случае выявления некоторых неточностей и ошибок необходимо проведение работ по их исправлению и доработке программного обеспечения до требуемого уровня.

Тестирование проводилось на основании выполняемых приложением функций. Результаты тестирования сведены в таблицу 5.1.

Таблица 5.1 - Тестирование приложения

Действие

Результат

Просмотр списка доступных курсоров (обычных и анимационных)

Список выводится корректно.

Смена курсора

Успешно

Обновление списка курсоров

Успешно

Сброс пользовательского курсора (установка стандартного курсора)

Успешно

Закрытие программы

Успешно

Проанализировав результаты тестирования, приходим к выводу, что разработанная программа полностью работоспособна.

Заключение

В процессе работы над курсовым проектом был разработана полнофункциональная программа, основной задачей которой является изменение внешнего вида курсора. Программа разработана с помощью пакета Microsoft Visual C++. Приложение прошло успешно тестирование и является полнофункциональным продуктом.

Литература

1. Мюллер Дж. - Visual Studio 6. Полное руководство. "БХВ-Kиeв", 1999;

2. Коберниченко А. - MS Visual Studio 6. Искусство программирования, Нолидж, 2000;

3. Сайт www.firststeps.ru.

Приложения

Приложение А.

Класс CMyCursorApp (исходный текст).

// MyCursor. h: main header file for the MYCURSOR application

//

#if! defined (AFX_MYCURSOR_H__218591EC_E551_4086_9BCD_43A4DB2B0DB0__INCLUDED_)

#define AFX_MYCURSOR_H__218591EC_E551_4086_9BCD_43A4DB2B0DB0__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__

#error include 'stdafx. h' before including this file for PCH

#endif

#include "resource. h" // main symbols

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorApp:

// See MyCursor. cpp for the implementation of this class

//

class CMyCursorApp: public CWinApp {

public:

CMyCursorApp ();

// Overrides

// ClassWizard generated virtual function overrides

// {{AFX_VIRTUAL (CMyCursorApp)

public:

virtual BOOL InitInstance ();

// }}AFX_VIRTUAL

// Implementation

// {{AFX_MSG (CMyCursorApp)

// NOTE - the ClassWizard will add and remove member functions here.

// DO NOT EDIT what you see in these blocks of generated code!

// }}AFX_MSG

DECLARE_MESSAGE_MAP ()

};

#endif // ! defined (AFX_MYCURSOR_H__218591EC_E551_4086_9BCD_43A4DB2B0DB0__INCLUDED_)

// MyCursor. cpp: Defines the class behaviors for the application.

//

#include "stdafx. h"

#include "MyCursor. h"

#include "MyCursorDlg. h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE [] = __FILE__;

#endif

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorApp

BEGIN_MESSAGE_MAP (CMyCursorApp, CWinApp)

// {{AFX_MSG_MAP (CMyCursorApp)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

// }}AFX_MSG

ON_COMMAND (ID_MEXIT, CWinApp:: OnAppExit)

ON_COMMAND (ID_HELP, CWinApp:: OnHelp)

END_MESSAGE_MAP ()

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorApp construction

CMyCursorApp:: CMyCursorApp ()

{

// TODO: add construction code here,

// Place all significant initialization in InitInstance

}

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// The one and only CMyCursorApp object

CMyCursorApp theApp;

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorApp initialization

BOOL CMyCursorApp:: InitInstance ()

{

// Standard initialization

// If you are not using these features and wish to reduce the size

// of your final executable, you should remove from the following

// the specific initialization routines you do not need.

#ifdef _AFXDLL

Enable3dControls (); // Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic (); // Call this when linking to MFC statically

#endif

CMyCursorDlg dlg;

m_pMainWnd = &dlg;

int nResponse = dlg. DoModal ();

// Since the dialog has been closed, return FALSE so that we exit the

// application, rather than start the application's message pump.

return FALSE;

}

Приложение Б

Класс CMyCursorDlg (исходный текст).

// MyCursorDlg. h: header file

//

#if! defined (AFX_MYCURSORDLG_H__8D3F5F0A_B075_4614_B0E4_83B3FE00293F__INCLUDED_)

#define AFX_MYCURSORDLG_H__8D3F5F0A_B075_4614_B0E4_83B3FE00293F__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorDlg dialog

class CMyCursorDlg: public CDialog {

// Construction

public:

CMyCursorDlg (CWnd* pParent = NULL); // standard constructor

BOOL m_cur;

CString CursorName;

void LoadMyCursors (CComboBox* CB);

void RefreshList ();

void SetDefault ();

// Dialog Data

// {{AFX_DATA (CMyCursorDlg)

enum { IDD = IDD_MYCURSOR_DIALOG };

CComboBox m_CBCursor;

// }}AFX_DATA

// ClassWizard generated virtual function overrides

// {{AFX_VIRTUAL (CMyCursorDlg)

protected:

virtual void DoDataExchange (CDataExchange* pDX); // DDX/DDV support

// }}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

// {{AFX_MSG (CMyCursorDlg)

virtual BOOL OnInitDialog ();

afx_msg void OnPaint ();

afx_msg HCURSOR OnQueryDragIcon ();

afx_msg void OnMrefresh ();

afx_msg void OnMstandart ();

afx_msg void OnBset ();

afx_msg void OnMouseMove (UINT nFlags, CPoint point);

afx_msg BOOL OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message);

// }}AFX_MSG

DECLARE_MESSAGE_MAP ()

};

#endif // ! defined (AFX_MYCURSORDLG_H__8D3F5F0A_B075_4614_B0E4_83B3FE00293F__INCLUDED_)

// MyCursorDlg. cpp: implementation file

//

#include "stdafx. h"

#include "MyCursor. h"

#include "MyCursorDlg. h"

#include "io. h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE [] = __FILE__;

#endif

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorDlg dialog

CMyCursorDlg:: CMyCursorDlg (CWnd* pParent /*=NULL*/)

: CDialog (CMyCursorDlg:: IDD, pParent)

{

// {{AFX_DATA_INIT (CMyCursorDlg)

// NOTE: the ClassWizard will add member initialization here

// }}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp () - >LoadIcon (IDR_MAINFRAME);

}

void CMyCursorDlg:: DoDataExchange (CDataExchange* pDX)

{

CDialog:: DoDataExchange (pDX);

// {{AFX_DATA_MAP (CMyCursorDlg)

DDX_Control (pDX, IDC_COMBO, m_CBCursor);

// }}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP (CMyCursorDlg, CDialog)

// {{AFX_MSG_MAP (CMyCursorDlg)

ON_WM_PAINT ()

ON_WM_QUERYDRAGICON ()

ON_COMMAND (ID_MREFRESH, OnMrefresh)

ON_COMMAND (ID_MSTANDART, OnMstandart)

ON_BN_CLICKED (IDC_BSET, OnBset)

ON_WM_MOUSEMOVE ()

ON_WM_SETCURSOR ()

// }}AFX_MSG_MAP

END_MESSAGE_MAP ()

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //

// CMyCursorDlg message handlers

BOOL CMyCursorDlg:: OnInitDialog ()

{

CDialog:: OnInitDialog ();

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon (m_hIcon, TRUE); // Set big icon

SetIcon (m_hIcon, FALSE); // Set small icon

// загружаем список курсоров

LoadMyCursors (&m_CBCursor);

m_cur = false;

return TRUE; // return TRUE unless you set the focus to a control

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CMyCursorDlg:: OnPaint ()

{

if (IsIconic ()) {

CPaintDC dc (this); // device context for painting

SendMessage (WM_ICONERASEBKGND, (WPARAM) dc. GetSafeHdc (), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics (SM_CXICON);

int cyIcon = GetSystemMetrics (SM_CYICON);

CRect rect;

GetClientRect (&rect);

int x = (rect. Width () - cxIcon + 1) / 2;

int y = (rect. Height () - cyIcon + 1) / 2;

// Draw the icon

dc. DrawIcon (x, y, m_hIcon);

} else {

CDialog:: OnPaint ();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CMyCursorDlg:: OnQueryDragIcon ()

{

return (HCURSOR) m_hIcon;

}

// обновляет список курсоров

void CMyCursorDlg:: RefreshList ()

{

LoadMyCursors (&m_CBCursor);

}

// устанавливает курсор по-умолчанию

void CMyCursorDlg:: SetDefault ()

{

m_cur = false;

:: SetCursor (NULL);

}

// возвращает список файлов в папке cursors

void CMyCursorDlg:: LoadMyCursors (CComboBox* CB)

{

struct _finddata_t c_file;

long hFile;

CString str = "";

// очищаем выпадающий список

CB->ResetContent ();

// загружаем анимационные курсоры

if ( (hFile = _findfirst ("cursors\\*. ani", &c_file)) == - 1L) {

} else {

str = c_file. name;

CB->AddString (str);

while (_findnext (hFile, &c_file) == 0) {

str = c_file. name;

CB->AddString (str);

}

_findclose (hFile);

}

// загружаем обычные курсоры

if ( (hFile = _findfirst ("cursors\\*. cur", &c_file)) == - 1L)

return;

else {

str = c_file. name;

CB->AddString (str);

while (_findnext (hFile, &c_file) == 0) {

str = c_file. name;

CB->AddString (str);

}

_findclose (hFile);

}

}

void CMyCursorDlg:: OnMrefresh ()

{

RefreshList ();

}

void CMyCursorDlg:: OnMstandart ()

{

SetDefault ();

}

// по клику мышки по кнопке устанавливает вид курсора

void CMyCursorDlg:: OnBset ()

{

int i = m_CBCursor. GetCurSel ();

if (i! = - 1) {

m_CBCursor. GetLBText (m_CBCursor. GetCurSel (), CursorName);

m_cur = true;

:: SetCursor (:: LoadCursorFromFile (_T ("cursors\\" + CursorName)));

} else {

MessageBox ("Курсор не выбран!", "Ошибка!", MB_ICONERROR | MB_OK);

}

}

void CMyCursorDlg:: OnMouseMove (UINT nFlags, CPoint point)

{

if (m_cur) {

:: SetCursor (:: LoadCursorFromFile (_T ("cursors\\" + CursorName)));

}

}

// функция устанавливает внешний вид курсора

BOOL CMyCursorDlg:: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)

{

if (m_cur)

return TRUE;

else

return CDialog:: OnSetCursor (pWnd, nHitTest, message);

}

Приложение В

Диаграмма классов.

Размещено на Allbest.ru


Подобные документы

  • Описание среды разработки Microsoft Visual Studio. Поддерживаемые технологии и языки программирования. Возможности и особенности компьютеризированного тестирования человека. Проектирование программного обеспечения с использованием объектного подхода.

    курсовая работа [3,0 M], добавлен 09.02.2013

  • Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.

    курсовая работа [593,3 K], добавлен 03.01.2015

  • Тестирование и отладка программного обеспечения: понятие, принципы, этапы, цели и задачи. Тестирование методом сандвича как компромисс между восходящим и нисходящим подходами. Сущность метода "белого и черного ящика", отладки программного обеспечения.

    курсовая работа [36,9 K], добавлен 21.07.2012

  • Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.

    курсовая работа [1,2 M], добавлен 03.01.2015

  • Понятие и ключевое отличие распределенной разработки программного обеспечения, его достоинства и недостатки. Концептуальное решение и выбор типа разработки. Особенности программного обеспечения с открытым исходным кодом. Идея и развитие Open Source.

    курсовая работа [97,7 K], добавлен 14.12.2012

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

  • Реализация задачи использования методики SDLC (управление жизненным циклом разработки программного обеспечения) при внедрении реальной системы информационных технологий. Описание проекта внедрения системы автоматической регистрации участников выставок.

    реферат [585,1 K], добавлен 10.09.2010

  • Оснащенность предприятия системным программным обеспечением, используемым для организации производственного процесса. Проектирование, внедрение и эксплуатация системного и прикладного программного обеспечения. Тестирование и отладка программного продукта.

    отчет по практике [272,2 K], добавлен 29.12.2014

  • Тестирование как составляющая часть процесса отладки программного обеспечения, его роль для обеспечения качества продукта. Обнаружение ошибок в программах, выявление причин их возникновения. Подходы к формулированию критериев полноты тестирования.

    курсовая работа [1,6 M], добавлен 20.12.2012

  • Понятие программного обеспечения, вопросы его разработки и использования. Общая характеристика системного программного обеспечения и работа операционной системы. Специфика процесса управления разработкой программного обеспечения и его особенности.

    курсовая работа [636,2 K], добавлен 23.08.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.