Высота кнопок в 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 решает, что текст не умещается на кнопку в тулбаре и увеличивает высоту вдвое. Помогите, пожалуйста, если кто сталкивался с такой проблемой!
Re: Высота кнопок в ToolBar'е
От: ekamaloff Великобритания  
Дата: 09.12.05 06:06
Оценка:
Здравствуйте, ZiPPY, Вы писали:

ZPP>
  
// ...
SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); 
// ...


Тебя эта строка не смущает? По-моему в ней и проблема.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: Высота кнопок в ToolBar'е
От: ZiPPY Россия  
Дата: 09.12.05 08:19
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, ZiPPY, Вы писали:


ZPP>>
  
E>// ...
E>SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); 
E>// ...


E>Тебя эта строка не смущает? По-моему в ней и проблема.


Убрав эту строку, у меня текст остается за пределами самой кнопки, т.е. внизу.

З.Ы. А никто незнает как рисовать ToolButton'ы через OwnerDraw?
Re[3]: Высота кнопок в ToolBar'е
От: ekamaloff Великобритания  
Дата: 09.12.05 08:31
Оценка:
Здравствуйте, ZiPPY, Вы писали:

ZPP>З.Ы. А никто незнает как рисовать ToolButton'ы через OwnerDraw?


Нечто похожее на OwnerDraw можно сделать через стиль TBSTYLE_CUSTOMERASE. В этом случае будет приходить уведомление NM_CUSTOMDRAW в котором можно задавать свой фон для кнопок. Подробней в MSDN.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[4]: Высота кнопок в ToolBar'е
От: ZiPPY Россия  
Дата: 09.12.05 12:37
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, ZiPPY, Вы писали:


ZPP>>З.Ы. А никто незнает как рисовать ToolButton'ы через OwnerDraw?


E>Нечто похожее на OwnerDraw можно сделать через стиль TBSTYLE_CUSTOMERASE. В этом случае будет приходить уведомление NM_CUSTOMDRAW в котором можно задавать свой фон для кнопок. Подробней в MSDN.


Как выяснилось позже место резервируется для иконки, только вот почему сверху? А за ответы очень признателен...
Re[5]: Высота кнопок в ToolBar'е
От: ZiPPY Россия  
Дата: 09.12.05 12:47
Оценка:
Здравствуйте, ZiPPY, Вы писали:

ZPP>Здравствуйте, ekamaloff, Вы писали:


E>>Здравствуйте, ZiPPY, Вы писали:


ZPP>>>З.Ы. А никто незнает как рисовать ToolButton'ы через OwnerDraw?


E>>Нечто похожее на OwnerDraw можно сделать через стиль TBSTYLE_CUSTOMERASE. В этом случае будет приходить уведомление NM_CUSTOMDRAW в котором можно задавать свой фон для кнопок. Подробней в MSDN.


ZPP>Как выяснилось позже место резервируется для иконки, только вот почему сверху? А за ответы очень признателен...


Все получилось, оказывается не досмотрел, там стиль для тулбара специальный есть, назыавется TBSTYLE_LIST. Глупо вышло, так долго искал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.