2012-07-05 2 views

ответ

1

Попробуйте создать собственный владелец CStatic, нарисованный на основе управления для отображения растрового изображения. Когда вы получите запрос DrawItem, загрузите исходное растровое изображение в совместимый DC. Затем вы можете нарисовать на DC свои модификации и, когда закончите BitBlt DC, на фактический экран DC, указанный в информации DRAWITEMSTRUCT.

Шаг за шагом.

  1. Создать новый элемент управления MFC, основанный на CStatic называется CMyPic

  2. Поместите контроль изображения на вашем диалоге (в качестве держателя место для вашего контроля)

  3. Изменить название управления снимками от IDC_STATIC до IDC_MYPIC

  4. изменить тип элемента управления из «кадр» до «Владелец» дро

  5. Щелкните правой кнопкой мыши элемент управления и «Добавить переменную». Сделайте это управляющей переменной, называемой m_mypic, и измените тип переменной на CMyPic.

  6. В CMyPic добавить переопределение для DrawItem

  7. В DrawItem вы можете нарисовать свой точечный рисунок (в моем случае, я рисую PNG и накладывая текст) что-то вроде этого:

    void CMyPic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){ 
    
        CPngImage img; 
        img.Load(IDB_PNG1); 
    
        CDC dcScreen; 
        dcScreen.Attach(lpDrawItemStruct->hDC); 
    
        CDC dcMem; 
        dcMem.CreateCompatibleDC(&dcScreen); 
        CBitmap * pold = (CBitmap*)dcMem.SelectObject(img); 
    
        dcMem.DrawText(L"Hi", &lpDrawItemStruct->rcItem, NULL); 
    
        dcScreen.BitBlt(0, 0, lpDrawItemStruct->rcItem.right, lpDrawItemStruct->rcItem.bottom, &dcMem, 0, 0, SRCCOPY); 
    
        dcMem.SelectObject(pold); 
        dcScreen.Detach(); 
    } 
    
+0

спасибо за ответ @snowdude. Я думаю, что это немного сложно для меня, поскольку я новичок в мире MFC. В любом случае я попробую. – gishara

+1

Звучит сложно, если вы новичок в MFC, но это не так сложно. Возьмите его поэтапно. 1. Создайте MFC-управление на основе CStatic. 2. Добавьте это в свою форму. 3. Установите его как «Собственник». 4. Переопределите метод DrawItem. 5. Проверьте, что ваш DrawItem вызывается с помощью отладчика. 6. Попробуйте рисовать растровое изображение в DrawItem. Если вы доберетесь до этого, вы в основном это сделали. – snowdude

+0

Большое спасибо snowdude.I дам ему попробовать. – gishara

0

Возможно, но я бы сильно препятствовать выполнению этого непосредственно.

Как правило, диалоговое окно должно только действовать как контейнер для элементов управления.

Как таковое, вы, вероятно, захотите, это своего рода многоуровневое управление рисованием, которое может отображать растровое изображение в качестве фона и других объектов (точек, возможно линий, кривых и т. Д.) Перед этим. Написание элемента управления ActiveX в MFC для выполнения этих границ на тривиальном уровне. Это мало сложнее использовать ATL, но не много - и результат будет почти неизбежно «лучше» с точки зрения того, чтобы быть меньше и (возможно) быстрее.

+0

Спасибо Джерри Коффин. Не могли бы вы привести мне пример? Я использую CPropert page im MFC. – gishara

+0

@gishu: Я не уверен, что вы просите. Похоже, вы просите меня написать образец контроля для вас, но я не могу себе представить, что вы спрашиваете. –

+0

Мне жаль, это было не то, что я просил. Я совершенно не знаком с элементами управления activex, поэтому поэтому попросил вас предложить несколько примеров, где они были использованы. Благодарю. – gishara

Смежные вопросы