bitblt 예제

Posted on

나는이 문제를 해결하는 방법을 모르겠지만 창 아이콘을 그리려면 DrawIconEx로 HICON을 그려야합니다. 당신은 사용자 정의 비 클라이언트 영역 물건을 그릴 하려는 경우 다음 더 최근의 예제를 찾을 필요가, 고전 테마를 지 원하는 뭔가. 이 예제의 배경은 흰색 또는 검은색 배경에서 이러한 작업을 사용하면 실제로 작동하는지 구분하기 때문에 투명도를 더 분명하게 만들기 위해 회색으로 설정됩니다. 위의 성공적인 마스킹에 대한 첫 번째 조건을 기억하십니까? 색상 이미지는 우리가 투명하게 원하는 모든 곳에서 검은색이어야 한다는 것이었습니다. 이 예제에서 사용한 비트맵은 이미 특별한 작업이 필요하지 않은 조건을 충족하기 때문에 투명하게 원하는 다른 색상이 있는 다른 이미지에 이 코드를 사용하려는 경우(핫 핑크는 일반적인 선택사항임) 두 번째 단계는 방금 만든 마스크를 사용하여 원본 이미지를 변경하여 투명하게 원하는 모든 곳에서 검은색이 되도록 하는 것입니다. 다른 장소도 검은 색인 경우, 그들은 마스크에 흰색이 아니기 때문에, 그들은 투명 끝나지 않을 것입니다. 새 마스크에서 원래 색상 이미지로 BitBlt()ing을 사용하여 마스크의 흰색 영역을 컬러 이미지에서 검은색으로 설정하는 SRCINVERT 작업을 사용하여 이를 수행할 수 있습니다. (제목 표시줄이 정사각형이 아니기 때문에 (이 예제가 디자인 된 Windows 98/2000과 달리) 왼쪽 상단에 흰색인 문제가 표시되므로 작은 문제가 있습니다. 또한 HDC 소스 위치를 변경하여 예제를 약간 수정했습니다. PAINTSTRUCT는 페인팅되는 창과 페인트 메시지에 정확히 무슨 일이 일어나고 있는지에 대한 정보를 포함하는 구조입니다.

대부분의 간단한 작업의 경우 포함된 정보를 무시하기만 하면 되지만 BeginPaint()로 호출하는 데 필요합니다. BeginPaint() 이름에서 알 수 있듯이 WM_PAINT 메시지를 처리하기 위해 특별히 설계되었습니다. WM_PAINT 메시지를 처리하지 않을 때는 잠시 동안 타이머 애니메이션 예제에서 볼 수 있는 GetDC()를 사용합니다… 그러나 WM_PAINT에서는 BeginPaint() 및 EndPaint()를 사용하는 것이 중요합니다. 예를 들어 창에 그리려면 먼저 GetDC(창을 사용하여 창을 나타내는 HDC를 retreive)한 다음 이미지 그리기에 BitBlt() 같은 HDC를 사용하는 GDI 함수, 텍스트 그리기를 위한 TextOut(), 선에 대한 LineTo()를 사용할 수 있습니다. 그러나 나머지 색상 이미지는 검은색이 아니며 대상도 검은색이 아닌 경우 소스 와 대상 색상의 조합을 얻을 수 있으며, 결과는 예제 그림의 두 번째 행의 두 번째 볼에서 볼 수 있습니다. 이것은 우리가 먼저 검은 색으로 색칠 할 픽셀을 설정하기 위해 마스크를 사용하는 전체 이유입니다, 그래서 우리는 색상 이미지와 함께 또는 사용할 때, 컬러 픽셀은 그 아래에 무엇이든과 혼합되지 않습니다. 그래서 우리가 BitBlt를 사용할 수 있도록, 우리는 필요 2 장치 컨텍스트 (발음하기 어려운 아닌가요?) 이를 만들려면 먼저 그래픽 오브젝트가 필요하며, 예를 들어 그림 상자를 사용할 수 있는 모든 오브젝트에서 그래픽 오브젝트를 만듭니다.

이 예제에서는 배경 이미지, 스프라이트 및 1비트 마스크가 사용됩니다.