| Цитата(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()
|
|