Вот что я использовал cairosvg :
from cairosvg import svg2png
svg_code = """
"""
svg2png(bytestring=svg_code,write_to='output.png')
И он работает как прелесть!
Подробнее: cairosvg document
Предполагая, что ваш экземпляр CEditControl
является потомком какого-то рода CView
, вы можете сделать это следующим образом:
void CEditControl::OnEnSetfocus()
{
CView *view = static_cast<CView *>(GetParent());
CMFCDoc *doc = static_cast<CMFCDoc *>(view->GetDocument());
doc->shape_onfocus_ = true;
...
}
Это CMFCDoc::OnUpdateTextColor(CCmdUI *pCmdUI)
или CEditControl::OnEnSetfocus()
не вызывается?
Предполагая, что edit-control является потомком класса, CView
полученного, вам лучше поместить обработчик OnUpdateUI()
в класс представления, а не в документ один.
Например, если класс представления CFormView
-приведен (диалоговое окно), вы можете просто написать:
void CMyView::OnUpdateTextColor(CCmdUI *pCmdUI)
{
pCmdUI->Enable(GetFocus()==GetDlgItem(IDC_MYEDIT));
}
Этот фрагмент кода работает как для приложений SDI, так и для MDI.
Если класс представления не получен CFormView
(поле редактирования было создано программно), приведенный выше код можно немного изменить, и вместо вызова GetDlgItem()
вам следует перечислить список детей представления (выполнить поиск по вашему редактированию). Ящик есть).
Если единственной причиной переопределения элемента управления редактирования было получение EN_SET/KILLFOCUS
сообщений, извините, это не стоило усилий, так как вы могли просто захватить их в коде представления. Тогда карта сообщений представления будет содержать:
ON_EN_SETFOCUS(IDC_MYEDIT, &CMyView::OnEnSetfocusMyEdit)
ON_EN_KILLFOCUS(IDC_MYEDIT, &CMyView::OnEnKillfocusMyEdit)
и код класса представления:
void CMyView::OnEnSetfocusMyEdit()
{
// TODO: Add your control notification handler code here
}
void CMyView::OnEnKillfocusMyEdit()
{
// TODO: Add your control notification handler code here
}
Они генерируются мастером. Перейдите на вкладку Class View, выберите свой класс и затем перейдите на страницу Events; в поддереве Controls вы можете найти свой элемент управления и добавить обработчики для его событий. Но все это не нужно, так как вы можете просто использовать GetFocus()/GetDlgItem()
, как предложено выше.
И как говорили другие члены, вы можете получить доступ к классу документа из любого его представления, вызвав функцию GetDocument()
.