Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral
class CMDIView : public CView {
protected: // create from serialization only
CMDIView();
DECLARE_DYNCREATE(CMDIView) // Attributes
public:
CMDIDoc* GetDocument();
int m_X; // координаты круга по x
int m_Y; // координаты круга по y
// Operations... ...

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

5. Инициализируем элементы данных класса документа. Для этого откройте файл MDIDoc. cpp, найдите в нём функцию OnNewDocument() и напишите в ней следующий код:

BOOL CMDIDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_X = 100; // начальное положение по X=100
m_Y = 100; // начальное положение по Y=100
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}

6. Инициализируем элементы данных класса представления. Для этого нужно создать функцию-элемент OnInitialUpdate() класса представления:

Выберите ClassWizard в меню View. На странице Message Maps выберите следующие события:

Class neme : CMDIView
Object ID : CMDIView
Message : OnInitialUpdate

и нажмите на кнопку Add Function
Напишите следующий код в функцию OnInitialUpdate():

void CMDIView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CMDIDoc* pDoc = GetDocument(); // получить указатель на документ
// обновить элементы данных представления
// соответствующими значениями документа.
m_X = pDoc->m_X;
m_Y = pDoc->m_Y;
pDoc->SetTitle("ANDY"); // всем документам даётся название ANDY
}

7. Теперь напишем код для вывода круга на экран.
Функция OnDraw() класса представления автоматически выполняется всякий раз, когда нужно вывести окно документа.

Напишите следующий код в функции OnDraw() :

НЕ нашли? Не то? Что вы ищете?
void CMDIView::OnDraw(CDC* pDC)
{
CMDIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->Ellipse(m_X - 20, m_Y - 20, m_X + 20, m_Y + 20); // рисуем круг диаметром 20
}

8. Напишем код для сохранения и считывания данных из файла.

Откройте файл MDIDoc. cpp, найдите в нём функцию Serialize() и измените её:

void CMDIDoc::Serialize(CArchive& ar)
{
if (ar. IsStoring()) {
// TODO: add storing code here( это выполняется если выбрать SAVE )
ar<<m_X; // записываем m_X в выбранный файл
ar<<m_Y; // записываем m_Y в выбранный файл
} else {
// TODO: add loading code here ( это выполняется если выбрать OPEN )
ar>>m_X; // считываем значение из выбранного файла в m_X
ar>>m_Y; // считываем значение из выбранного файла в m_Y
}
}

9. Часто бывает нужно изменить некоторые параметры программы, такие как заголовок главного окна или тип файла по умолчанию, который выводится в диалоговых панелях SAVE и OPEN. Для этого нужно выбрать закладку ResourceView и открыть пункт String Table. Вы увидите список переменных проекта( три колонки : ID, Value и Caption ).

IDR_MAINFRAME - заголовок главного окна (изменяется в поле Caption)
IDR_MCIRCLTYPE - тип файла по умолчанию, вы увидите 6 подстрок разделёнными знаком \n. Третья и четвёртая подстроки определяют тип документа по умолчанию. У меня CIR FILES( *.cir ) и .cir соответственно. Вы можете поставить свои значения.



10. Теперь создадим кнопку в панеле инструментов. Для этого нужно выбрать закладку ResourceView и открыть пункт Toolbar. Вы увидите панель инструментов в режиме редактирования. Нажмите на самую правую кнопку( пунктирный квадрат ), ниже нарисуйте кнопку по вашему усмотрению. Теперь дважды нажмете на вашу кнопку и введите ID: ID_MYBUTTON и Prompt: Изменение координат круга\nИзменение координат круга. Ну вот и всё, кнопка готова. Теперь нужно создать функцию, которая будет выполняться при нажатии на вашу кнопку :

Выберите пункт меню View далее ClassWizard, выберите закладку Message Maps, Project: MDI, Class name: CMDIView, Object IDs: ID_MYBUTTON, Message: COMMAND и нажмите на кнопку Add Function. В ответ создастся функция void CMDIView::OnMybutton().

11. Теперь по аналогии с главой 15 создадим собственное диалоговое окно с ID: IDD_MY_DIALOG и классом CMyDialog и разместим в нём четыре Edit Box с переменными типа INT: m_DX - текущая позиция по X, m_DY - текущая позиция по Y, m_DXN - новая позииция по X, m_DYN - новая позииция по Y. Не забудте написать #include "MyDialog. h" в файлах MDIDoc. cpp и MDIView. cpp.

12. Теперь напишем код в функцие OnMybutton().

void CMDIView::OnMybutton()
{
// TODO: Add your command handler code here
CMDIDoc* pDoc = GetDocument(); // получаем указатель на документ
CMyDialog MyD; // создаём переменную класса CMyDialog
MyD. m_DX = MyD. m_DXN = pDoc->m_X; // инициализмруем переменные диалога
MyD. m_DY = MyD. m_DYN = pDoc->m_Y; //
MyD. DoModal(); // создаём новый диалог
pDoc->m_X = MyD. m_DXN; // получаем новые значения
pDoc->m_Y = MyD. m_DYN; //
OnInitialUpdate(); // синхронизируем данные
Invalidate( TRUE ); // перерисовываем экран (вызов OnDraw())
pDoc->SetModifiedFlag(); // ставим флаг изменения документа
}


13. Ну вот и всё, программа готова. Отсюда можно взять рабочую программу, использующую MDI, в которой используется собственное диалоговое окно.

18. Проигрывание Wave-файлов под MFC

1. Введение
2. Проигрывание Wave-файла в виде ресурса
3. Проигрывание Wave-файла с диска
4. Пример проекта

1. Введение

В этой главе мы создадим программу, проигрывающую WAVE-файлы. Для начала создадим проект mysound в диалоговом режиме с использованием MFC. В начало файла mysoundDlg. cpp надо написать #include <mmsystem. h>, но это не всё, а теперь самое главное( если это не сделать, то будет ошибка при линковании ) :

1. Выберите Project -> Settings... --> C/C++ --> Code Generation и поставте Multithreaded DLL
2. Выберите Project -> Settings... --> Link --> General и поставте в поле Object/Library modules библиотеку winmm. lib( это очень важно, проверте!!! )

2. Проигрывание Wave-файла в виде ресурса

Первым делом надо создать ресурс, для этого в файле mysound. rc2 надо вписать строчку IDSOUND_CORRECT sound res\correct. wav, где IDSOUND_CORRECT - индефикатор ресурса, sound - тип ресурса( название можно менять ), res\correct. wav - файл ресурса. После этого в файле Resource. h надо зарегистрировать ресурс: #define IDSOUND_CORRECT 130. Число 130 не должно совпадать с другими числами.

Как только ресурс зарегистрирован можно написать в файле mysoundDlg. cpp функции проигрывания этого ресурса :

static void PlayResource(LPCTSTR lpszSound)
{
HRSRC hRes; // resource handle to wave file
HGLOBAL hData;
BOOL bOk = FALSE;
if ((hRes = ::FindResource(AfxGetResourceHandle(), lpszSound, _T("sound"))) != NULL && (hData = ::LoadResource(AfxGetResourceHandle(), hRes)) != NULL) {
// found the resource, play it
bOk = sndPlaySound((LPCTSTR)::LockResource(hData), SND_MEMORY|SND_SYNC|SND_NODEFAULT);
FreeResource(hData);
}
if (!bOk) {
AfxMessageBox("ERROR !!! Can not play the sound. \nNot find sound board!!!");
}
}
inline static void PlayResource(UINT nIDS) { PlayResource(MAKEINTRESOURCE(nIDS)); }

В фунции ::FindResource(AfxGetResourceHandle(), lpszSound, _T("sound")) третий параметр - тип ресурса, который был описан выше.

Теперь можно проиграть ресурс : PlayResource( IDSOUND_CORRECT );

3. Проигрывание Wave-файла с диска

Для проигрывания WAVE-файла с диска можно использовать функцию :

BOOL sndPlaySound( LPCTSTR lpszSoundName; UINT fuOptions;);

Параметры функции: lpszSoundName Имя файла. Если этот параметр NULL, то проигрывание файла останавливается. fuOptions Специальные опции для проигрывания музыки. Они могут быть следующими: Значение Описание SND_SYNC Музыка играется синхронно, и функция не возвращает указатель пока не будет конца файла. SND_ASYNC Музыка играется асинхронно, и функция возвращает указатель сразу после начала проигрывания файла. Чтобы остановить проигрывание, надо вызвать функцию SndPlaySound с параметром lpszSoundName установленным в NULL. SND_NODEFAULT Если файл не найден, то функция возвращает указатель сразу и не проигрывает стандартный звуковой эффект Windows. SND_MEMORY Этот параметр нужен для проигрывания Wave-файла в виде ресурса( из памяти ). SND_LOOP Этот параметр нужен для проигрывания Wave-файла в циклическом режиме. Также при этом вы должны использовать влаг SND_ASYNC. Чтобы остановить проигрывание, надо вызвать функцию SndPlaySound с параметром lpszSoundName установленным в NULL. SND_NOSTOP Если музыка уже проигрывается, то функция возврвщает FALSE. Возвращаемое значение: Если музыка проигрывается правильно, то функция возврвщает TRUE, иначе FALSE.
Пример использования:

BOOL bOk = sndPlaySound( "test. wav", SND_SYNC);
if (!bOk) {
AfxMessageBox("Error! Can not play the sound. !!!");
}

4. Пример проекта

Отсюда можно взять рабочую программу под MFC, в которой проигрываются Wave-файлы.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23