Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: button => label
Konnekt | Forum > Developerzy > Tworzenie wtyczek
atol
chodzi mi o to czy zamisat buttona można wygenerować coś ala label z VB o określonej wielkości. Chętnie prosił bym tez o jaką wskazówkę jak to wykonać bo wiem że się da tylko nie wiem jak :wink: (chyba troszke to napisałem jak potłuczone dziecko)
hao
Przerzuciłem to do @Dev, bo hydepark to chyba średnie miejsce na takie pytania...

Szczerze mówiąc nie wiem do końca co chcesz osiągnąć... Coś jak zadokowany na toolbarze tip?
Olórin
Label w VB to to samo co WinApowskie STATIC smile.gif
atol
QUOTE(hao)
Szczerze mówiąc nie wiem do końca co chcesz osiągnąć... Coś jak zadokowany na toolbarze tip?


chce zrobić taką wtyczkę pierdołe... a zo z tym tipem to coś miedzy tym tyl;ko z czymś extra :wink:

jak mi wyjdzie to jeszcze po weekendzie się ukaże
atol
kolejne pytanie... jak taki "tip" zmajstrować. Wiem jak dodać button ale nie wiem jak zamiast takiego buttona dać mojego kochanego statica tongue.gif
hao
Czy "KPilotowcy" albo Ty Olórin możecie poratować kawałkiem kodu? Dokowanie Tipa jest wyjatkowo nieprzyjaźnie napisane wink.gif
Olórin
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ś smile.gif
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)
hao
QUOTE
ps2. w kpilot2 actt hwnd jest dodawane bezpośrednio na rebar, bez tworzenia toolbara (chyba)

I jest to nawet wskazane jeżeli nie używamy przycisków
atol
dysk sie sypną... bez backupa nie mam nic i musze zaczynać od nowa. Może zrobie coś ambitniejszego...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.