MFC Edit управляющее сообщение дескриптор доступа к объекту Document

Вот что я использовал cairosvg :

from cairosvg import svg2png

svg_code = """
    
        
        
        
    
"""

svg2png(bytestring=svg_code,write_to='output.png')

И он работает как прелесть!

Подробнее: cairosvg document

1
задан Evan.zz 11 March 2019 в 20:16
поделиться

3 ответа

Предполагая, что ваш экземпляр CEditControl является потомком какого-то рода CView, вы можете сделать это следующим образом:

void CEditControl::OnEnSetfocus()
{
    CView *view = static_cast<CView *>(GetParent());
    CMFCDoc *doc = static_cast<CMFCDoc *>(view->GetDocument());
    doc->shape_onfocus_ = true;
    ...
}
0
ответ дан Sid S 11 March 2019 в 20:16
поделиться

Это CMFCDoc::OnUpdateTextColor(CCmdUI *pCmdUI)

или CEditControl::OnEnSetfocus() не вызывается?

0
ответ дан Staytuned123 11 March 2019 в 20:16
поделиться

Предполагая, что 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().

0
ответ дан Constantine Georgiou 11 March 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: