Dokowanie Tip'a ? Jak rozumiem chodzi o tworzenie własnej kontrolki na toolbarze
Więc małe how to, mam nadzieje że nie zapomniałem czegoś

Zmienne globalne:
CODE
WINDOWPROC ToolbarProcNew;
HWND MyControlWnd;
int zmienna;
Tworzymy własny toolbar
CODE
UIGroupAdd(IMIG_BAR, id_toolbara,0,"Nasz tip")
Potem button typu ACTT_HWND
CODE
UIActionAdd(id_toolbara, id_buttona ACTR_RESIZE|ACTT_HWND,"Nasz static");
Potem trzeba naszą akcję obsłużyć:
ActionProc
CODE
if(an->act.id==id_buttona){
if (anBase->code == ACTN_CREATEWINDOW) {
sUIActionNotify_createWindow * an = (anBase->s_size>=sizeof(sUIActionNotify_createWindow))?static_cast<sUIActionNotify_createWindow*>(anBase):0;
DWORD rozmiar = SendMessage((HWND) an->hwndParent, (UINT) TB_GETBUTTONSIZE, 0,0); //z tego co pamiętam wysokość toolbara
//tworzymy okno, jako pozycje należy podać an->x i an->y
an->hwnd = CreateWindow("combobox","& #34;,WS_TABSTOP|WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|CBS_DROPDOWN|WS_EX_CONTROLPA
RENT|WS_EX_NOPARENTNOTIFY,
an->x,an->y+((HIWORD(rozmiar)-20)/2),100,20,an->hwndParent,(HMENU)anBase->act.id,Ctrl->hDll(),NULL);
zmienna=LOWORD(rozmiar)-an->x; // to sie przyda;-)
//to takie dziwne przy y to wyśrodkowanie toolbara na wysokość, robie je tylko na starcie :P zakładając że wysokość kontrolko to 20 :)
//ustawiamy położenie okna i jego rozmiar w api K, należy x oraz y powiększyć o rozmiar
an->w=100;
an->h=20;
an->y+=100;
an->h+=20;
// Musimy toolbar K subclassować aby dynamicznie zmieniać jego rozmiar
ToolbarProc = (WNDPROC)SetWindowLong(an->hwndParent,GWL_WNDPROC, (LONG)ToolbarProcNew);
// cb_proc = (WNDPROC)SetWindowLongPtr(an->hwnd,GWLP_WNDPROC, (LONG_PTR)cb_proc_new);
SendMessage (an->hwnd , WM_SETFONT, (WPARAM) an->font, true ); // ustawiamy czcionkę
MyControlWnd = an->hwnd; //uchwyt do okna przyda się później
}
else if (anBase->code == ACTN_DESTROYWINDOW) {
//okno trzeba by zniszczyć
sUIActionNotify_destroyWindow * an = (anBase->s_size>=sizeof(sUIActionNotify_destroyWindow))?static_cast<sUIActionNotify_destroyWindow*>(anBase):0;
DestroyWindow(an->hwnd);
MyControlWnd = 0;
}
}
Procedura toolbara, dzięki temu automagicznie nasza kontrolka będzie się rozszerzała:
CODE
LRESULT CALLBACK tb_proc_new(HWND hWnd,UINT iMsg, WPARAM wParam, LPARAM lParam){
switch(iMsg){
case WM_SIZE:{
WORD rozmiar=(WORD)SendMessage((HWND) hWnd, (UINT) TB_GETBUTTONSIZE, 0,0);
sUIActionInfo ai;
ai.act = sUIAction ( id_toolbara, id_buttona);
ai.mask = UIAIM_SIZE;
ai.w = LOWORD(lParam) - LOWORD(rozmiar); //długość toolbara - długość buttona [w zmieniaczu mam obok button]
ai.h = HIWORD(lParam);
UIActionSet ( ai );
SetWindowPos(opis_wnd, HWND_TOP, 0, 0, LOWORD(lParam) - LOWORD(rozmiar) + zmienna, 20,SWP_ASYNCWINDOWPOS|SWP_NOMOVE); //ustawiamy okno
break;
}
}
return CallWindowProc(ToolbarProc,hWnd,iMsg,wParam,lParam);
}
ps. nazwy akcji można chyba pominąć,
ps2. w kpilot2 actt hwnd jest dodawane bezpośrednio na rebar, bez tworzenia toolbara (chyba)