Предварительный просмтор

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Хотелось бы побольше узнать о предварительном просмотре. В
русской программе он смотрится инородным телом на своем
иностранном языке. Можно ли его как-то настраивать под себя?
В этой же связи: не могу решить проблему.
В программе 3 меню и, соответственно, 3 панели инструментов,
которые создал в Create. Переключая меню, вызываю ShowControlBar -
прячу ненужные панели и показываю необходимую. Но после вызова
PRINT PREVIEW, в окне появляются сразу все 3 панели инструментов.
Попутно: что означает AFX_IDS_PREVIEW_CLOSE в String Table?
 
G

Guest

#2
1. Все языко-зависимые компоненты для печати и предварительного
просмотра (панель инструментов, диалог и строки) в соответствии
с идеологией MFC оформлены как ресурсы. Эти ресурсы лежат в
файле MFC42.DLL, но программа будет искать их там только если
они отсутствуют в головной программе. Если же программа
статически линкуется с MFC, ресурсы для печати/предварительного
просмотра берутся из файла afxprint.rc. Чтобы в этом всём
убедиться, достаточно открыть rc-файл, сгенерённым визардом, и
найти там строчки:
Код:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
...
#include "afxprint.rc" // printing/print preview resources
#endif
Теперь понятно, как поправить ситуацию.
- Копируем ресурсы из файла afxprint.rc (без окантовочных
директив, то есть от строчки "// Printing Resources") в файл
ресурсов нашей программы. При этом нужно проследить, чтобы
новые ресурсы попали между директивами #ifdef APPSTUDIO_INVOKED
и соответствующего #endif (иначе новые ресурсы нельзя будет
изменить в редакторе).
- Убираем из файла ресурсов строчку #include "afxprint.rc"
(вручную или через View->Resource includes). На самом деле, это
необходимо сделать только при статической линковке с MFC, так
как при динамической линковке эта строчка не используется (как
я уже говорил, в этом случае ресурсы берутся из MFC42.DLL).
- Затем запускаем редактор ресурсов Visual Studio и
русифицируем новые ресурсы. Не забудьте предварительно
установить для каждого ресурса в свойствах Language:Russian,
иначе вместо русского языка получите иероглифы!
- Пересобираем проект и убеждаемся, что теперь предварительный
просмотр говорит по-русски.

2. После выхода из Print Preview запускается функция
CView::OnEndPrintPreview (файл viewcore.cpp). Из неё вызывается
ещё одна функция - CFrameWnd::OnSetPreviewMode (файл
winfrm.cpp). Просмотрев код этой функции, нетрудно убедиться,
что она делает видимыми все стандартные панели с
идентификаторами от AFX_IDW_CONTROLBAR_FIRST до
AFX_IDW_CONTROLBAR_FIRST+31 включительно. Таким образом, чтобы
MFC не вмешивалась в вашу работу с панелями инструментов, нужно
назначить им идентификаторы за пределами этого диапазона
(например, AFX_IDW_CONTROLBAR_LAST-N, где N=0,1,2,...):
m_wndToolBar.CreateEx(..., AFX_IDW_CONTROLBAR_LAST);

3. Что касается строки AFX_IDS_PREVIEW_CLOSE, она просто
содержит подсказку для команды Close предварительного
просмотра. Если вам интересно, где она появляется, запустите
режим предварительного просмотра, а затем наведите курсор на
пункт Close из системного меню программы (которое раскрывается
по щелчку на иконке в левом верхнем углу главного окна). При
этом текст подсказки о закрытии предварительного просмотра
появится в строке состояния. Можете заменить его на любой
другой (на русском языке).
 
Статус
Закрыто для дальнейших ответов.