Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 09:01   #1
sev-dvim
 
Регистрация: 02.06.2010
Сообщений: 6
По умолчанию Visual c++ графика mdi

Добрый день!

Программа с графикой в mdi, рисует при нажатии кнопки столбики. Плз, помогите ошибку найти - изображение не появляется.
Каждый столбец берет информацию о своих координатах из i-го элемента структуры.
Для обмена информацией создан класс MyDialod.

P.S. я конечно понимаю - разбираться в чужом коде... но все же help please
Вложения
Тип файла: rar Rest.rar (4.61 Мб, 12 просмотров)

Последний раз редактировалось sev-dvim; 02.06.2010 в 09:07.
sev-dvim вне форума Ответить с цитированием
Старый 02.06.2010, 12:58   #2
sev-dvim
 
Регистрация: 02.06.2010
Сообщений: 6
По умолчанию

Содержимое файла View.cpp

Код:
#include "stdafx.h"
#include "lab6_idz.h"

#include "MyDialog.h"
#include "lab6_idzDoc.h"
#include "lab6_idzView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

int add;
CString im,f;
// Clab6_idzView

IMPLEMENT_DYNCREATE(Clab6_idzView, CView)

BEGIN_MESSAGE_MAP(Clab6_idzView, CView)
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
    ON_COMMAND(ID_GR, &Clab6_idzView::OnGr)
END_MESSAGE_MAP()

// Clab6_idzView construction/destruction

Clab6_idzView::Clab6_idzView()
{
    // TODO: add construction code here

}

Clab6_idzView::~Clab6_idzView()
{
}

BOOL Clab6_idzView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);
}

// Clab6_idzView drawing

void Clab6_idzView::OnDraw(CDC*pDC)
{
    Clab6_idzDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: add draw code for native data here
        int i;
        pDC->MoveTo(50,60);//смещаем перо, рисуем оси
        pDC->LineTo(50,280);
        pDC->LineTo(700,280);
        
            //if(str[i].x1!=700)//ограничение пределов рисования по оси ox
            //{
                if(add==1)    
                {
                    for (i=0;i<(pDoc->c);i++)
                    {
                    pDC->Rectangle(40+str[i].x1,280-str[i].y1*2.3,40+str[i].x1+10,280);
                    //у1 это вводимое знчение в %, производим пересчет в нормальные координаты
                    }
                }
            //}    
        //pDC->TextOut(560,290,ox);
        CMyDialog MyD; // создаём переменную класса CMyDialog
        im = MyD.pName; //получаем новое значение имени оси
        pDC->TextOut(50,50,im);
        //pDoc->str[i].col= //Cюда нужен диалог с палитрой
        //pDoc->str[i].x1=MyD.m_X+10;// получаем значения ox
        f = "100%";
        pDC->TextOut(10,50,f);

}


// Clab6_idzView printing

BOOL Clab6_idzView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}

void Clab6_idzView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}

void Clab6_idzView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}


// Clab6_idzView diagnostics

#ifdef _DEBUG
void Clab6_idzView::AssertValid() const
{
    CView::AssertValid();
}

void Clab6_idzView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}

Clab6_idzDoc* Clab6_idzView::GetDocument() const // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Clab6_idzDoc)));
    return (Clab6_idzDoc*)m_pDocument;
}
#endif //_DEBUG


// Clab6_idzView message handlers

void Clab6_idzView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class

    Clab6_idzDoc* pDoc = GetDocument(); // получить указатель на документ
    int i=pDoc->c;//инициализируем счетчик
    // обновить элементы данных представления
    // соответствующими значениями документа.
    str[i].x1 = pDoc->str[i].x1;
    str[i].y1 = pDoc->str[i].y1;
}

void Clab6_idzView::OnGr()
{
    // TODO: Add your command handler code here    
    add=1;//говорим, что щелкнули по кнопке, те добавили новый столбец
    Clab6_idzDoc* pDoc = GetDocument(); // получаем указатель на документ
    CMyDialog MyD; // создаём переменную класса CMyDialog
    int i=pDoc->c;//инициализируем переменную счетчик, иначе номер эл. структ.
    if(MyD.DoModal()==IDOK)// создаём новый диалог
    {            
        //pDoc->y1 = MyD.m_h; // получаем значения
        //pDoc->x1 = MyD.m_X+10; // получаем новые значения        
        pDoc->str[i].y1=MyD.m_h; //получаем новое значение высоты прямоугольника
        pDoc->str[i].x1=str[i-1].x1+10;// получаем значения ox
        //pDoc->str[i].col= //Cюда нужен диалог с палитрой
        //pDoc->str[i].x1=MyD.m_X+10;// получаем значения ox
    }
    OnInitialUpdate(); 
    Invalidate( TRUE ); // перерисовываем экран( вызов OnDraw() )
    pDoc->SetModifiedFlag(); // ставим флаг изменения документа
}

Последний раз редактировалось sev-dvim; 02.06.2010 в 13:01.
sev-dvim вне форума Ответить с цитированием
Старый 02.06.2010, 23:41   #3
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию

По моему
1. Сделай CMyDialog MyD; глобальной, тогда появляется название оси ох
2. в void Clab6_idzView::OnDraw(CDC*pDC)
если код делаешь таким, то появляется столбик (надо тут покопаться)
Код:
                    for (i=0;i<100000/*(pDoc->c)*/;i++)
                    {
                    pDC->Rectangle(40+str[i].x1,280-str[i].y1*2.3,40+str[i].x1+10,280);
                    //у1 это вводимое знчение в %, производим пересчет в нормальные координаты
                    }
Ytpyfqrf вне форума Ответить с цитированием
Старый 03.06.2010, 00:51   #4
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию

Вот файл lab6_idzView.cpp
(вроде что то выводим, дальше сам покопайся)
Код:

#include "stdafx.h"
#include "lab6_idz.h"

#include "MyDialog.h"
#include "lab6_idzDoc.h"
#include "lab6_idzView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

int add;
CString im,f;
// Clab6_idzView
CMyDialog MyD;

IMPLEMENT_DYNCREATE(Clab6_idzView, CView)

BEGIN_MESSAGE_MAP(Clab6_idzView, CView)
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
    ON_COMMAND(ID_GR, &Clab6_idzView::OnGr)
END_MESSAGE_MAP()

// Clab6_idzView construction/destruction

Clab6_idzView::Clab6_idzView()
{
    // TODO: add construction code here

}

Clab6_idzView::~Clab6_idzView()
{
}

BOOL Clab6_idzView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);
}

// Clab6_idzView drawing

void Clab6_idzView::OnDraw(CDC*pDC)
{
	CBrush hb(RGB(MyD.m_R,MyD.m_G,MyD.m_B)); 
	CBrush *pBrush = pDC->SelectObject(&hb);
	
    Clab6_idzDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: add draw code for native data here
        int i;
        pDC->MoveTo(50,60);//смещаем перо, рисуем оси
        pDC->LineTo(50,280);
        pDC->LineTo(700,280);
        
            //if(str[i].x1!=700)//ограничение пределов рисования по оси ox
            //{
                if(add==1)    
                {
                    for (i=0;i<100000/*(pDoc->c)*/;i++) 
                    {
                    //pDC->Rectangle(40+str[i].x1,280-str[i].y1*2.3,40+str[i].x1+10,280);
                    pDC->FillRect(CRect(40+str[i].x1,280-str[i].y1*2.3,40+str[i].x1+10,280), pDC->SelectObject(pBrush));
                    //у1 это вводимое знчение в %, производим пересчет в нормальные координаты
                    }
                }
            //}    
        //pDC->TextOut(560,290,ox);
        //CMyDialog MyD; // создаём переменную класса CMyDialog
        im = MyD.pName; //получаем новое значение имени оси
        pDC->TextOut(50,50,im);
        //pDoc->str[i].col= //Cюда нужен диалог с палитрой
        //pDoc->str[i].x1=MyD.m_X+10;// получаем значения ox
        f = "100%";
        pDC->TextOut(10,50,f);

}


// Clab6_idzView printing

BOOL Clab6_idzView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}

void Clab6_idzView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}

void Clab6_idzView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}


// Clab6_idzView diagnostics

#ifdef _DEBUG
void Clab6_idzView::AssertValid() const
{
    CView::AssertValid();
}

void Clab6_idzView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}

Clab6_idzDoc* Clab6_idzView::GetDocument() const // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Clab6_idzDoc)));
    return (Clab6_idzDoc*)m_pDocument;
}
#endif //_DEBUG


// Clab6_idzView message handlers

void Clab6_idzView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class

    Clab6_idzDoc* pDoc = GetDocument(); // получить указатель на документ
    int i=pDoc->c;//инициализируем счетчик
    // обновить элементы данных представления
    // соответствующими значениями документа.
    str[i].x1 = pDoc->str[i].x1;
    str[i].y1 = pDoc->str[i].y1;
}

void Clab6_idzView::OnGr()
{
    // TODO: Add your command handler code here    
    add=1;//говорим, что щелкнули по кнопке, те добавили новый столбец
    Clab6_idzDoc* pDoc = GetDocument(); // получаем указатель на документ
    //CMyDialog MyD; // создаём переменную класса CMyDialog
    int i=pDoc->c;//инициализируем переменную счетчик, иначе номер эл. структ.
    if(MyD.DoModal()==IDOK)// создаём новый диалог
    {            
        //pDoc->y1 = MyD.m_h; // получаем значения
        //pDoc->x1 = MyD.m_X+10; // получаем новые значения        
        pDoc->str[i].y1=MyD.m_h; //получаем новое значение высоты прямоугольника
        pDoc->str[i].x1=str[i-1].x1+10;// получаем значения ox
        //pDoc->str[i].col= //Cюда нужен диалог с палитрой
        //pDoc->str[i].x1=MyD.m_X+10;// получаем значения ox
    }
    OnInitialUpdate(); 
    Invalidate( TRUE ); // перерисовываем экран( вызов OnDraw() )
    pDoc->SetModifiedFlag(); // ставим флаг изменения документа

}

Последний раз редактировалось Ytpyfqrf; 03.06.2010 в 00:55.
Ytpyfqrf вне форума Ответить с цитированием
Старый 03.06.2010, 03:54   #5
sev-dvim
 
Регистрация: 02.06.2010
Сообщений: 6
По умолчанию

Спасибо! Выложу что получится.
sev-dvim вне форума Ответить с цитированием
Старый 11.06.2010, 07:33   #6
sev-dvim
 
Регистрация: 02.06.2010
Сообщений: 6
По умолчанию

Годная программа
Вложения
Тип файла: rar 2Rest .rar (7.96 Мб, 13 просмотров)
sev-dvim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D графика в Visual Basic 6.0 G0NZIK Помощь студентам 3 07.04.2010 18:19
Графика в Visual C++ DcompleX Помощь студентам 3 01.03.2010 09:51
Передача параметра с MDI родителя в MDI child через DLL ByXalkin Общие вопросы Delphi 0 15.12.2009 17:21
Графика на Visual C++ Лайка Visual C++ 4 04.05.2008 09:42