Имеется такая проблема:
Печатаю кусочек текста плюс несколько линий на принтер из диалогового пиложения(хоть и не существенног но тестится на HP3820). Так вот писал я всю эту радость под Win2K и она там прекрасно заработало, но принес ее на конечное ее место работы(Win98) и она в упор отказалась работать, как выяснил методжом тыка она отказывается м енять какие либо параметры контекста.
Т.е. тестовая програмка печатает линию созданным пером и пишет чего-то там под W2K нормально, а под W98 линия стандартная, надпись тоже.
Может кто-что подскажет, как с этим бороться?
Тестовый исходник ниже:
1. Какие ошибки возвращает винда на попытки изменить состояния контекста?
2. Как создается контекст принтера?
3.
PrintDC.SelectObject(&pen);
не помогает?
4. Иногда бываю глюки с дровами принтера. Попробуй поставить стандартные, из дистрибутива windows. А ежели они и стоят, тогда попробуй наоборот, поставь дрова производителя.
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, Krizai, Вы писали:
P>[]
P>1. Какие ошибки возвращает винда на попытки изменить состояния контекста? P>2. Как создается контекст принтера? P>3. P>
P>PrintDC.SelectObject(&pen);
P>
P>не помогает?
Прикольно. Если компилятор не выдал опибку, то &pen и pen в данном случае одно и то же.
Но вообще код действително странный.
Зачем две ручки выбирать подряд: PrintDC.SelectStockObject(BLACK_PEN); и PrintDC.SelectObject(pen);
P>4. Иногда бываю глюки с дровами принтера. Попробуй поставить стандартные, из дистрибутива windows. А ежели они и стоят, тогда попробуй наоборот, поставь дрова производителя.
Здравствуйте, Serguei666, Вы писали:
S>Здравствуйте, Patalog, Вы писали:
P>>Здравствуйте, Krizai, Вы писали:
Все уже сам разобрался, вся проблеммиа в том что все изменения контекста оказывается нужно делать после StartDoc,StartPage, во всяком случае при их перестановки туда оно заработало
А насчет куска кода, этот кусок кода не из результирующего продукта, просто он долго и нудно подгонялся, чтоб обнаружить и локализовать глюк.
P>>не помогает?
S>Прикольно. Если компилятор не выдал опибку, то &pen и pen в данном случае одно и то же.
Не совсем. В случае с pen будет вызван CPen::operator HGDIOBJ + CDC::SelectObject(HGDIOBJ), причем последний работает только для "простых" контекстов, т.е. m_hDC == m_hAttribDC. В данном случае это конечно роли не играет, тем более, что в этом SelectObject для этого стоит ASSERT. Поэтому я и поставил смайлик, как констатацию данного совета как "танца с бубном".
Кроме этого есть еще один момент. В этом случае следующая операция будет некорректна:
а такую конструкцию делать надобно, ибо "намусорил — убери за собой".
В случае с &pen все будет ок.
S>Но вообще код действително странный. S>Зачем две ручки выбирать подряд: PrintDC.SelectStockObject(BLACK_PEN); и PrintDC.SelectObject(pen);