C++ a odkazovani, jak je to vlastně?

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

Dík moc!

btw neexistuje nějaká funkce, která by vyvolala něco jako dropmenu pod editboxem, nevim jak se to jmenuje... Je to strašně podobný comboboxu, ale nema to takovou tu dropšipku a je to automatický... Má to v sobě Internet explorer (třeba když píšu do googlu nějaký slovo, objeví se pod nim bílej obdelník a v něm se vypíšou poslední hledané výrazy)
Nevíš o něčem takovym? :-)
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Primo funkce na to nebude. Bud to muzes udelat jako listbox, ktery se po urcitem case zobrazi pod editboxem, nebo to muzes zkusit udelat pres ownerdrawn combobox...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

thx, listbox mám, ještě bych se chtěl zeptat
1) jak nastavim, aby se listbox zobrazoval nad ostatnimi DlgItemy v okně
2) dá se nastavit, abych mohl na list box kliknout a aktuální řádek se zvýrazní a načte do proměnný, nebo je lepší řešení to ownerdrawn combobox?
3) jak se zjistí hodnota comboboxu?
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Hodnota ComboBoxu, tedy text ktery je prave vybran ziskas poslanim zpravy CB_GETCURSEL. Dostanes index, pomoci ktereho pak zpravou CB_GETLBTEXT dostanes vlastni text. Pri zmene vyberu se navic posila notifikace CBN_SELCHANGE, takze lze zmenu snadno zpracovat.

Kód: Vybrat vše

char * ComboText = NULL; //globalne definovana promena pro ulozeni vybraneho textu z comboboxu
...
//ve funkci pro zpracovani zprav dialogu
...
  case WM_COMMAND:
   switch(LOWORD(wParam))
   {
    ...

     case 1002:  //ID ComboBoxu
      switch(HIWORD(wParam))
      {
       int CurIndex, TxtLen;
 
       case CBN_SELCHANGE:   //vybrana polozka v comboboxu
        CurIndex = SendMessage((HWND) lParam, CB_GETCURSEL, 0, 0);   //ziska index aktualni polozky
        if(ComboText) delete [] ComboText;   //smaze stary text
        TxtLen = SendMessage((HWND) lParam, CB_GETLBTEXTLEN, CurIndex, 0);   //ziska delku textu
        ComboText = new char[TxtLen + 1];   //vytvori novy text ziskane delky
        SendMessage((HWND) lParam, CB_GETLBTEXT, CurIndex, (LPARAM) ComboText);   //nacte novy text
        break;
      }
   ...
   }
S tim listboxem k textu to bude jednodussi, kdyz si ho vytvoris jako samostatne okno se stylem WS_POPUP, nejak takhle:

Kód: Vybrat vše

 RECT tmpRect;
 GetWindowRect(GetDlgItem(hwnd, 1002), &tmpRect);
 hwndList = CreateWindow("LISTBOX", "ListBox",  WS_POPUP | LBS_STANDARD,  tmpRect.left, tmpRect.bottom, 200, 100, hwnd, 0, hThisInstance, NULL);
Tenhle kod vytvori samostatny listbox vznasejici se nad dialogem. Pokud s nim budes spravne zachazet (tzn nepisu text->schovat, pisu text->nacist do listboxu podobna slova a zobrazit), bude se to chovat stejne jako ten v exploreru. Jinak zpracovani zprav od ListBoxu je vicemene stejne jako od ComboBoxu, akorat misto CB_ je tam LB_,
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

no, tak jsem si udělal
staticHWND a pod něj napsal ten kód, ale mám s tim dva problémy:
1) listbox se vytvoří jako samostatný okno (je i v liště) a nakreslí se cca v levém horním rohu obrazovky, přestě ty rozměry získané GetwindowRectem

2) používá to system fixed font, nebo jak se to jmenuje, jak se tam nastavuje "Dialogovej" font?

THX za vše
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

problém je v tom, že když něco píšu do editboxu, listbox se překryje oknem s editboxem a když si tam dám automatickou aktivaci listboxu, musim znova kliknout na editbox, abych mohl psát, čímž zase zmizí listbox.
Pak kdyby se dala zrušit to okno na liště...

díky :-D
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Ten kod, co jsem psal o kus vyse vytvori ListBox tesne pod EditBoxem, bez okraju, bez zobrazeni v liste a navic zustava v popredi i kdyz pises do EditBoxu... Akorat tam musis spravne nastavit handly (hwnd je handle dialogu, 1002 je ID editboxu, hwndList je vysledny handle ListBoxu).
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

chápu správně, že handle dialogu(hwnd) je okno, kde je nakreslený editbox a vysledny handle ListBoxu(hwndList) je HWND okno, které tvoří Listbox?
Pořád to tam mám jako dvě okna...

pak jeden irelevantní dotaz: dá se vytvořit multiline char

Kód: Vybrat vše

char Text[20]="01\n02\n03";
nebo přidat do editboxu text, aby se nesmazal původní text?
Díky
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

To je divne, ze by ten samy kod delal u tebe neco jineho, nez u me... Posli kod, kterym vytvaris ten ListBox.

Multiline char takto vytvorit muzes. Pridat do editboxu text, aby se nesmazal puvodni nejde, muzes nacist stary, spojit s novym a nastavit editboxu.
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

no, tak z googlu jsem vyčetl, že na podporu newline v editboxu musim přidat nějaky parametry

ES_MULTILINE
ES_WANTRETURN
ES_AUTOHSCROLL

Nemůžu je ale přidat, protože ho mám vytvořenej v rc.souboru
existuje nějaká alternativa? V ResEdu mám multiline aktivovaný...

kód s listboxem osekám a pošlu, díky moc

EDIT: OK, v pohodě, problém byl v tom, že jsem volal dialog až po vytvoření listboxu :-D. Mám tam víc dialogovejch oken tak "se to nalepilo" z pro mě neznámýho důvodu na ten dialog, co byl volán před ním.
btw jak se mění font?
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Kdyz mas ty parametry zadane v resource editoru, tak je v programu nemusis zadavat znovu. Multiline se tam zadat da, WantReturn (Wantcr) taktez a AutoScroll taky. Jediny problem je, ze na ukonceni radku musis misto standartniho \n pouzit \r\n pak to jde bez problemu.

Font se meni bud v resource editoru pro cely dialog, nebo pomoci zpravy WM_SETFONT pro jednotliva okna. Nejprve treba pomoci funkce CreateFont vytvoris font, ktery chces pouzit a pak pomoci SendMessage(DestHwnd, WM_SETFONT, (WPARAM) Font, true); nastavis font prislusnemu oknu. Font musi byt v pameti po celou dobu behu programu, takze ho doporucuji vytvorit nekde na zacatku.
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

díky za všecko :-P,
btw neexistuje něco jako getfont, že by si to okopírovalo font z konkretniho dialogovyho okna?

Pak ještě jestli existuje nějaká funkce, která by seřadila 50 charů podle abecedy...

THX :-D
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Myslis jako ziskat font nejakeho konkretniho prvku v dialogu? Melo by fungovat tohle:

Kód: Vybrat vše

HDC hDC = GetDC(HwndTarget);
HFONT Font = GetCurrentObject(hDC, OBJ_FONT);
ReleaseDC(hDC);
Funkce na razeni zadna obecna neni, ale radicich algoritmu je spousta a napsat vlastni neni zadny problem...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

THX, měl bych tady ještě jeden lamackej dotaz

Např v průvodci instalací nějakého programu má okno nějaký obsah a tlačítko další. když na něj kliknu, tak se obsah změní (někdy je tam licenční smlouva, někdy editbox atd). ty všechny položky tam jsou od začátku načtené za běhu programu a skrývají se něčím podobným jako

Kód: Vybrat vše

ShowWindow(hwnd, SW_HIDE/*SHOW*/);
, nebo je to jinak. Chtěl bych se zaptat, jak to vlastně funguje :-)
díky
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Muzes to udelat jako dialog v dialogu, tzn udelas si jeden hlavni, ktery bude obsahovat ty tlacitka dalsi, konec a tak a umististis do nej ram, ve kterem se bude zobrazovat aktualni stranka. Pak si udelas vlastni dialogy pro jednotlive podstranky. Dale mas dve moznosti, bud vytvoris vsechny podstranky najednou a vsechny krome aktualni skryjes, nebo vytvoris jen jednu a pri kazde zmene stranky tu starou znicis a vytvoris novou... Ta prvni moznost ma vyhodu v tom, ze si bude pamatovat predchozi zadane hodnoty, tzn prechod na predchozi stranku bude bez problemu... Dialog v dialogu vytvoris normalne pomoci funkce CreateDialog, akorat jako handle parent okna das misto HWND_DESKTOP handle ramu, kam ho chces umstit.

Dalsi variantou by pak bylo udelat to jako TabStrip, kde by kazda zalozka obsahovala jeden dialog, coz by ale funkcne bylo stejne, jako vyse uvedene reseni...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

hh, dík, nechápu ale jak mám do rámu načíst dialog :-D. Je na to nějaká funkce?

Pak bych tady měl jeden o něco důležitější dotaz, a to jak načtu do obrázkovýho pole v rc souboru jpg/bmp soubor. zkoušel jsem LoadImage, ale asi špatně.

btw dá se tlačítko vytvořené za běhu programu attachnout do okna z rc souboru?

Díky
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Normalne jako vytvaris dialog z .rc souboru pomoci funkce

Kód: Vybrat vše

HWND hwndDialog = CreateDialog(hThisInstance, MAKEINTRESOURCE(1000), HWND_DESKTOP, DialogProc);
tak pouzijes tu samou funkci, ale misto HWND_DESKTOP zadas handle toho ramu. Pokud chces treba vytvorit dialog s ID 2000 do ramu s ID 1001 v prvnim dialogu, pouzijes

Kód: Vybrat vše

HWND hwndInDialog = CreateDialog(hThisInstance, MAKEINTRESOURCE(2000), GetDlgItem(hwndDialog, 1001), DialogProc);
Funkci pro zpracovani zprav muzes bud pouzit tu samou (a odlisit IDcka), nebo samostatnou...

Kdyz chces vytvorit tlacitko, postupujes stejne - do CreateWindow zadas jako parent handle ne HWND_DESKTOP, ale handle dialogu. Tlacitko se ti vytvori do nej a bude fungovat jako kdyby bylo jeho soucasti uz v .rc souboru.

Co se tyce nacitani obrazku, tak by melo jit, ze ho zadas v ResEdu a pak ho prave pomoci LoadImage nactes. Podporovany jsou ovsem myslim pouze formaty .ico a .bmp... Ja zobrazovani obrazku v dialogu resim pres GDI+, coz je takove univerzalnejsi...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

Díky moc.
Nějak mi nefunguje WM_NOTIFY u těch novejch "přidanejch" tlačítek. Neexistuje nějaká aternativa?

zkoušel jsem vložit jeden dialog do TAB-pole v jiném dialogu, ale pořád se mi zobrazují dvě okna...
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
Coburn
Začátečník
Začátečník
Registrován: 12. čer 2006
Bydliště: Kobenhavn, Denmark
Kontaktovat uživatele:

Příspěvek od Coburn »

hodil bys mi sem prosim kód na vytvoreni prazdneho obdelniku za behu programu?

jinak ten dialog v dialogu mi nejde ani, když je R_LIST v rc souboru...
thx...
CPU: Intel Core2 Duo E6300 2,33Ghz, GPU: Leadtek Winfast PX7600GS, MB: MSI P965 NEO-F, PSU-ASUS XXX 450W, HDD: Seagate Barracuda 7200.10, 320GB
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek od €agle »

Obdelniku jako okna, nebo obdelniku jako grafickeho obdelniku?

Jinak posli kod, kterym vytvaris ten dialog v dialogu, prece to zas nepujde jenom u me a u tebe uz ne...
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Odpovědět

Zpět na „Programování a web“