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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2009, 11:06   #1
(*_*)
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 30
По умолчанию Рисование на форме.

Необходимо написать программу в которой при нажатии на кнопку "R" рисуется квадрат, а при нажатии на кнопку "C" - круг. Вроде бы сделал, однако столкнулся с проблемой: при нажатии, фигуры появляются не сразу, а только после того как изменишь размер формы или свернешь и развернёшь окно. Никак не могу понять в чем тут дело. Подскажите пожалуйста.

Код:
#include <afxwin.h>

class CMyMainWnd : public CFrameWnd      
{
public:
	CMyMainWnd ()                         // Конструктор  
	{
		Create (NULL,L"");               
	}
	DECLARE_MESSAGE_MAP()                              
	afx_msg void OnPaint();                                        
	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
};

//-------------------------------------------------------------------------

class CMyApp : public CWinApp                    
{
public:
	virtual BOOL InitInstance ()                    
	{
		m_pMainWnd=new CMyMainWnd();                  
		m_pMainWnd->ShowWindow(SW_SHOW);      
		return TRUE;
	}
};

int key = 0;
CMyApp theApp;                                          

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

//-------------------------------------------------------------------------

void CMyMainWnd::OnPaint()
{
   CPaintDC *pDC = new CPaintDC (this);                                     
   CBrush brush;

   if (key == 0x52)
   {
    brush.CreateSolidBrush (RGB (173,43,211));
	pDC->SelectObject (&brush);
	pDC->Rectangle (5,5,50,50);                                                      
	brush.DeleteObject();
   }

 if (key == 67)
   {
	brush.CreateSolidBrush (RGB (173,43,211));
           pDC->SelectObject (&brush);
	pDC->Ellipse (60,5,110,50);      
	brush.DeleteObject();
   }
}

//-------------------------------------------------------------------------

void CMyMainWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
key = nChar;
SendMessage (WM_PAINT,0,0);
}
(*_*) вне форума Ответить с цитированием
Старый 22.09.2009, 13:06   #2
(*_*)
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 30
По умолчанию

Всё, разобрался. Надо было всего то использовать функцию:
void Invalidate( BOOL bErase = TRUE )
вместо:
SendMessage (WM_PAINT,0,0)
(*_*) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование на форме. Движение точки. JDRaveN Общие вопросы Delphi 9 15.06.2009 18:03
Рисование на чужой форме Gr@nd Общие вопросы Delphi 2 28.05.2009 08:39
рисование на форме Kostua Помощь студентам 2 26.07.2008 16:24
Рисование на форме созданной на WinApi N!ckeL Win Api 3 30.04.2008 19:02
Рисование на форме niva622 Помощь студентам 4 18.01.2007 09:34