Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Rebar Band problem ...

[es] :: C++ programiranje :: Rebar Band problem ...

[ Pregleda: 777 | Odgovora: 4 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sucur
Miljan Sucur
Web Developer, Team Consulting
Istocno Sarajevo

Član broj: 50035
Poruke: 308
87.250.109.*



Profil

icon Rebar Band problem ...27.09.2006. u 16:24

Pooz, ako neko zna da nadje problem u postavljenom kodu, zasto mi se samo prikaze kontrola koja se pozove kod zadnjeg "RB_SETREBARINFO", u ovom slucaju je to toolbar, dok se kombobox ne prikazuje. A ako zamijenim mjesta, tj. prvom pozivu stavim RBBI.hwndChild toolbar, a drugom combobox, oonda ce samo da iscrta combobox, dakle sto ne isrtava obje okontrole ?!

PS. Izbacen je neki kod, koji se tice ucitavanja slika za toolbar, kako bi bio pregledniji.

Code:
class REBARCLASS
{
public:
    REBARCLASS(){
    succ = true; 
    ToolbarID[0] = 2301;
    ToolbarID[1] = 2302;
    ToolbarID[2] = 2303;
    ToolbarID[3] = 2304;
    };
    ~REBARCLASS(){;};
    HWND hwndCB;
    HWND hwndTB;
    HWND hwndRB;
    REBARINFO RBI;
    REBARBANDINFO RBBI;
    TBBUTTON tb[4];
    HIMAGELIST hil;
    RECT RC;
    HBITMAP hToolbarImage;
    DWORD dwBtnSize;
    int itextToobar[4];
    int ToolbarID[4];
    bool succ;
    bool CreateReber(HWND&, REBARCLASS&, HINSTANCE&);
};

bool REBARCLASS::CreateReber(HWND& hwnd, REBARCLASS& rbc, HINSTANCE& hInst)
{

    rbc.hwndRB = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, 
        WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN  
        | RBS_BANDBORDERS | CCS_NODIVIDER  | RBS_VARHEIGHT, 
        0, 0, 0, 0, hwnd, NULL, hInst, NULL);;
    
    if(!rbc.hwndRB)
    {
    errmsg(GetLastError(), "Create Window");
    return 0;
    }

    rbc.RBI.cbSize = sizeof(REBARINFO);
    rbc.RBI.fMask = 0;
    rbc.RBI.himl = (HIMAGELIST)NULL;
    
    if(!SendMessage(rbc.hwndRB, RB_SETBARINFO, 0, (LPARAM)&rbc.RBI))
    {
    errmsg(GetLastError(), "Set Control");
    return 0;
    }


    rbc.RBBI.cbSize = sizeof(REBARBANDINFO);
    rbc.RBBI.fMask = RBBIM_COLORS | RBBIM_TEXT | RBBIM_BACKGROUND | 
                   RBBIM_STYLE | RBBIM_CHILD  | RBBIM_CHILDSIZE | 
                   RBBIM_SIZE;
    rbc.RBBI.fStyle = RBBS_CHILDEDGE | RBBS_VARIABLEHEIGHT | RBBS_GRIPPERALWAYS;
    

    rbc.hwndCB = CreateWindowEx(NULL, "COMBOBOX", NULL, WS_CHILD | WS_VISIBLE  | CBS_SORT | CBS_DROPDOWN, 
        0, 10, 100, 26, rbc.hwndRB, NULL, hInst, NULL);
    SendMessage(rbc.hwndCB, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), NULL);

    GetWindowRect(rbc.hwndCB, &rbc.RC);

    rbc.tb[0].fsState = TBSTATE_ENABLED;
    rbc.tb[0].fsStyle = TBSTYLE_BUTTON;
    rbc.tb[0].iBitmap = 1;
    rbc.tb[0].idCommand = rbc.ToolbarID[0];
    rbc.tb[0].iString = rbc.itextToobar[0];

    rbc.tb[1].fsState = TBSTATE_ENABLED;
    rbc.tb[1].fsStyle = TBSTYLE_BUTTON;
    rbc.tb[1].iBitmap = 2;
    rbc.tb[1].idCommand = rbc.ToolbarID[1];
    rbc.tb[1].iString = rbc.itextToobar[1];

    rbc.tb[2].fsState = TBSTATE_ENABLED;
    rbc.tb[2].fsStyle = TBSTYLE_BUTTON;
    rbc.tb[2].iBitmap = 3;
    rbc.tb[2].idCommand = rbc.ToolbarID[2];
    rbc.tb[2].iString = rbc.itextToobar[2];

    rbc.tb[3].fsState = TBSTATE_ENABLED;
    rbc.tb[3].fsStyle = TBSTYLE_BUTTON;
    rbc.tb[3].iBitmap = 4;
    rbc.tb[3].idCommand = rbc.ToolbarID[3];
    rbc.tb[3].iString = rbc.itextToobar[3];


    if(!(rbc.hwndTB = CreateWindowEx(NULL, TOOLBARCLASSNAME, NULL, 
        WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | 
        TBSTYLE_TOOLTIPS | TBSTYLE_LIST | CCS_NORESIZE | CCS_NODIVIDER,
        0, 0, 0, 0, rbc.hwndRB, NULL, hInst, NULL)))
        errmsg(GetLastError(), "Create Toolbar");

    SendMessage(rbc.hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), NULL);
    SendMessage(rbc.hwndTB, TB_SETIMAGELIST, 0, (LPARAM)rbc.hil);
    SendMessage(rbc.hwndTB, TB_ADDBUTTONS, (WPARAM) 4, (LPARAM) &rbc.tb);

    rbc.dwBtnSize = SendMessage(rbc.hwndTB, TB_GETBUTTONSIZE, 0, 0);
    

    SendMessage(rbc.hwndRB, RB_INSERTBAND, (WPARAM)NULL, (LPARAM)&rbc.RBBI);

    rbc.RBBI.lpText     = "Address";
    rbc.RBBI.hwndChild  = rbc.hwndCB;
    rbc.RBBI.cxMinChild = rbc.RC.bottom - rbc.RC.top;
    rbc.RBBI.cyMinChild = 32;
    rbc.RBBI.cx         = 10;
    
    SendMessage(rbc.hwndRB, RB_SETBANDINFO, NULL, (LPARAM)&rbc.RBBI);;
    

    SendMessage(rbc.hwndRB, RB_INSERTBAND, (WPARAM)NULL, (LPARAM)&rbc.RBBI);

    rbc.RBBI.lpText = "Tool bar";
    rbc.RBBI.hwndChild = rbc.hwndTB;
    rbc.RBBI.cxMinChild = HIWORD(rbc.dwBtnSize)*2;;
    rbc.RBBI.cyMinChild = 32;
    rbc.RBBI.cx = 0;

    SendMessage(rbc.hwndRB, RB_SETBANDINFO, NULL, (LPARAM)&rbc.RBBI);

    
    return rbc.succ;
};
27.09.2006. u 16:24 

sucur
Miljan Sucur
Web Developer, Team Consulting
Istocno Sarajevo

Član broj: 50035
Poruke: 308
87.250.109.*



Profil

icon Re: Rebar Band problem ...28.09.2006. u 00:02
i niko nezna ??!!
28.09.2006. u 00:02 

k4rl0
Localhost

Član broj: 87683
Poruke: 129
*.adsl.net.t-com.hr.



Profil

icon Re: Rebar Band problem ...28.09.2006. u 08:34
Nije da niko ne zna,al tesko da se nekome da sad od ove
hrpe koda trazit problem :|
28.09.2006. u 08:34 

stargazer
bgd

Član broj: 85916
Poruke: 117
*.eunet.yu.



Profil

icon Re: Rebar Band problem ...28.09.2006. u 13:15
Code:

    rbc.RBBI.cbSize = sizeof(REBARBANDINFO);
    rbc.RBBI.fMask = RBBIM_COLORS | RBBIM_TEXT | RBBIM_BACKGROUND | 
                   RBBIM_STYLE | RBBIM_CHILD  | RBBIM_CHILDSIZE | 
                   RBBIM_SIZE;
    rbc.RBBI.fStyle = RBBS_CHILDEDGE | RBBS_VARIABLEHEIGHT | RBBS_GRIPPERALWAYS;
    // ....
    SendMessage(rbc.hwndRB, RB_INSERTBAND, (WPARAM)NULL, (LPARAM)&rbc.RBBI);

Ovde zadaješ flagove u fMask član, a nigde ih ne ispunjavaš ( osim fStyle ) pre poziva RB_INSERTBAND. Ko zna kakvo se ponašanje javlja u takvoj situaciji. Takođe, ni pri kasnijoj upotrebi te strukture u pozivu RB_SETBANDINFO, opet ne ispunjavaš hbmBack ( RBBIM_BACKGROUND ) i clrFore & clrBack ( RBBIM_COLORS ) članove.
Preporučio bih ispunjavanje REBARBANDINFO strukture sa odgovarajućim vrednostima pre slanja RB_INSERTBAND poruke, kao i njeno slanje sa (WPARAM)-1 vrednošću parametra wParam.

Pretpostavka :
Prilikom slanja RB_INSERTBAND poruke drugi put, REBARBANDINFO struktura ti je tada već ispunjena, tj. posle tog slanja imaš 2 banda od kojih bi oba trebalo sadrže combobox. Pitanje je kakvo je ponašanje rebar kontrole u toj situaciji. Moguće je da posle tog drugog slanja, band koji biva ubačen sadrži combobox, a prvi band ga više ne sadrži i kada pozoveš RB_SETBANDINFO drugi put, toolbar zamenjuje combobox i javlja se situacija koju imaš.

Nadam se da je pomoglo...
With no lovin' in our souls and no money in our coats you can't say we're satisfied
28.09.2006. u 13:15 

sucur
Miljan Sucur
Web Developer, Team Consulting
Istocno Sarajevo

Član broj: 50035
Poruke: 308
87.250.109.*



Profil

icon Re: Rebar Band problem ...28.09.2006. u 15:13
Sredio sam stvar, zahtjevao je poziv oba RB_INSERTBAND prije slanja oba RB_SETBANDINFO.
28.09.2006. u 15:13 

[es] :: C++ programiranje :: Rebar Band problem ...

[ Pregleda: 777 | Odgovora: 4 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.