Давиче я задавал вопрос, почему взятый из ресурса битмап не ПЕЧАТАЛСЯ на принтере, при чем просмотр перед печатью работал отличною Теперь намного философии:
1. У меня был код, который в режиме SetMapMode(MM_TWIPS) отлично печатал и показывал данный битмап, но ТОЛЬКО на 1 компьютере!!!!!!!!!!!!.
2. На других ПК (в том числе и на полностью аналогичном) программа в упор не хотела печатать битмап.
3. В конечном счете я изменил только 1 строку: "srcDC.CreateCompatibleDC(NULL);" где вместо реального CDC поставил NULL — и, о радость, все заработало!!!! НО!!!!!!!!!!! возник вопрос: а почему на самом первом ПК где было "srcDC.CreateCompatibleDC(pDC);" (т.е. конкретный данный нам CDC)все прекрасно печаталось??? Для меня это так и осталось заадкой.
4. Все теперь работает, все печатается, НО!!! только на настоящие принтеры (локальные или сетевые), а вот на принтеры отображенные в файл (у меня например куча PS принтеров) и на тот же виртуальный принтер "Adob PDF" функция StretchBlt выдает FALSE, да что там она, даже BitBlt тоже самое выдает.
Уменя только один вопрос П О Ч Е М У ???? п.3 и п.4.
Спасибо за ранее за то, что подумали над этими засадами.
Вячеслав.
Re: StretchBlt всем будет интересно поломать голову...
Здравствуйте, Lebets_VI, Вы писали: L_V>3. В конечном счете я изменил только 1 строку: "srcDC.CreateCompatibleDC(NULL);" где вместо реального CDC поставил NULL — и, о радость, все заработало!!!! НО!!!!!!!!!!! возник вопрос: а почему на самом первом ПК где было "srcDC.CreateCompatibleDC(pDC);" (т.е. конкретный данный нам CDC)все прекрасно печаталось??? Для меня это так и осталось заадкой.
Вообще, в CreateCompatibleDC нужно поставить DC принтера. Если стоит NULL, то использется DC экрана. Наверно, если параметры экранного DC и принтерного совпадают (глубина цвета, например), то все ок. Если не совпадают, то не работает...
Имею скафандр — готов путешествовать!
Re[2]: StretchBlt всем будет интересно поломать голову...
Здравствуйте, rus blood, Вы писали:
RB>Вообще, в CreateCompatibleDC нужно поставить DC принтера. Если стоит NULL, то использется DC экрана. Наверно, если параметры экранного DC и принтерного совпадают (глубина цвета, например), то все ок. Если не совпадают, то не работает...
Кстати, может и так, т.к. на том ПК, где все работало с параметром DC принтера, глубина цвета экрана была 24, а на остальных проверочных, 32, 16, и т.д..
но вот, почему не печатает на виртуальных принтерах (первое сообщение)
Кстати могу выслать проект, от необычен тем, что печать идет от класса CListView, т.е. в окне обычный список, а печатается отчет.
Re[3]: StretchBlt всем будет интересно поломать голову...
Здравствуйте, Lebets_VI, Вы писали:
L_V>но вот, почему не печатает на виртуальных принтерах (первое сообщение)
Укажи в CreateCompatibeDC контекст принтера, а не экрана.
L_V>Кстати могу выслать проект, от необычен тем, что печать идет от класса CListView, т.е. в окне обычный список, а печатается отчет.
НЭ надо...
Имею скафандр — готов путешествовать!
Re[3]: StretchBlt всем будет интересно поломать голову...
Здравствуйте, rus blood, Вы писали:
RB>Там это поле bm.bmHeight оно положительное или отрицательное???
Я использую SetMapMode(MM_TWIPS) поэтому ширина должна быть отрицательной
а вот если я вместо DC экрана укажу DC принтера, то вообще ничего не печатается
Re[5]: StretchBlt всем будет интересно поломать голову...
Здравствуйте, Lebets_VI, Вы писали:
L_V>Здравствуйте, rus blood, Вы писали:
RB>>Там это поле bm.bmHeight оно положительное или отрицательное??? L_V>Я использую SetMapMode(MM_TWIPS) поэтому ширина должна быть отрицательной
шутки шутишь? как ширина может быть отрицательна? это же ш ширина
Re: StretchBlt всем будет интересно поломать голову...
Здравствуйте, Lebets_VI, Вы писали:
L_V>Давиче я задавал вопрос, почему взятый из ресурса битмап не ПЕЧАТАЛСЯ на принтере, при чем просмотр перед печатью работал отличною Теперь намного философии:
Возможно, немного не по теме, но печатать битмапы лучше через StretchDIBits. Работает всегда, в отличие от StretchBlt.
Re: StretchBlt всем будет интересно поломать голову...
Здесь все серьезно, без шуток. Ширина указывается отрицательная, т.к. у нас в данном режиме (SetMapMode(MM_TWIPS)) отрицательная ось y.
А вот Vadim B сказал правильно, что надо все делать через StretchDIBits. Почему??? так вот я нашел ответы на все интересующие меня вопросы,
рассказывать не буду, а приведу ссылки на MSDN 2003^
3. топик "HOWTO: Convert Between Device-Dependent Bitmaps and DIBs" это артикль 80080 кнолиджбэйза.
Кстати там написано что,!!!!!!! для печати надо использовать memory DC как промежуточный DC для помещения битмапа, а все будет работать ТОЛЬКО через DIB, т.е. надо битмап (DDB) преобразовать в DIB.
Re: StretchBlt всем будет интересно поломать голову...
А CreateCompatibleBitmap() там использовалось?
L_V>3. В конечном счете я изменил только 1 строку: "srcDC.CreateCompatibleDC(NULL);" где вместо реального CDC поставил NULL — и, о радость, все заработало!!!! НО!!!!!!!!!!! возник вопрос: а почему на самом первом ПК где было "srcDC.CreateCompatibleDC(pDC);" (т.е. конкретный данный нам CDC)все прекрасно печаталось??? Для меня это так и осталось заадкой.
Из MSDN по функции CreateCompatibleBitmap:
В общем если создавать конекст из NULL, то если использовать его для CreateCompatibleBitmap() то оно создастся монохромным...
Я на такой напарывался...
L_V>4. Все теперь работает, все печатается, НО!!! только на настоящие принтеры (локальные или сетевые), а вот на принтеры отображенные в файл (у меня например куча PS принтеров) и на тот же виртуальный принтер "Adob PDF" функция StretchBlt выдает FALSE, да что там она, даже BitBlt тоже самое выдает.
видать то же самое