Назад | Начало урока | Вперед
Содержание

Глава 3


9:14 17.01.2006
(продолжение)

В новом проекте d:\MyC++Projects\MyC++Project05\Project052
будет несколько exe-файлов.Но ведь возможно же сделать
программу которая при своем запуске будет поочередно
вызывать на исполнение все эти exe- файлы и в результате
мы получим то, что нам надо - несколько exe-файлов будут
выполнениы один за другим.И исходники этих программ
будут выглядеть не такими громоздкими.

Уже сейчас сделаны exe-программы которые создают следующие файлы:

d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_rc
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_vcproj
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Resource_h
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_KrossDlg03_h
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Kross03_Dlg_cpp

23:31 17.01.2006

Доделал эти экзешники все теперь проверяю,думаю что сразу не будет
работать.

Каждую из 9 программ запустил по одному разу.Ввел число окон
везде- 2

////////////////////////////////////////////////////
10:57 18.01.2006

При компиляции программы выявились следующие ошибки:

1.В файле Kross03.cpp реагирует как на ошибку в определении
конструктора

CKross03App::CKross03App()

: m_dlgPaiAaa(0)
//: m_dlgPaiAab(0) {

// TODO: add construction code here,
// Place all significant initialization in InitInstance
}


Когда поставил ремарку у имени второй переменной,то сообщение об
ошибке исчезло.Или надо их через запятую?Проверь этот вариант.

-----------------------------------------------------
Ошибка №2 исправлена!

2.В Файле Kross03Dlg.h в качестве приватноых членов программа
почему-то не поместила два приватных члена(если мы задали два окна)
в объявление класса окна:

CPaiAaa m_dlgPaiAaa;
CPaiAab m_dlgPaiAab;

// Kross03Dlg.h : header file

private:

CPaiAaa m_dlgPaiAaa; Небыло этих двух членов!!
CPaiAab m_dlgPaiAab;

public:
CString m_strBitAaa;
CBitmap m_bmpBitAaa;
CString m_strBitAab;
CBitmap m_bmpBitAab;
CString m_strSlovo;
int n_Number;
CString m_strOrient;

};


Объяснение ошибки:

В результате работы программы Kross19

d:\MyC++Projects\MyC++Project05\Project052\Kross19

В директорию Map_Kross03Dlg_h

d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_KrossDlg03_h\\block02.h";
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_KrossDlg03_h\\block04.h";
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_KrossDlg03_h\\block06.h";

должно было скопироваться три файла -block02.h ,block04.h block06.h
а скопировался только последний.
------------------------------------------------

3.В заголовочных файлах PaiAaa.h и PaiAab.h
Часть текста предназначенного для PaiAab.h попала в файл
PaiAaa.h !

Посмотрим файл PaiAaa.h :

Это касается второго блока в этом файле:

//CPaiAaa dialog //CPaiAab

И это же касается 7-го блока в этом файле

CPaiAaa(CWnd* pParent = NULL); //standard constructor CPaiAab(CWnd*

Посмотри и увидишь,что правая часть этих предложений
должна находиться в файле PaiAab.h

Это означает что функция из программы Kross15 которая копирует
файл block02.h, в заголовочный файл первого дочернего окна
работает неправильно и вместо двух слов она копирует в первое
окно три слова.Значит надо переделать программу

Программа Kross21

d:\MyC++Projects\MyC++Project05\Project052\Kross21

Эта программа создает следующие текстовые файлы
для для программы Kross15:

d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_PaintDlgZZ1_h\\block02.h";
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_PaintDlgZZ1_h\\block03.h";
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_PaintDlgZZ1_h\\block05.h";
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_PaintDlgZZ1_h\\block07.h";

в том фрагменте где она делает этот блок чтобы было так:

// CPaiAaa dialog

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

соответственно во втором случае надо сделать чтобы было 7 слов
а не 6.
CPaiAaa(CWnd* pParent = NULL); // standard constructor

Теперь 7 слов!

в остальном по моему этот файл скопировался правильно.

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

KrossDlg03.cpp
неправильно блоки - 5,12,

Кажется при написании этого файла я забыл хорошую
функцию:
FunFileName02(FileName03,FileName103);
которая копирует в переменную одну строку из файла
Попробую ка я ее применить

m_dlgPaiAaa.Create(IDD_PAI_Aaa, this);
m_dlgPaiAaa.SetWindowPos(0, 40, 40, 60, 60, SWP_SHOWWINDOW);

В эти двух строках надо применить ее так:

---------------------------------------------------------------
Ошибка в файле
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_PaintDlgZZ1_cpp\\block16.h";

Блок 16

if( pWnd->m_strBitAaa.GetLength() >0)

Надо сделать так как написано здесь - три слова,а у меня все сжато
в одно слово.

//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
Еще остались ошибки:

1.В файле Kross03.cpp реагирует как на ошибку в определении
конструктора

CKross03App::CKross03App()

: m_dlgPaiAaa(0)
//: m_dlgPaiAab(0) Неправильно! {

}

Когда поставил ремарку у имени второй переменной,то сообщение об
ошибке исчезло.Или надо их через запятую?Проверь этот вариант.

: m_dlgPaiAaa(0)
, m_dlgPaiAab(0) Правильно! {

}

Только перед первой переменной ставится двоеточие,а потом идут
запятые.

------------------------------------------------------
2.Наверно надо переделать в файле PaiAaa.cpp последние строки

pdcAaa
->StretchBlt(0, 0, (rRect.Width()), (rRect.Height()),
&dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

Как то это некрасиво

3.Еще компилятор нашел ошибку:

// CPaintDlgZZ1 message handlers
void CPaiAab::ShowBitAab(CPaintDC* pdcAaa) Вот ошибка!! {

// Convert the pointer to a pointer to the main dialog class
CKross03Dlg *pWnd = (CKross03Dlg*)GetParent();

BITMAP bm;
CDC dcMem;
CRect rRect;

// Get the loaded bitmap
pWnd->m_bmpBitAab.GetBitmap(&bm);
// Create a device context to load the bitmap into
dcMem.CreateCompatibleDC(pdcAab);
// Select the bitmap into the compatible device context
dcMem.SelectObject(pWnd->m_bmpBitAab);
// Get the display area available
GetClientRect(rRect);
rRect.NormalizeRect();

// Copy and resize the bitmap to the dialog window
pdcAab
->StretchBlt(0, 0, (rRect.Width()), (rRect.Height()),
&dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

}


21:57 18.01.2006

Вот и сделал программу в которой можно задать любое
(разумное) количество дочерних окон.И все они появятся
на экране.
Это программа:

Теперь надо сделать чтобы она работала как генератор
кроссвордов.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz