Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 144

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 173 >> Следующая

• Все всплывающие меню в меню сервера для редактирования на месте, расположенные перед двойным разделителем (в программе ServDemo это всплывающее меню Edit, показанное на рис. 24.5).
• Оставшиеся всплывающие меню контейнера, если они есть (в программе ContDemo такие меню справа от двойного разделителя отсутствуют).
• Оставшиеся всплывающие меню в меню сервера (для программы ServDemo это должно быть всплывающее меню Help).
Результат объединения меню программ ServDemo и ContDemo (которая будет создана позже) приведен на рис. 24.8.
? SeivDemo.rc - IDR_SRVR_INPLACE fEngush... ЩШШ
Edit • Help:
Рис. 24.5. Меню idr_SRVr_inplace программы ServDemo в редакторе меню
Теперь следует изменить всплывающее меню Edit в меню idr_srvr_inplace, чтобы оно было таким же, как в меню IDR_MA IN FRAME и idr_srvr_embedded.
Далее в файле ServDemoDoc.h добавьте в раздел public (определение класса CLine) определения для функций GetMaxX и GetMaxY.
class CLine : public CObject {
protected:
DWORD m XI, m_Yl, m X2, m_Y2;
CLine () U
DECLARE SERIAL (CLine)
public:
CLine (int XI, int Yl, int X2, int Y2)
{
m _X1 = XI
m ~Y1 = Yl
m ~X2 = X2
m ~Y2 = Y2
}
void Draw (CDC *PDC); int GetMaxX ()
<
return m_Xl > m_X2 ? m_Xl : m_X2; >
int GetMaxY () {
return rajri > m_Y2 ? m_Yl : m_Y2 ; >
virtual void Serialize (CArchives ar);
};
Эти функции используются в новой функции GetDocSize, добавляемой в класс документа.
Пока файл ServDemoDoc.cpp открыт, добавьте определение функции GetDocSize в класс документа CServDemoDoc следующим образом.
class CServDemoDoc : public COleServerDoc {
protected:
CTypedPtrArray<CObArray, CLine*> m_LineArray; public:
void AddLine (int XI, int Yl, int X2, int Y2) ; CSize GetDocSize ();
CLine *GetLine (int Index); int GetNumLines ();
Откройте файл ServDemoDoc.cpp и между определениями функций AddLine и GetLine добавьте определение метода GetDocSize.
void CServDemoDoc::AddLine (int XI, int Yl, int X2, int Y2) {
CLine *PLine = new CLine (XI, Yl, X2, Y2); m_LineArray.Add (PLine); SetModifiedFlag (); )
CSize CServDemoDoc::GetDocSize () {
int XMax = 1, YMax = 1; int X, У;
int Index = m_LineArray.GetSize () ; while (Index—) {
X = m_LineArray.GetAt (Index)->GetMaxX (); XMax = X > XMax ? X : Xraax; У = m_LineArray.GetAt (Index)->GetMaxY (); YMax = Y > YMax ? Y : Yroax;
)
return Csize (XMax, YMax); )
CLine *CServDemoDoc::GetLine (int Index) ( . . .
Метод GetDocSize возвращает текущий размер рисунка, определяемый после проверки всех его линий и нахождения максимальных значений координат х и у конечных точек. Для получения текущего размера рисунка функция GetDocSize вызывается функцией CServDemoSrvrltem: : OnDraw.
Измените класс представления, чтобы функция COleServerDoc: : Upda-teAllltems вызывалась при каждом изменении содержимого документа или размера окна представления. Если программа ServDemo редактирует внедренный компонент, то функция UpdateAllitems сообщает библиотекам OLE об изменении содержимого или размера внедренного компонента и заставляет OLE вызвать функцию OnDraw класса CServDemoSrvrltem, повторно создающую метафайл для отображения неактивного внедренного компонента в окне контейнера. При редактировании внедренного компонента в режиме полного открытия каждое его изменение будет сразу появляться в окне контейнера. Если же программа ServDemo выполняется в автономном режиме, то при вызове UpdateAllitems ничего не происходит.
Все изменения размера или содержимого документа сопровождаются вызовом функции OnLButtonUp или OnDraw класса представления; следовательно, в файле ServDemoView.cpp нужно добавить вызов функции UpdateAllitems только в две названные функции. Сначала в функцию OnLButtonUp добавьте вызов
UpdateAllitems.
void CServDemoView::OnLButtonUp(UINT nFlags, CPoint point) (
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
if (m_Draggingl (
m_Dragging = 0; ::ReleaseCapture (); ::ClipCursor (NULL); CClientDC ClientDC (this); ClientDC.SetROP2 (R2_NOT); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (m_Point01d); ClientDC.SetROP2 (R2_COPYPEN); ClientDC.MoveTo (m_PointOrigin); ClientDC.LineTo (point);
CServDemoDoc* PDoc = GetDocument(); PDoc->AddLine
(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y); PDoc->UpdateAllItems (0);
}
CView::OnLButtonUp(nFlags, point);
}
Затем в обработчик OnDraw добавьте ВЫЗОВ функции CServDemoView: : UpdateAllitems.
void CServDemoView::OnDraw(CDC* pDC) {
CServDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: Здесь добавьте код отображения собственных данных
int Index = pDoc->GetNumLines (); while (Index—)
pDoc-> GetLine (Index)->Draw (pDC);
pDoc->UpdateAllIterns (0) ;
}
Теперь добавьте в функцию OnDraw класса CServDemoSrvrltem программы Srvrltem.cpp следующий текст.
BOOL CServDemoSrvrltem::OnDraw(CDC* pDC, CSizes rSize) t
// Удаляется при использовании параметра rSize UN RE FE REN СЕ D_PARAMETER(r S i ze) ;
CServDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100