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

 

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

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

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 44 45 46 47 48 49 < 50 > 51 52 53 54 55 56 .. 173 >> Следующая

#endif
// !defined(
// AFX_TEXTDEMOVIEW_H_3E12628D_A392_11D1_80FC_OOCOF6A83B7F_INCLUDEDJ
Листинг 18.8.
// TextDemoView.срр : реализация класса CTextDemoView //
#include "stdafx.h" #include "TextDemo.h"
#include "TextDemoDoc.h" #include "TextDemoView.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = _FILE_;
#endif
111111111111111111111111111111111111111II111111111111111111111111111111 II Класс CTextDemoView
IMPLEMENT_DYNCREATE(CTextDemoView, CScrollView)
BEGIN_MESSAGE_MAP(CTextDemoView, CScrollView)
//({AFX_MSG_MAP(CTextDemoView)
ON_WM_KE YDOWN()
//)}AFX_MSG_MAP END MESSAGE MAP()
11111111111111111111111111111111111111111111111111111111111111
II Конструктор/деструктор класса CTextDemoView CTextDemoView::CTextDemoView()
// TODO: Здесь добавьте код конструктора
CTextDemoView::-CTextDemoView()
{
)
BOOL CTextDemoView::PreCreateWindow(CREATESTRUCT& cs) {
// TODO: Здесь модифицируйте класс окна или стиль окна, II изменяя поля структуры CS
return CScrollView::PreCreateWindow(cs);
11111111111111111111111111111111111111111111111111111111111111, II Отображение окна класса CTextDemoView
void CTextDemoView::OnDraw(CDC* pDC) <
CTextDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: Здесь добавьте код отображения собственных данных
// возврат, если шрифт еще не был создан: if (pDoc->m_Font.m_hObject == NULL) return;
RECT ClipRect; int LineHeight; TEXTMETRIC TM; int Y = MARGIN;
// выберите шрифт в объект контекста устройства: pDC->3elect0bject (&pDoc->m_Font) ;
// получите метрику текста: pDC->GetTextMetrics (&ТМ);
LineHeight = TM.tmHeight + TM.tmExternalLeading;
// установите атрибуты текста: pDC->SetTextColor (pDoc->m_Color); pDC->SetBkMode (TRANSPARENT);
// получите координаты области, ставшей недействительной:
pDC->GetClipBox (SClipRect);
// отобразите строку заголовка: pDC->TextOut (MARGIN, Y, "FONT PROPERTIES") ;
// отобразите строку текста:
for (int Line = 0; Line < NUMLINES; ++Line)
{
Y += LineHeight;
if (Y + LineHeight >= ClipRect.top && Y <= ClipRect.bottom) pDC->TextOut (MARGIN, Y, pDoc->m_LineTable [Line]);
}
1111111111111111111111 //III I III 11II11111111111II111111111111 III II1111 /1 II Диагностика класса CTextDemoView
#ifdef _DEBUG
void CTextDemoView::AssertValid() const {
CScrollView::AssertValid() ;
)
void CTextDemoView::Dump(CDumpContext& dc) const {
CScrollView::Dump(dc);
}
CTextDemoDoc* CTextDemoView::GetDocument() // неотладочная версия
// является встроенной
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLAS S(CTextDemoDoc))); return (CTextDemoDoc*)mjoDocument;
}
#endif //_DEBUG
11111111111111111111111111111111111111111111111111111111111111111111111 11 обработчики сообщений класса CTextDemoView
void CTextDemoView: -.OnUpdate (CView* pSender, LPARAM lHint, CObject* pHint) {
// TODO: Здесь добавьте собственный код обработчика // и/или вызов базового класса
CTextDemoDoc* PDoc = GetDocument();
if (PDoc->m_Font.m_hObject == NULL) // шрифт еще не создан
SetScrollSizes (ММ_ТЕХТ, CSize (0,0)); else // шрифт создан
{
CClientDC ClientDC (this); int LineWidth = 0;
SIZE Size; TEXTMETRIC TM;
ClientDC.SelectObject (&PDoc->m_Font); ClientDC.GetTextMetrics (STM);
for (int Line = 0; Line < NUMLINES; ++Line) (
Size = ClientDC.GetTextExtent
(PDoc->m_LineTable [Line],
PDoc->m_LineTable [Line].GetLength ()); if (Size.cx > LineWidth)
LineWidth = Size.cx;
Size.cx = LineWidth + MARGIN;
Size.cy = (TM.tmHeight + TM.tmExternalLeading) * (NUMLINES + 1) + MARGIN;
SetScrollSizes (MM_TEXT, Size); ScrollToPosition (CPoint (0, 0)); }
CScrollView::OnUpdate (pSender, lHint, pHint);
void CTextDemoView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
// TODO: Здесь добавьте собственный код обработчика // и/или вызов стандартного обработчика
CSize DocSize = GetTotalSize (); RECT ClientRect; GetClientRect (SClientRect);
switch (nChar)
case VK_LEFT:
if (ClientRect SendMessage break;
// стрелка влево right < DocSize.cx) (WM_HSCROLL, SB_LINELEFT);
case VK_RIGHT:
if (ClientRect SendMessage break;
// стрелка вправо
right < DocSize.cx)
(WM HSCROLL, SB_LINERIGHT);
case VK_UP:
if (ClientRect SendMessage break;
// стрелка вверх bottom < DocSize.су) (WM_VSCROLL, SB LINEUP);
case VK_DOWN: // стрелка вниз
if (ClientRect.bottom < DocSize.cy)
SendMessage (WM_VSCROLL. SB_LINEDOWN); break;
case VK_HOME: // клавиша Home
if (::GetKeyState (VK_CONTROL) & 0x8000) // нажата клавиша Ctrl {
if (ClientRect.bottom < DocSize.cy) SendMessage (WM_VSCROLL, SB_T0P);
)
else // только клавиша Home
{
if (ClientRect.right < DocSize.cx)
SendMessage (WM_HSCROLL, SB_LEFT);
}
break;
case VK_END: // клавиша End
if (::GetKeyState (VK_C0NTR0L) & 0x8000) // нажата клавиша Ctrl {
if (ClientRect.bottom < DocSize.cy)
SendMessage (WM_VSCROLL, SB_BOTTOM);
}
else // только клавиша End
if (ClientRect.right < DocSize.cx)
SendMessage (WM_HSCROLL, SB_RIGHT);
Предыдущая << 1 .. 44 45 46 47 48 49 < 50 > 51 52 53 54 55 56 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100