2009-10-07 4 views
6

Visual Studio 2008을 사용하여 리소스보기에서 PNG 파일을로드하고 IDB_BANG_PNG를 할당했습니다.프로그래밍 방식으로 Win32 API의 그림 컨트롤에 PNG 설정

그림 컨트롤은 IDC_STATIC15라고합니다.

그림 컨트롤에로드 된 PNG를 가져 오는 데 문제가 있습니다.

LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

// Way of loading a bmp with a mask perhaps? Or a PNG file programatically? 

static HBRUSH hBrushStatic; 
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG)); 

switch(message) 
{ 
case WM_INITDIALOG:  
    CheckDlgButton(hDlg, IDC_CHECK, FALSE); 
    EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); 
    // Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG 
    // IDC_STATIC15 is the picture frame 
    HWND item = GetDlgItem(hDlg,IDC_STATIC15); 
    SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 
    return TRUE; 

// .... snip 

Win32/GUI 개발과 관련하여 빠른 프로젝트를 수행하고 그녀를 꼼짝 못하게 만들었을 때 나는 도움이된다.

+0

비트 맵 파일이 필요합니다. PNG 이미지를 BMP 이미지로 변환하려고합니다. – anno

+0

PNG를 지원할 수 있다고했지만 프로그래밍 방식으로해야합니다. 이미지를 추가 할 때 hte 이미지 필터를 사용하면 * .png가 나열된 항목 중 하나입니다. –

+0

문제는 투명 배경을 유지하기 위해 PNG를 사용해야하는 이유입니다. 내가 BMP를 사용하여 마스크를 만들 수 없거나 ICO 파일이 32x32가 아닌 더 큰 아이콘을 사용하도록 허용하지 않는 한. –

답변

0

개인적으로 나는 CPictureEx 클래스를 사용합니다. 나는 그것이 png를 지원하지 않는다고 생각하지만 bmp, jpeg 및 animated gif.

특수 렌더링을 위해 Cairo 그래픽도 사용합니다. 카이로는 png 형식을 지원합니다.
물론 카이로는 사용하기가 조금 더 어렵습니다.

+0

이 프로젝트는 C++가 아니라 C 언어로 작성되었습니다. 클래스, CImage, MFC 등은 불가능하며 컴파일되지 않습니다. 런타임시 대화 상자에서 그림 컨트롤에 bmp 페인트를 어떻게 사용합니까? –

4

GDI+를 사용하여 작동하며 bitmap class :

Bitmap oBmp(L"D:\\test.png"); 
HBITMAP hBmp; 
oBmp.GetHBITMAP(0, &hBmp); 
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 

일부 caveats.Your 제어는 SS_BITMAP 스타일이 필요합니다. gdiplus.h와 그 라이브러리를 포함하는 것을 잊지 마십시오. 초기화 (GdiplusStartup) 및 종료 GDI +합니다. 모든 시스템 리소스를 해제하는 중입니다.

0

DevIL/OpenIL 라이브러리를 확인 했습니까? 그것은 OpenGL 스타일의 함수 명명법을 따르고 좋은 언어로 작성되었습니다.

나는 과거에 성공적으로 사용 해왔다. 그것은 또한 매우 휴대 가능합니다.

은 여기를 체크 아웃 : http://openil.sourceforge.net/features.php

2

나는 LoadBitmap을 생각하지 않는다 또는 기타 일반 GDI 기능 (예 : LoadImage)는 PNG를로드합니다.

이미지 편집 도구를 사용하여 리소스를 32 비트 BMP에 저장 한 다음 LR_CREATEDIBSECTION과 함께 LoadImage을 사용할 수 있습니다.

또는 PNG 파일을 DIBSECTION으로로드 할 라이브러리를 사용할 수 있습니다. GDI +는 BMP 외에 PNG 및 JPG를로드합니다.

또한 OLE 자동화 라이브러리에는 다양한 이미지 유형으로 인스턴스화 한 다음 기본 DIBSECTION을 얻을 수있는 IPicture 인터페이스가 있습니다. 특히 COM에 익숙하지 않은 사용자는 사용하기가 어렵습니다. 출발점은 OleLoadPicture을 참조하십시오.

관련 문제