Page 1 of 1

CWnd derived class not working

Posted: 06 Dec 2012, 14:07
by nmg
In primul rand, buna ziua dupa o lunga perioada in care nu am mai dat pe aici, ma bucur sa va regasesc.

In al doilea rand, iata problema: intr-un proiect doc / view facut in VC 2006, vreau sa implementez o fereasta de cautare, cum are Chrome: cand apesi Ctrl + F, apare o mica fereastra sub toolbar (deci in spatiul client al view-ului), cu un edit si trei butoane alaturi: inainte, inapoi si exit.

Pentru asta am derivat o clasa CSearchWnd din CWnd in care am creat dinamic cele 3 controale de care ziceam. In CMainFrame am facut o variabila de acest fel, care apoi a fost creata in CMainFrame::OnCreate impreuna cu toolbar si statusbar.

La rulare, fereastra in cauza este creata, apara ca vizibila dar nu accepta nici un fel de input: edit-ul si butoanele nu functioneaza.

Ce anume am scapat din vedere ?

Re: CWnd derived class not working

Posted: 06 Dec 2012, 14:56
by Ovidiu Cucu
Ca o paranteza: de VC2006 (sau VS2006) n-am auzit. Poate vrei sa spui 2002/3/5/8/10/12 sau 6.0.
FYI, batranul Visual Studio 6.0 a fost lansat in anul de gratie 1998.
In fine nu prea conteaza in problema noastra...

Ceea ce inteleg ca vrei sa faci, adica o fereastra continand cateva controale pe care s-o "agati" de frame, se realizeaza cel mai bine, mai usor si fara dureri de cap cu un dialog bar (vezi clasa MFC CDialogBar).

Nu are rost in MFC sa reinventezi roata (ex. sa derivezi direct din CWnd), atunci cand ai in ceva "gata preparat".

Re: CWnd derived class not working

Posted: 06 Dec 2012, 15:02
by Ovidiu Cucu
...o alternativa buna pentru functia de cautare ar fi si un dialog obisnuit, folosind o clasa derivata din CDialog.

Re: CWnd derived class not working

Posted: 06 Dec 2012, 15:15
by nmg
In ceea ce priveste VC 2006, e greseala mea. Ma gandeam cum sa explic mai bine problema si n-am dat atentie. VS 6.0, asta e.

Referitor la problema, sunt constient ca exista si solutii clasice. Ceva derivat din CDialogBar sau un dialog ar merge cu siguranta dar n-ar avea acelasi "feeling".

Nu imi dau seama de ce nu merge, mai ales ca un control dintr-o clasa predefinita (edit, combo) functioneaza fara probleme.

Re: CWnd derived class not working

Posted: 06 Dec 2012, 15:48
by Ovidiu Cucu
Ca sa obtii exact acelasi feeling ca la find-ul de la Google Chrome ar trebui sa desenezi cu manuta ta si sa plasezi controale in zona non-client a frame-ului, ceea ce zic eu ca nu-i chiar simplu.
Pentru un feeling ca la, sa zicem Adobe Reader e ceva mai simplu. Faci un dialog nemodal, pe care-l lipesti in dreapta-sus a frame-ului. Nu-i greu.

De ce-ai crede ca trebuie neaparat derivat din CWnd si creat contoralele dinamic? In fond si la urma urmei, un dialog e tot o fereastra. Atata doar ca te ajuta prin faptul ca poti aranja controalele WYSIWYG la design, are de la mama lui support pentru navigare intre controale si altele asemenea care te scapa de dureri de cap pentru un container de controale. In rest, poti sa-l faci sa arate (sau sa look & feel :)) cum vrea muschii tai, ca pe oricare alta fereastra.

Re: CWnd derived class not working

Posted: 06 Dec 2012, 16:13
by nmg
ok, o sa incerc si cu un dialog nemodal. sa vedem ce iese. :)

Re: CWnd derived class not working

Posted: 06 Dec 2012, 16:37
by Ovidiu Cucu
nmg wrote:ok, o sa incerc si cu un dialog nemodal. sa vedem ce iese. :)
Ce sa iasa? Un dialog nemodal. :D
Ok, daca-ti face probleme, mai vorbim...