Высота кнопок в ToolBar'е
От: ZiPPY Россия  
Дата: 09.12.05 05:56
Оценка:
Попытался создать Toolbar средствами API, для этого нашел в MSDN данный исходник:

// CreateAToolBar creates a toolbar and adds a set of buttons to it.
// The function returns the handle to the toolbar if successful, 
// or NULL otherwise. 
// hwndParent is the handle to the toolbar's parent window. 
HWND CreateAToolBar(HWND hwndParent) 
{ 
   HWND hwndTB; 
   TBADDBITMAP tbab; 
   TBBUTTON tbb[3]; 
   char szBuf[16]; 
   int iCut, iCopy, iPaste;
   INITCOMMONCONTROLSEX icex;
   HRESULT hr;
   size_t cch;

// Ensure that the common control DLL is loaded. 
   icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
   icex.dwICC  = ICC_BAR_CLASSES;
   InitCommonControlsEx(&icex);

// Create a toolbar. 
   hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL, 
        WS_CHILD | CCS_ADJUSTABLE, 0, 0, 0, 0, hwndParent, 
        (HMENU) ID_TOOLBAR, g_hinst, NULL); 

// Send the TB_BUTTONSTRUCTSIZE message, which is required for 
// backward compatibility. 
   SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0); 

// Add the button strings to the toolbar's internal string list. 
   LoadString(g_hinst, IDS_CUT, szBuf, MAX_LEN-1); 
//Save room for second null terminator.
   hr = StringCchLength(szBuf, MAX_LEN, &cch);
   if(SUCCEEDED(hr))
   {
   szBuf[cch + 2] = 0;  //Double-null terminate.
   }
   else
   {
   // TODO: Write error handler.
   } 
   iCut = SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf); 
   LoadString(g_hinst, IDS_COPY, szBuf, MAX_LEN-1);  
//Save room for second null terminator.
   hr = StringCchLength(szBuf, MAX_LEN, &cch);
   if(SUCCEEDED(hr))
   {
   szBuf[cch + 2] = 0;  //Double-null terminate.
   }
   else
   {
   // TODO: Write error handler.
   } 
   iCopy = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
       (LPARAM) (LPSTR) szBuf); 
   LoadString(g_hinst, IDS_PASTE, szBuf, MAX_LEN-1);  
//Save room for second null terminator.
   hr = StringCchLength(szBuf, MAX_LEN, &cch);
   if(SUCCEEDED(hr))
   {
   szBuf[cch + 2] = 0;  //Double-null terminate.
   }
   else
   {
   // TODO: Write error handler.
   } 
   iPaste = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
        (LPARAM) (LPSTR) szBuf); 
 
// Fill the TBBUTTON array with button information, and add the 
// buttons to the toolbar. The buttons on this toolbar have text 
// but do not have bitmap images. 
   tbb[0].iBitmap = I_IMAGENONE; 
   tbb[0].idCommand = IDS_CUT; 
   tbb[0].fsState = TBSTATE_ENABLED; 
   tbb[0].fsStyle = BTNS_BUTTON; 
   tbb[0].dwData = 0; 
   tbb[0].iString = iCut; 
 
   tbb[1].iBitmap = I_IMAGENONE; 
   tbb[1].idCommand = IDS_COPY; 
   tbb[1].fsState = TBSTATE_ENABLED; 
   tbb[1].fsStyle = BTNS_BUTTON; 
   tbb[1].dwData = 0; 
   tbb[1].iString = iCopy; 

   tbb[2].iBitmap = I_IMAGENONE; 
   tbb[2].idCommand = IDS_PASTE; 
   tbb[2].fsState = TBSTATE_ENABLED; 
   tbb[2].fsStyle = BTNS_BUTTON; 
   tbb[2].dwData = 0; 
   tbb[2].iString = iPaste; 

   SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) NUM_BUTTONS, 
        (LPARAM) (LPTBBUTTON) &tbb); 

   SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); 

   ShowWindow(hwndTB, SW_SHOW); 
   return hwndTB; 
}


создал необходимые ресурсы, но высота кнопок в тулбаре почему то увеличивается. Если текст на них не устанавливать, высота кнопок будет, которую задашь сообщением TB_SETBUTTONSIZE. Такое ощущение, что API решает, что текст не умещается на кнопку в тулбаре и увеличивает высоту вдвое. Помогите, пожалуйста, если кто сталкивался с такой проблемой!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.