2011-03-22 2 views
0

새 비트 맵을 사용하고 24x24 픽셀 툴바 버튼을 플래시 36x36 비트 툴바로 대체하기 위해 CreateToolbarEx 함수를 사용하는 일부 오래된 코드 (C++)를 수정하려고합니다. . 내가 사용 기능은 다음과 같습니다 : 나는 36 ''24 년대 '을 변경하여 현재 도구 모음 단추의 크기를 확장 할 수있어새 비트 맵으로 CreateToolbarEx 함수를 수정하면 메모리 할당 문제가 발생합니다.

m_hToolbarWnd = CreateToolbarEx(m_hPagerWnd, ws, ID_TOOLBAR, NUMBERTOOLBARBITMAPS, hInst, IDB_TOOLBAR, tbInitButtons, m_ncButtons, 24, 24, 24, 24, sizeof(TBBUTTON)); 

을,하지만 난 새 도구 모음 비트 맵에 IDB_TOOLBAR를 변경하는 경우 그리고 프로그램을 실행하면 CreateToolbarEx 함수를 가리키는 메모리 액세스 읽기 위반이 발생합니다. 비트 맵이 메모리 할당을 얻는 방법이나 개별 버튼을 만드는 방법에 뭔가 빠졌는가? 새 도구 모음은 1584x36 픽셀 (44 개 버튼)입니다.

+0

위 여전히 비트 맵 버튼 및 24x24에 대한 24x24를 통과 한 코드 ... http://msdn.microsoft.com/en-us/library/bb787469%28v=vs .85 % 29.aspx – AJG85

+0

정확함, 방금 프로그램에있는 작업 코드를 복사했습니다. 새 비트 맵을 사용하여 코드를 실행하려고하면이 코드를 36x36으로 변경하고 IDB_TOOLBAR을 새 비트 맵으로 다시 정의합니다. 이 재 정의로 인해 프로그램이 중단됩니다. – Micky

+0

새 IDB_TOOLBARX 또는 기타 등을 만들려면 응용 프로그램에 비트 맵을 가져올 수 있습니다. 때로는 컨트롤이나 리소스에 대해 이전 ID를 다시 사용하면 리소스 파일이 복잡해질 수 있습니다. – AJG85

답변

1

이것은 오래되었지만 내가 찾은 해결책이 도움이되기를 바랍니다. 16 비트 색상 비트 맵에서 24 비트로 변경한다는 사실을 간과 했으므로 CreateToolbarEx를 처리 할 수 ​​없습니다. 대신 CreateWindowEx를 호출하고 아이콘 ImageList를 만들고 설정해야했습니다. 근무 코드 :

m_hToolbarWnd = CreateWindowEx(0L, TOOLBARCLASSNAME, "", ws, 36, 36, 36, 36, m_hPagerWnd, (HMENU) ID_TOOLBAR, hInst, NULL); 
SendMessage(m_hToolbarWnd, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); 
HBITMAP hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_TOOLBAR)); 
HIMAGELIST hIcons = ImageList_Create(36, 36, ILC_COLOR24, 0, m_ncButtons); 
ImageList_Add(hIcons, hBmp, NULL); 
SendMessage(m_hToolbarWnd, TB_SETIMAGELIST, 0, (LPARAM) hIcons); 
관련 문제