CClientDC и DC не рисуют на ChtmlEditCtrl

Привет всем, я работаю с CHtmlEditCtrl в MFC. Я хочу нарисовать несколько случайных прямоугольников и линий внутри функции, обрабатывающей событие правого клика.

Элемент управления ChtmlEditCtrl создается из статического кода с использованием этого фрагмента:

bool CHtmlEditCtrlEx::CreateFromStatic( UINT nID, CWnd* pParent ) {
CStatic wndStatic;
if ( !wndStatic.SubclassDlgItem(nID, pParent)) {
return false;
}
CRect rc;
wndStatic.GetWindowRect( &rc );
pParent->ScreenToClient( &rc );
if (Create( 0, (WS_CHILD | WS_VISIBLE), rc, pParent, nID, 0 )) {
...
}

Затем я перезаписываю функцию CWnd :: pretranslate () следующим образом:

  CClientDC dcc(this);
switch (pMsg->message) {

case WM_RBUTTONUP:  // Right-click
// Just some dummy values
DrawSquigly(dcc, 600, 240, 20);
break;

}

функция DrawSquigly () определяется следующим образом:

void CHtmlEditCtrlEx::DrawSquigly(CDC &dcc, int iLeftX, int iWidth, int iY)
{
CAMTrace trace;
trace.Trace("Drawing Squiggly");
//dcc.TextOut(10, 10, CString(_T("I used a client DC!")));

CPen * oldPen;
CBrush * oldBrush;
oldPen = (CPen *) dc.SelectStockObject(WHITE_PEN);
dcc.MoveTo(5,10);
dcc.LineTo(80, 10);
dcc.SelectObject(oldPen);

//GDI 002_2: Create custom pen with different Line thickness.
CPen thick_pen(PS_SOLID, 3, RGB(0,255,0));
oldPen = dc.SelectObject(&thick_pen);
dcc.MoveTo(5, 20);
dcc.LineTo(80,20);
dcc.SelectObject(oldPen);

//GDI 002_3: Create a Rectangle now
dcc.Draw3dRect(5,30,80,70, RGB(25,25,255), RGB(120,120,120));

//GDI 002_4: Create a Brush that we can use for filling the
// closed surfaces
CBrush brush(RGB(255,0,255));
oldBrush = dc.SelectObject(&brush);
dcc.Rectangle(5,110,80,140);
dcc.SelectObject(oldBrush);

//GDI 002_5: Hatch Brush is useful to apply a pattern in stead
//of solid fill color
CBrush* hatBrush = new CBrush();
hatBrush->CreateHatchBrush(HS_CROSS, RGB(255,0,255));
oldBrush = dc.SelectObject(hatBrush);
dcc.FillRect(new CRect(5,160,80,190), hatBrush);
dcc.SelectObject(oldBrush);
}

но при щелчке правой кнопкой мыши рисунок не происходит. Я думаю, что мне чего-то не хватает, особенно потому, что я новичок в MFC.

Я добавил след в верхнюю часть обработчика событий, чтобы быть уверенным, что функция вызывается и она есть.

Может кто-нибудь, пожалуйста, укажите мне правильное направление?

0

Решение

На самом деле в вашем коде 2 контекста устройства: один вы передаете в качестве параметра при вызове (мы не знаем, откуда он), а другой создается локально в функции рисования.

Обычно, когда система дает вам DC, она ожидает, что вы что-то в ней тянете, а не что-то другое.

Если окно, над которым вы работаете, является многоуровневым, система предоставляет вам контекст памяти, в котором вы рисуете, — после очистки — помещается в само окно с некоторым эффектом менеджера окон.

Я подозреваю, что при выделении второго постоянного тока ваш рисунок перезаписывается, когда первый (вы оставили пустым) очищается по возвращении из обработчика сообщений.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]