2010-04-08 1 views
1

도구 모음이 ImageList과 함께 작동하도록하려고합니다. 이미지는 개별 PNG이므로 ImageList에 연속해서 추가했습니다. Bbt는 작동하지 않았습니다. 여기에 ImageListImage를 추가하는 코드 : ImageList가있는 ToolBar를 만들려고하는데

HIMAGELIST CreateToolBarImages(HINSTANCE hInst) 
{ 
    HIMAGELIST v_ImageList = NULL; 
    // IMAGE_LIST v_Img; 
    HICON hIcon; 
    HBITMAP hBit; 
    COLORMAP cMap; 
    COLORREF fromColor = RGB(0,0,0); 

    InitCommonControls(); 

    v_ImageList = ImageList_Create(32, 32, ILC_MASK, 1, 1); 

    cMap.from = fromColor; 
    cMap.to = ::GetSysColor(COLOR_BTNFACE); 
    hBit = CreateMappedBitmap(hInst, IDB_CONSOLE, 0, &cMap, 1); 

    // hBit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_CONSOLE)); 
    consoleImg = ImageList_Add(v_ImageList, hBit, 0); 
    if (consoleImg == -1) 
     return NULL; 

    DeleteObject(hBit); 

    // [edit Franci Penov] 
    return v_ImageList; 
} 

가 그럼 난 도구 모음을 만들 수는 있지만 이미지 기능에 실패합니다.

HWND CreateToolBarButton(HWND hWndParent) 
{ 
    const int ImageID = 0; 
    const int numB = 1; 
    COLORREF iColor; 

    HWND hToolBar = CreateWindowEx(0, 
     TOOLBARCLASSNAME, 
     NULL, 
     WS_CHILD |TBSTYLE_LIST |TBSTYLE_FLAT | WS_VISIBLE, 
     0,0,0,0, 
     hWndParent, 
     NULL, 
     g_hInst, 
     NULL); 

    if (hToolBar == NULL) 
     return NULL; 

    HIMAGELIST ImgList = CreateToolBarImages(g_hInst); 
    if (ImgList == NULL) 
     MessageBox(hWndParent, L"No Tool Images", L"BOB", MB_OK); 

    // [edit Franci Penov] 
    return hToolBar; 
} 

내가 누락되었거나하지 않는 것이 있습니까?

답변

1

주석으로 표시된 위의 예제 코드에서 반환 값을 약간 변경했습니다.

Win32 Toolbar 컨트롤을 사용하는 방법에 대한 자세한 내용은 this MSDN article을 참조하십시오. 특히

, 무슨 코드 것은로드 Toolbar 컨트롤에 TB_SETIMAGELIST 메시지를 보내는 누락 된 것으로 보인다 ImageList 당신은 방금 만든 : 물론

// Set the image list. 
SendMessage(hToolBar, TB_SETIMAGELIST, 0, (LPARAM)ImgList); 

, 당신이 누락 다른 일들이있을 수 있습니다 거기, 그러나 그것은 좋은 출발점이 될 것입니다.

오류 검사를 수행하고 일찍 함수를 종료하는 몇 가지 위치에서 일부 GDI 개체 메모리 누수가 있습니다. 그것들을 청소하는 것도 좋습니다.

3

"작동하지 않음". CreateMappedBitmap은 색상 표가있는 이미지를로드하는 데 사용됩니다. 즉, < = 256 색을 의미합니다.

PNG는 알파 채널이있는 32bpp 이미지를 사용한다는 것을 의미합니다. 즉, * MappedBitmap 기능을 사용할 수 없음을 의미합니다.

0

안녕하십니까. 내 문제를 해결했습니다. Chris 관중님, 그 관측을 게시 한 후, PNG를 사용하기 위해 GDI +를 사용해야합니다. 사용 방법을 선택했습니다. 아이콘이 대신 완벽하게 작동합니다. Franci, 코드도 정리했습니다.

관련,

관련 문제