VS 2008 MFC Feature Pack - Как мне
У меня есть приложение, которое я пишу, используя пакет функций MFC. Он использует Document/View. Поскольку эти классы являются производными от "обычных" классов MFC, эти вопросы могут не зависеть от Feature Pack.
Когда изменение сделано, я добавляю звездочку *
на имя на вкладке, и слово (modified)
в заголовок главного окна, используя следующий код:
tabval = "Report_" + pDoc->rptData.reportId.Strip();
winval = tabval;
if (changed) {
tabval += " *";
winval += " (modified)";
}
frame->SetTitle(tabval);
frame->SetWindowText(tabval);
name = mainFrame->GetTitle();
mainFrame->SetWindowText(name + " - " + winval);
Но при переключении между вкладками исходный текст возвращается. Первый вопрос: как я могу сделать изменение липким?
Второй вопрос: слева вид дерева и справа окно свойств. Переключение между ними (не) выделяет заголовки, чтобы показать, какой из них активен. Пользователь также может активировать и взаимодействовать с окном документа, но, похоже, нет никакого способа дать визуальную обратную связь о том, что окно документа, по сути, активно. Как я могу это сделать?
2 ответа
Непонятно, какие у тебя типы переменных, но как у тебя pDoc
а также frame
Я полагаю, что бывший ваш CDocument
производный класс, и последний, возможно, является CFrameWnd
или же CMDIFrameWnd
производный класс.
Если я не ошибаюсь, то причина, по которой заголовки вкладок не прилипают, заключается в том, что вы должны звонить SetTitle
на CDocument
это позади каждого представления с вкладками, так что-то вроде
tabval = "Report_" + pDoc->rptData.reportId.Strip();
winval = tabval;
if (changed) {
tabval += " *";
winval += " (modified)";
}
pDoc->SetTitle(tabval); // set tab title on CDocument
У меня была похожая проблема в прошлом. Причиной возврата текста заголовка главного окна является функция CFrameWndEx:: OnUpdateFrameTitle. Поскольку он является виртуальным, вы можете переопределить его в своем производном классе, чтобы получить желаемое поведение. Это решение, которое сработало для меня.