Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Combo, Edit и т.д. на ToolBar'e ( WinAPI )

18K
31 июля 2006 года
Densource
4 / / 28.07.2006
собсно сабж - как на ТулБар припаять стандартный контрол типа комбо или едит. В одном МFC примерчике видел что создавали простым созданием но для API что-то непроканало :(

и как сделать у кнопки тулбара узкую кнопочку со стрелкой вниз и выпадающим меню ? :)
2.0K
31 июля 2006 года
Dstr
158 / / 27.04.2006
[QUOTE=Densource]собсно сабж - как на ТулБар припаять стандартный контрол типа комбо или едит. В одном МFC примерчике видел что создавали простым созданием но для API что-то непроканало :(

и как сделать у кнопки тулбара узкую кнопочку со стрелкой вниз и выпадающим меню ? :)[/QUOTE]

Пробовал CreateWindowEx юзать?
Если нет - то читай в MSDN - там есть класс EDIT,незнаю прокатит ли на тулбаре,но попробуй...
18K
01 августа 2006 года
Densource
4 / / 28.07.2006
Dstr - Я конечно не гуру АПИ, но советовать юзать CreateWindowEx ))) ...

Побродил по свету и нашёл лишь MFC-примеры.

По части кнокочки для ДропДауна на сайтах и МСДН сказано что надо установить TBSTYLE_EX_DRAWDDARROWS для ExStyle ToolBar'a и TBSTYLE_DROPDOWN для нужной кнопки этого ТулБара. Результат - отсутствие такового ... Такое ощущение что когда придумывался этот функционал, то об АПИ сама М$ уже забыла.
292
02 августа 2006 года
Matush
726 / / 14.01.2004
На тулбар вешается все без проблем, я когда-то такое делал, может даже дома есть исходник.
Должно делаться так:
CreateToolbarEx(..., LPCTBBUTTON, ...)

LPCTBBUTTON -> структура в которой есть BYTE [COLOR=#800080]fsStyle[/COLOR] в которую уже и тусуй стиль контрола.
18K
02 августа 2006 года
Densource
4 / / 28.07.2006
УРААА !! я нашёл решение

Чтобы вставляемый на тулбар контрол не перекрывал кнопки создайте под ним сепаратор и в качестве битмапа укажите желаемую ширину в пикселах.

Вот мой код
//----------------------------------------------------------------------------//

#include <windows.h>
#include <commctrl.h>

HWND hEdit, hLabel, hButton, hClrLbl, hBtnFnt,hToolBar, htool2,hcool,
hCombo, hStatus, hList1, hList2, hBtnClr;

HMENU hFileMenu, hHelpMenu, hSubMenu, hMenu, hPopUp;

const IDM_Enable_Disable = 0;
const IDM_Exit = 1;
const IDM_About = 2;
const IDP_File=3;
const IDP_Help = 4;
const IDM_Bitmap =5;

const ToolBtns = 13;

//----------------------------------------------------------------------------//

long __stdcall MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY: { PostQuitMessage( 0 ); return 0;}
case WM_NOTIFY:
{
LPNMTOOLBAR lpnmtb = (LPNMTOOLBAR) lParam;
LPNMHDR lpnm = (LPNMHDR) lParam;
switch (lpnm->code)
{
case TBN_DROPDOWN:
{
switch (lpnmtb->iItem)
{
case 301:
RECT rc;
SendMessage( hToolBar, TB_GETRECT, lpnmtb->iItem, (LPARAM)&rc);
POINT pp;
ZeroMemory( &pp, sizeof(pp));
ClientToScreen( hToolBar, &pp );
TrackPopupMenuEx( hFileMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
rc.left+pp.x, rc.bottom+pp.y, hWnd, NULL);
break;
}
}
}
return 0;
}
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}

//----------------------------------------------------------------------------//

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
WNDCLASS wc = { CS_HREDRAW | CS_VREDRAW , MsgProc, 0L, 0L, hInstance,
LoadIcon(0, IDI_EXCLAMATION), LoadCursor(0, IDC_ARROW),
(HBRUSH)16, NULL, "Window" };
RegisterClass( &wc );
HWND hWnd = CreateWindow( "Window", "Интерфейс на WinAPI", WS_OVERLAPPEDWINDOW,// |WS_MINIMIZEBOX| WS_SYSMENU,
200, 200, 560, 270, NULL, NULL, wc.hInstance, NULL );



INITCOMMONCONTROLSEX icc={ sizeof(icc), ICC_BAR_CLASSES|ICC_COOL_CLASSES };
InitCommonControlsEx( &icc );

DWORD ws = WS_CHILD | WS_VISIBLE, ws2 = ws | WS_TABSTOP;

TBBUTTON tbb[ToolBtns];
int tbs[ToolBtns]={STD_FILENEW, STD_FILEOPEN, STD_FILESAVE, -1,150,-1, STD_CUT,
STD_COPY, STD_PASTE, -1, STD_UNDO, STD_REDOW, STD_HELP};
ZeroMemory( &tbb, sizeof(tbb));
for(int i=0; i<11; i++)
{
tbb.iBitmap=tbs;
tbb.idCommand=300+i;
tbb.fsState=TBSTATE_ENABLED;
if(tbs==-1) tbb.fsStyle=TBSTYLE_SEP; else
tbb.fsStyle=TBSTYLE_BUTTON ;
tbb.iString=0;
}
tbb[4].fsStyle=TBSTYLE_SEP;
tbb[1].fsStyle=TBSTYLE_DROPDOWN ;

hToolBar = CreateToolbarEx( hWnd, /*CCS_ADJUSTABLE |*/WS_VISIBLE |TBSTYLE_FLAT|TBSTYLE_REGISTERDROP, 299, 15, HINST_COMMCTRL,
IDB_STD_SMALL_COLOR, 0, 0, 16,16, 15,15, sizeof(TBBUTTON) );



DWORD EXST = (DWORD) SendMessage( hToolBar, TB_GETEXTENDEDSTYLE, 0, 0 );
SendMessage( hToolBar, TB_SETEXTENDEDSTYLE, 0, EXST|TBSTYLE_EX_DRAWDDARROWS );



hCombo = CreateWindowEx(WS_EX_CLIENTEDGE , "COMBOBOX", NULL, ws2 |WS_VSCROLL |
CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN ,
90, 0, 150, 150, hToolBar, (HMENU)513, wc.hInstance, NULL); //hCtrls[2] = hCombo;
SetWindowText( hCombo, "<< Выберите пункт >>");
SendMessage( hCombo, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Изменить заголовок" );
SendMessage( hCombo, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Добавить строку" );
SendMessage( hCombo, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Выход из программы" );
SendMessage( hCombo, CB_SETDROPPEDWIDTH, 200, 0 );

AppendMenu((hSubMenu=CreatePopupMenu()), MF_GRAYED | MF_STRING, 100,"Submenu 1 >");
AppendMenu( hSubMenu, MF_ENABLED | MF_STRING, 100,"Submenu 2");

AppendMenu((hFileMenu=CreatePopupMenu()), MF_ENABLED | MF_STRING, IDM_Enable_Disable, "&Enable exit");
AppendMenu( hFileMenu, MF_SEPARATOR, 0,"");
AppendMenu( hFileMenu, MF_ENABLED | MF_STRING | MF_POPUP,(UINT) hSubMenu,"&Right ->");
AppendMenu( hFileMenu, MF_GRAYED | MF_STRING, (IDM_Exit+200),"E&xit");
SendMessage( hToolBar, TB_ADDBUTTONS, (UINT)11, (LPARAM)(LPTBBUTTON) &tbb );

{
ShowWindow ( hWnd, SW_SHOWDEFAULT ), UpdateWindow( hWnd );
MSG msg;

while( GetMessage( &msg, NULL, 0, 0 ) )

if(!IsDialogMessage( hWnd, &msg ))
TranslateMessage( &msg ),
DispatchMessage ( &msg );


}
UnregisterClass( "Window", wc.hInstance );

}

//----------------------------------------------------------------------------//
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог