1
THƯ VI
THƯ VI
Ệ
Ệ
N Đ
N Đ
Ồ
Ồ
HO
HO
Ạ
Ạ
GDI
GDI
(Graphics Device Interface)
(Graphics Device Interface)
L
L
ậ
ậ
p tr
p tr
ì
ì
nh trên môi trư
nh trên môi trư
ờ
ờ
ng Windows
ng Windows
kh
kh
á
á
i
i
ni
ni
ệ
ệ
m
m
cơ
cơ
b
b
ả
ả
n
n
•
•
C
C
á
á
c
c
v
v
ử
ử
lý
lý
ả
ả
nh
nh
Bitmap
Bitmap
•
•
In
In
ấ
ấ
n
n
2
In
In
ấ
ấ
n
n
(Printing)
(Printing)
•
•
T
trong
MFC
MFC
In
In
ấ
ấ
n
n
T
T
ổ
ổ
ng
ng
quan
quan
v
v
ề
ề
in
in
ấ
ấ
n
n
trong
trong
Windows
ụ
in
in
•
•
Banding
Banding
•
•
Spooling
Spooling
•
•
Printer DC
Printer DC
•
•
M
M
ộ
ộ
t chương tr
t chương tr
ì
ì
nh in đơn gi
nh in đơn gi
ả
ả
n d
t
t
ắ
ắ
c
c
cơ
cơ
b
b
ả
ả
n
n
v
v
ề
ề
in
in
ấ
ấ
n
n
[1]
[1]
X
X
á
á
y
y
in.
in.
[2]
[2]
G
G
ọ
ọ
i
i
h
h
à
à
m
m
StartDoc
StartDoc
đ
đ
ể
ể
b
b
ắ
ắ
t
t
i
i
[3]
[3]
G
G
ọ
ọ
i
i
h
h
à
à
m
m
StartPage
StartPage
đ
đ
ể
ể
b
b
ắ
ắ
t
t
đ
đ
v
v
ẽ
ẽ
c
c
ủ
ủ
a
a
GDI
GDI
đ
đ
ể
ể
th
th
ể
ể
hi
hi
ệ
ệ
n
n
văn
văn
b
b
i
i
h
h
à
à
m
m
EndPage
EndPage
đ
đ
ể
ể
k
k
ế
ế
t
t
th
th
ú
ú
c
c
1
1
trang
trang
ú
ú
c
c
in
in
t
t
à
à
i
i
li
li
ệ
ệ
u
u
Ghi
Ghi
ch
ch
ú
ú
:
:
Các hàm StartDoc/EndDoc, StartPage/EndPage đềuthuộcthư
việnGDI
Bước [3], [4], [5] có thể làm nhiềulầnnếumuốn in trên nhiều trang
T
cơ
b
b
ả
ả
n
n
v
v
ề
ề
in
in
ấ
ấ
n
n
4
T
T
ổ
ổ
ng
ng
quan
quan
v
v
ề
ề
ộ
ộ
t
t
t
t
à
à
i
i
li
li
ệ
ệ
u
u
c
c
ầ
ầ
n
n
in
in
•
•
C
C
ó
ó
ụ
ụ
in đư
in đư
ợ
ợ
c
c
đ
đ
ị
ị
nh
nh
ngh
ngh
ĩ
ĩ
a
a
b
b
ở
ở
i
i
1
1
c
c
li
li
ệ
ệ
u
u
đư
đư
ợ
ợ
c
c
d
d
ù
ù
ng
ng
cho
cho
t
t
á
á
c v
c v
ụ
ụ
in l
in l
lưu
lưu
tr
tr
ữ
ữ
c
c
á
á
c
c
l
l
ệ
ệ
nh
nh
v
v
ẽ
ẽ
text,
text,
v
v
ẽ
ẽ
đ
đ
trong
trong
Windows
Windows
Banding
Banding
•
•
GDI
GDI
lưu
lưu
tr
tr
ữ
ữ
c
c
á
á
c
c
l
l
ệ
ệ
nh
nh
v
v
ng
ng
~EMF
~EMF
*.TMP
*.TMP
•
•
Khi
Khi
ứ
ứ
ng
ng
d
d
ụ
ụ
ng
ng
k
k
ế
ế
t
t
th
th
ú
ú
tr
tr
ì
ì
nh
nh
đi
đi
ề
ề
u
u
khi
khi
ể
ể
n
n
s
s
ẽ
ẽ
chuy
chuy
ể
ể
n
n
đ
đ
c
c
á
á
c
c
k
k
ế
ế
t
t
xu
xu
ấ
ấ
t
t
th
th
ự
ự
c
c
s
s
ự
ự
trên
trên
ạ
ạ
o
o
ra
ra
1
1
trang
trang
đ
đ
ồ
ồ
h
h
ọ
ọ
a
a
•
•
K
K
í
í
ch
ch
thư
thư
á
á
l
l
ớ
ớ
n
n
(VD.
(VD.
M
M
á
á
y
y
in 600DPI,
in 600DPI,
gi
gi
ấ
ấ
y
y
letter
letter
c
c
ầ
ầ
ờ
ờ
ng
ng
s
s
ử
ử
d
d
ụ
ụ
ng
ng
k
k
ỹ
ỹ
thu
thu
ậ
ậ
t
t
“
“
chia
chia
band
band
u
u
v
v
ù
ù
ng
ng
h
h
ì
ì
nh
nh
ch
ch
ữ
ữ
nh
nh
ậ
ậ
t.GDI
t.GDI
s
s
ẽ
ẽ
l
l
u khi
u khi
ể
ể
n m
n m
á
á
y in v
y in v
à
à
th
th
ự
ự
c
c
hi
hi
ệ
ệ
n
n
c
c
á
á
c
c
1
1
trang
trang
5
T
T
ổ
ổ
ng
ng
quan
quan
v
v
ề
ề
in
in
ấ
ấ
n
n
trong
trong
Windows
Windows
Spooling
Spooling
•
ằ
ng
ng
tr
tr
ì
ì
nh
nh
qu
qu
ả
ả
n
n
lý
lý
in (Printer Spooler).
in (Printer Spooler).
Printer spooler
Printer spooler
đư
đư
ợ
ợ
c
c
t
t
ự
v
à
à
k
k
ế
ế
t
t
th
th
ú
ú
c
c
khi
khi
h
h
ệ
ệ
đi
đi
ề
ề
u h
u h
à
à
nh shutdown
ó
th
th
ể
ể
t
t
ắ
ắ
t
t
cơ
cơ
ch
ch
ế
ế
Spooling
Spooling
đ
đ
ố
ố
i
i
v
v
ớ
ớ
i
hơn
,
,
v
v
ì
ì
GDI
GDI
không
không
lưu
lưu
d
d
ữ
ữ
li
li
ệ
ệ
u
u
c
c
ầ
ầ
n
n
in
m
á
á
y
y
in
in
ho
ho
ặ
ặ
c
c
d
d
ù
ù
ng
ng
m
m
ộ
ộ
t
t
tr
tr
ì
ì
nh
in
m
m
ạ
ạ
ng
ng
)
)
T
T
ổ
ổ
ng quan v
ng quan v
ề
ề
in
in
ấ
ấ
n trong Windows
n trong Windows
Spooling
Spooling
6
T
T
ổ
ổ
trong
trong
Windows
Windows
Printer DC
Printer DC
•
•
Vi
Vi
ệ
ệ
c
c
đ
đ
ầ
ầ
u
u
tiên
tiên
khi
khi
in
in
l
l
à
à
m
m
á
á
y in.
y in.
•
•
S
S
ử
ử
d
d
ụ
ụ
ng
ng
Printer DC
Printer DC
trong
trong
c
c
á
á
c
c
l
l
i d
i d
ù
ù
ng c
ng c
ó
ó
th
th
ể
ể
c
c
à
à
i
i
đ
đ
ặ
ặ
t
t
nhi
nhi
ề
ề
u
u
ặ
ặ
c
c
đ
đ
ị
ị
nh.
nh.
•
•
M
M
ỗ
ỗ
i
i
m
m
á
á
y
y
in
in
đ
đ
ề
ề
•
•
C
C
ầ
ầ
n
n
ph
ph
ả
ả
i
i
x
x
á
á
c
c
đ
đ
ị
ị
nh
nh
tên
tên
c
c
c
c
á
á
ch
ch
t
t
ạ
ạ
o
o
Printer DC
Printer DC
–Tạo Printer DC trựctiếp
–Tạo Printer DC bằng cách dùng hộpthoạichuẩn PrintDlg
7
T
T
ổ
ổ
ng quan v
ng quan v
ề
ề
in
in
ấ
ấ
n trong Windows
ế
p
p
HDC
HDC
GetPrinterDC
GetPrinterDC
() {
() {
DWORD
DWORD
dwNeeded
dwNeeded
,
,
dwReturned
dwReturned
;
;
HDC
HDC
hdc
hdc
;
;
PRINTER_INFO_4 * pinfo4;
PRINTER_INFO_4 * pinfo4;
PRINTER_INFO_5 * pinfo5;
PRINTER_INFO_5 * pinfo5;
if (
, NULL, 5,
(PBYTE)pinfo5,dwNeeded,&dwNeeded,&dwReturned);
(PBYTE)pinfo5,dwNeeded,&dwNeeded,&dwReturned);
hdc
hdc
=
=
CreateDC(NULL
CreateDC(NULL
, pinfo5
, pinfo5
-
-
>
>
pPrinterName
pPrinterName
,
,
NULL, NULL);
NULL, NULL);
free(pinfo5);
free(pinfo5);
}
}
T
T
ổ
ổ
ng quan v
tr
ự
ự
c
c
ti
ti
ế
ế
p
p
…
…
(
(
tt
tt
)
)
else // Windows NT
else // Windows NT
{
{
EnumPrinters(PRINTER_ENUM_LOCAL
EnumPrinters(PRINTER_ENUM_LOCAL
, NULL, 4,
, NULL, 4,
NULL, 0, &
NULL, 0, &
dwNeeded
>
pPrinterName
pPrinterName
,
,
NULL, NULL);
NULL, NULL);
free(pinfo4);
free(pinfo4);
}
}
return
return
hdc
hdc
;
;
}
}