Member 14726454 Ответов: 1

Значки принтера - это диалоговое окно печати


Привет,

Я использую C++ и простые вызовы Winapi для отображения диалогового окна печати, и это работает нормально. Однако диалоговое окно, которое я получаю, показывает старые значки принтера по сравнению с аналогичными диалогами печати, созданными другим программным обеспечением. Интересно, почему?

Есть ли у кого-нибудь идея, как отобразить новые значки принтера, как это делает MS Paint dialog или аналогичное программное обеспечение.

Большое спасибо.

Примечание: Я попытался поместить снимки экрана диалоговых окон, но не смог найти, как это сделать. Без снимков экрана вопрос может быть трудно описать/понять. извиняюсь...

Что я уже пробовал:

Вот как я отображаю диалоговое окно печати в своем приложении:
// Initialize the PRINTDLGEX structure
PRINTDLGEX  PrnDlgEx ;

PrnDlgEx.lStructSize = sizeof (PRINTDLGEX) ;
PrnDlgEx.hwndOwner = hwnd ;
PrnDlgEx.hDevMode  = NULL ;
PrnDlgEx.hDevNames = NULL ;
PrnDlgEx.hDC = NULL ;
PrnDlgEx.Flags = PD_HIDEPRINTTOFILE | PD_NOCURRENTPAGE | PD_NOPAGENUMS |
                 PD_NOSELECTION | PD_USEDEVMODECOPIESANDCOLLATE ;
PrnDlgEx.Flags2 = 0 ;
PrnDlgEx.ExclusionFlags = 0 ;
PrnDlgEx.nPageRanges = 0 ;
PrnDlgEx.nMaxPageRanges = 0 ;
PrnDlgEx.lpPageRanges = nullptr ;
PrnDlgEx.nMinPage = 1 ;
PrnDlgEx.nMaxPage = 0xFFFF ;
PrnDlgEx.nCopies  = 1 ;
PrnDlgEx.hInstance = NULL ;
PrnDlgEx.lpPrintTemplateName = NULL ;
PrnDlgEx.lpCallback = NULL ;
PrnDlgEx.nPropertyPages = 0 ;
PrnDlgEx.lphPropertyPages = NULL ;
PrnDlgEx.nStartPage = START_PAGE_GENERAL ;
PrnDlgEx.dwResultAction = 0 ;

HRESULT Result = PrintDlgEx (&PrnDlgEx) ;

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вам нужно сообщить системе, чтобы она включила использование современного визуального стиля, см. Включение визуальных стилей - Win32 apps | Microsoft Docs[^].


Member 14726454

Я действительно включаю визуальный стиль в соответствии с MS Docs следующим кодом:

#pragma comment(lib,"comctl32.lib")
#pragma comment(компоновщик,"\"/manifestdependency:type='win32' \
имя='Microsoft.Окна.Common-Controls' version='6.0.0.0' \
параметр processorarchitecture='*' значения PublicKeyToken='6595b64144ccf1df языка='*'\"")

Отображаемые значки в диалоговом окне печати не зависят от визуального стиля...

Richard MacCutchan

Извините, но это единственный способ, которым я изменил какие-либо визуальные эффекты. Но я не имею ни малейшего представления о том, на какие иконы вы жалуетесь. Без некоторых изображений трудно догадаться, что вы видите.

Member 14726454

Пожалуйста, проверьте приведенную ниже ссылку. Я разместил там один и тот же вопрос со снимками экрана для моего диалоговое окно "печать" и МС краска диалоговом окне "печать".
Значки принтеров в списке принтеров выглядят по-другому.
https://stackoverflow.com/questions/62849202/printer-icons-in-print-dialog-box

Richard MacCutchan

По-моему, они все в порядке. В чем же проблема?

Member 14726454

Значки принтеров, показанные в пакетах MS, выглядят по-другому. Тот, который я получаю в своем диалоге печати, кажется старым. Я нашел те же значки в MS Notepad, MS VC и MS Paint...и т. д. Интересно, есть ли новая версия common control Print dialog, похожая на новый диалог открытия и сохранения Как, который вы получаете с FileDialog.Метод cocreateinstance ().

Richard MacCutchan

Я проверил, и я получаю те же самые для пакетов MS и моих собственных приложений. Я никогда по-настоящему не смотрел на них раньше, но подозреваю, что значки устанавливаются драйверами принтера или диалог использует значки по умолчанию из системы.