Handle e HDC. O que é afinalesse contexto de dispositivo?

Delphi

14/07/2004

Olá pessoal, alguém poderia me explicar o que é o HDC pego pelas apis GetDC e GetWindowDC.
O que é afinal esse contexto de dispositivo e qual sua diferença para o Handle da janela?


Persist

Persist

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

14/07/2004

vc usao HDC p/ desenhar
o Handle identifica uma janela, controle
o DC é a parte desenhavel

vc pode usar o DC no canvas:

MeuCanvas := Tcanvas.create;
Meucanvas.handle := DC;

e usar o canvas p/ desenhar no DC, que vc pega com o GetDC, passando o Handle como parametro


GOSTEI 0
Persist

Persist

14/07/2004

Obrigado pela resposta, mas ví também que HDC é utilizado para periféricos como modems, impressoras, monitores etc . . .
Então penso que o Windows interpreta o HDC diferentemente para cada dispositivo.


GOSTEI 0
Beppe

Beppe

14/07/2004

Pelo que sei, modem naum...HDC(Handle for Device Context), é um ´pano´ onde pode desenhar. Modens não se encaixam neste contexto.

O Handle da janela cuida das mensagens enviadas a janela, tem uma proc que faz isso(WndProc). Ela processa as msgs de pintura(WM_NCPAINT, WM_PAINT) e chama as procs de desenho com o seu DC.


GOSTEI 0
Persist

Persist

14/07/2004

Mas então pq o GetDC e GetWindowDC de Socket.Handle retorna sempre?
Socket é um TCustomWinSocket e não tem nada a ver com desenho.


GOSTEI 0
Beppe

Beppe

14/07/2004

SocletHandle é o handle que representa o objeto socket. No Windows, cada objeto é representado por um handle diferente(canvas, janela, socket, thread, mutex, pipe, internet, etc...). Resumindo: não tem nada a ver sockets com DCs.


GOSTEI 0
Persist

Persist

14/07/2004

Então, mas é isso que queria saber.
Pq o GetDC de Socket.Handle retorna sempre?


GOSTEI 0
Beppe

Beppe

14/07/2004

Pq o GetDC de Socket.Handle retorna sempre?

Puisé, eu não entendi o q pediu, nem agora...
Qual GetDC? :oops:


GOSTEI 0
Persist

Persist

14/07/2004

var h:HDC;
begin
h := 0;
h := GetDC(Socket.Handle);
h := 0;
h := GetWindowDC(Socket.Handle);
end;

O Socket é o parâmetro Socket no evento onAccept de TServerSocket.
Nos dois casos a variável h retorna sempre > 0.
É isso que queria saber; pq a variável h é > 0 ?


GOSTEI 0
Beppe

Beppe

14/07/2004

Soket.Handle deve coincidir com um handle de uma janela. Os handles, não precisam ser exclusivos. Se vc usar o retorno de GetDC, não terá o resultado esperado, ou espera algo?


GOSTEI 0
Persist

Persist

14/07/2004

Obrigado pela resposta. É claro que HDC p/ Sockets não tem nada a ver, só queria entender a real diferença entre Handle e HDC.
Já entendí.
Novamente, obrigado !!!
:D


GOSTEI 0
POSTAR