|
프로그램을 짜다가 궁금한게 있어서 그러는데요.
Form위에 Panel을 하나 올려 놓고 여기다가 사각형을 그리려 합니다.
HDC hDC = GetDC(Panel1->Handle);
MoveToEx(hDC, m_iLeft, m_iTop, NULL);
Rectangle(hDC, m_iLeft, m_iTop, X, Y);
이렇게 하면 그려지잖아요..근데 궁금한 것은
HDC hDC = Panel1->Handle;
MoveToEx(hDC, m_iLeft, m_iTop, NULL);
Rectangle(hDC, m_iLeft, m_iTop, X, Y);
이렇게 하면 절대 안그려지더라구요.. GetDC로 얻은 헨들과 Panel1->Handle과 어떤 차이가 있는지 설명해 주셨으면 고맙겠습니다.
(Panel은 윈도우 컨트롤을 상속받았으므로 막바로 헨들을 hDC에 넣어도 되는것 아닌가요?)
덧붙여서 여쭈어 보고 싶은 것은..
HBRUSH DrawBrush, OldBrush;
DrawBrush = (HBRUSH) GetStockObject(NULL_BRUSH);
OldBrush = (HBRUSH) SelectObject(hDC, DrawBrush);
이렇게 하면 원하고자 하는 투면 브러시가 적용이 되는데..
Panel1->Brush->Style = bsClear;은 적용이 안되던데..
반면 PaintBox경우에는
hdc = PaintBox1->Canvas->Handle;
PaintBox1->Canvas->Brush->Style = bsClear;
SetROP2(hdc, R2_NOT);
MoveToEx(hdc,m_iLeft, m_iTop, NULL);
Rectangle(hdc, m_iLeft, m_iTop, X, Y);
PaintBox의 헨들을 막바로 적용할수 있고 Brush도 api안 써도 적용시킬수 있더군요.
프로그램 짤때마다 이렇게 감으로 짤수도 없는 노릇이고 왜 어떤것은 돼고 어떤것은 안 되는지 설명해 주시면 성은이 망극하겠습니다. 꾸벅~~
|