Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC обновление окна 
V
    Опции темы
m9yt
Дата 20.9.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Привет всем.
Пишу программу с ипользованием MFC, но есть проблемка. Когда что-то нарисую( например, на клавишу 1 рисуется квадрат, а на 2-круг и т.д.), а потом сверну(разверну) окно, то всё исчезает. Как можно сделать, чтобы ничего не исчезало?
PM MAIL   Вверх
ИванМ
Дата 20.9.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



m9yt, как вариант - сохранять изображения в compatible dc и потом при обновлении окна копировать оттуда.
PM MAIL   Вверх
Artemon
Дата 20.9.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Стандартный вариант - в событии PAINT (не помню точное название), перерисовывать.
В результате прорисовка будет того, когда это реально необходимо


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
m9yt
Дата 20.9.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Цитата(Artemon @ 20.9.2010,  17:06)
Стандартный вариант - в событии PAINT (не помню точное название), перерисовывать.
В результате прорисовка будет того, когда это реально необходимо

Вот мой вариант, не работает
Код

#include <afxwin.h>

class CEmpty: public CWinApp{
public:
    virtual BOOL InitInstance();
};

class CMainWnd: public CFrameWnd{
public:
    CMainWnd();
    ~CMainWnd() { }
    DECLARE_MESSAGE_MAP();
    afx_msg void OnPaint();
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
};

CEmpty CApp;
                        
CMainWnd::CMainWnd(){
    Create(NULL, "MFC", WS_OVERLAPPEDWINDOW, CRect(200, 200, 640, 480));
}


BOOL CEmpty::InitInstance()
{
    CMainWnd *pMainWnd = new CMainWnd;
    ASSERT(pMainWnd);
    m_pMainWnd = pMainWnd;
    pMainWnd->ShowWindow( SW_SHOW );
    pMainWnd->UpdateWindow();
    return TRUE;
}

int R=0;
void CMainWnd::OnPaint(){
 
    CPaintDC *pdc = new CPaintDC(this);
    CBrush brush;
    switch ( R ){
    case 1: 
        brush.CreateSolidBrush(RGB(255, 0, 0));
        pdc->SelectObject(&brush);
        pdc->Rectangle(200, 200, 100, 50);
        pdc->TextOut(100, 20, "Прямоугольник", strlen("Прямоугольник"));
        R=0;
        break;
    case 2: 
        brush.CreateSolidBrush(RGB(255, 255, 0));
        pdc->SelectObject(&brush);
        pdc->Ellipse(200, 200, 100, 50);
        pdc->TextOut(125, 20, "Эллипс", strlen("Эллипс"));
        R=0;
        break;
    case 3: 
        brush.CreateSolidBrush(RGB(0, 255, 0));
        pdc->SelectObject(&brush);
        pdc->Chord(200, 200, 100, 50, 154, 124, 51, 144);
        pdc->TextOut(125, 20, "Сегмент", strlen("Сегмент"));
        R=0;
        break;
    case 4:
        brush.CreateSolidBrush(RGB(0, 255, 255));
        pdc->SelectObject(&brush);
        pdc->Pie(200, 200, 100, 50, 254, 66, 51, 120);
        pdc->TextOut(125, 20, "Сектор", strlen("Сектор"));
        R=0;
        break;
    }
}

void CMainWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    char c=char(nChar);
    switch ( c ){
        case '1':
            R=1;
            break;
        case '2':
            R=2;
            break;
        case '3':
            R=3;
            break;
        case '4':
            R=4;
            break;
    }
    CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
    this->InvalidateRect(0);
}

BEGIN_MESSAGE_MAP( CMainWnd, CFrameWnd)
ON_WM_PAINT()
ON_WM_KEYDOWN()
END_MESSAGE_MAP() 


Это сообщение отредактировал(а) m9yt - 20.9.2010, 17:45
PM MAIL   Вверх
Artemon
Дата 20.9.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



В OnPaint заходит при отладке ?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
m9yt
Дата 20.9.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 27.2.2010

Репутация: нет
Всего: нет



Цитата(Artemon @ 20.9.2010,  18:03)
В OnPaint заходит при отладке ?

Заходит
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.