PRB: Setting FontTransparent Has No Effect on Windows 95/98ID: Q145726
|
When printing under Windows 95 and Windows 98, the FontTransparent property
of the Printer object fails to change the way that the text is printed on
the background. The FontTransparent property determines whether background
text and graphics are displayed in the spaces around and within characters.
The Visual Basic default for this property is True, meaning that the
background will display in the spaces around the text. Under Windows 95 and
Windows 98 the text will print as if FontTransparent is set to False, even
though it is set to True.
Additionally, whenever a NewPage method is issued, all text on the new page
will print as if FontTransparent is set to False even if it was printing
correctly on the previous page.
The background mix mode, which directly relates to the Visual Basic
FontTransparent property, and several other attributes of the printer
device context, are modified at the start of a page by Windows 95 and
Windows 98. This is a change in behavior from Windows NT and previous
versions of Windows that is not addressed properly by the Visual Basic
Printer Object. The problem should only affect the 32-bit version of Visual
Basic, although some cases of the 16-bit version exhibiting this behavior
have been reported. For more information on the cause, please see the
following article in the Microsoft Windows SDK Knowledge Base:
Q125696 : StartPage/EndPage Resets Printer DC Attributes in Windows 95
To work around the problem, call the SetBKMode Windows API function to set the background mix mode. An example is shown in the More Information section below.
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.
The code to duplicate the problem is as follows:
Private Sub Form_Click()
Printer.Line (0,0)-(10000, 2000), &HC0C0C0, BF
Printer.CurrentX = 0
Printer.CurrentY = 0
Printer.FontTransparent = True
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.FontTransparent = False
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.EndDoc
End Sub
#If Win32 Then
Private Declare Function SetBkMode Lib "gdi32" _
(ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private iBKMode as Long
#Else
Private Declare Function SetBkMode Lib "GDI" (ByVal hDC As Integer _
, ByVal nBkMode As Integer) As Integer
Private iBKMode as Integer
#End If
Private Const TRANSPARENT = 1
Private Const OPAQUE = 2
Private Sub Form_Click()
Printer.Print ""
Printer.Line (0,0)-(10000, 2000), &HC0C0C0, BF
Printer.CurrentX = 0
Printer.CurrentY = 0
Printer.FontTransparent = True
'Correctly sets the background mix mode to transparent
iBKMode = SetBKMode(Printer.Hdc, TRANSPARENT)
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.FontTransparent = False
'Correctly sets the background mix mode to opaque
iBKMode = SetBKMode(Printer.Hdc, OPAQUE)
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.EndDoc
End Sub
Additional query words: kbVBp500 kbVBp400 kbVBp kbprint kbDSupport kbdsd kbVBp600 kbPrinting
Keywords :
Version :
Platform : WINDOWS
Issue type : kbprb
Last Reviewed: June 21, 1999