빠른 배경 :복사 부분
hTreeview = CreateWindowEx(0, WC_TREEVIEW, L"My Treeview", WS_CHILD | WS_VISIBLE | TVS_INFOTIP | TVS_NOHSCROLL | TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_SINGLEEXPAND, m_tx, m_ty, m_tw, m_th, hWindow, (HMENU)2, hInstance, NULL);
: 나는 (그 차이를해서는 안하지만, 비주얼 스튜디오 2008) 나 C++에서 윈도우 API 호출을 사용하여 생성 한 트 리뷰가 나는 성공적으로 사용하여에의 ImageList를 할당 : cx
, cy
및 n
모두 지정
m_hImageList = ImageList_Create(cx, cy, ILC_COLOR24, n, n);
TreeView_SetImageList(hTreeview, m_hImageList, TVSIL_NORMAL);
(이 경우, 18, 18, 5, 각각). 이 모든 것은 잘 작동합니다. 왜냐하면 이미지에 대한 항목 옆에 공간이 설정되어 있기 때문에 볼 수 있습니다.
내가 달성하려고하는 것은 다음 다른 비트 맵 (파일에서)의 하위 섹션을 복사하는 것입니다. 나는 시도했다 (그러나 작동하지 않습니다) 코드는 이것이다 : 나는 간결에 대한 코드를 검사 오류를 떠난
HBITMAP hSkin = (HBITMAP)LoadImage(NULL, szPathBmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
for (long i = 0; i < n; i++)
{
HDC dcDest = CreateCompatibleDC(NULL);
HBITMAP hIcon = CreateCompatibleBitmap(dcDest, cx, cy);
HDC dcSrc = CreateCompatibleDC(NULL);
SelectObject(dcSrc, hSkin);
BitBlt(dcDest, 0, 0, cx, cy, dcSrc, x, y, SRCCOPY);
*pIcon = ImageList_Add(m_hImageList, hIcon, NULL);
DeleteObject(hIcon);
DeleteDC(dcSrc);
DeleteDC(dcDest);
}
DeleteObject(hSkin);
, 나열된 모든 변수는 다른 곳에서 설정 한 것으로 가정 할 수있다 프로그램 (작업 소스 파일을 제공하지 못해서 용서해 주지만, 이것은 매우 큰 프로젝트이며 관련있는 부분 만 포함하려고했습니다).
Treeview에있는 모든 것은 검은 색 사각형 (Treeview의 배경색이됩니다)이므로 코드의 마지막 블록에 문제가있는 것으로 가정합니다. BitBlt의 일부를 ImageList에 저장하기 위해 새 비트 맵에 넣으려고합니다. 누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있니? 아니면 내가하려는 일을 성취하기 위해 더 나은 방법을 말해 줄 수 있니?
저는 C++과 Windows API 만 사용하고 있습니다. .NET, MFC 또는 Windows Form Designer가 없습니다.
사전에 도움을 주셔서 감사 드리며, 무엇이라도 남겨두면 사과드립니다. 이것은 나의 첫 번째 게시물 중 하나입니다.
을 또한, 내가 사용하는 경우'HICON HICON = (HICON) LoadImage (HINSTANCE, MAKEINTRESOURCE (IDI_GENERIC), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR)'와'm_iconGeneric = ImageList_AddIcon (m_hImageList, hIcon); 그리고'DestroyIcon (hIcon);'그런 다음 잘 동작합니다. 그러나 사용자가 하나의 큰 원본 스킨 파일을 지정한 다음 각 파일이 해당 파일에있는 위치를 지정할 수 있어야합니다.이들은 연속적 일 수도 있고 연속적 일 수도 있고, 하나씩 지정되어야합니다. 감사! –