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 »

Thx
dělal jsem pokus, že si to celý napíšu uplně znova, ale povedlo se mi, že tlačítko z resource souboru vykreslilo na plochu místo na základní okno z rc souboru, které se ani nezobrazuje. Místo hlavního okna z rc souboru se zobrazuje konzolové okno.
Netušíš, v čem může být chyba?

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 se takhle bez kodu da tezko rict, kde je chyba... Popravde aby se mi vykreslilo tlacitko rovnou na plochu, to se mi jeste nepovedlo :)
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 »

Tak jsem na to šel jinou cestou, ale ať dělám co dělám, tlačítko z *.rc souboru se ne a ne pohnout

Dělám něco špatně?

Kód: Vybrat vše

HWND hwbutton = GetDlgItem(hwndDlg, 2001);
...
case WM_SIZE:
SetWindowPos(hwbutton, hwndDlg, 50, 50, 50, 50, 2001);
break;
...
Dík moc
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 to mas ve WM_SIZE, tak to bude reagovat jenom, kdyz se zmeni velikost dialogu. Taky mas spatne ten posledni parametr u SetWindowPos, nema tam byt cislo okna, ale parametry (viz MSDN). K presunu okna je ale stejne lepsi pouzit funkci MoveWindow...
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 »

MoveWindow taky nefunguje
mohl bys mi prosim ukázat nějaký příklad jako minule, kde se vytvořené tlačítko v rc souboru načte do nějakého HWND přes GetDlgItem() a pak se určuje jeho velikost?
Bez tohodle příkladu se neknu, protože tam dělám asi jednu věc špatně a netušim kterou

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 »

Jednoduchy priklad, tlacitko, ktere po dialogu jezdi ze strany na stranu: zdrojak, .rc soubor
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 »

Super, už to chápu, Dík moc

nevěděl bys ještě, jak se aktivujou XP a Vista buttonky? v ResEdu to funguje normálně, ale v Programu to působí jak z NT4
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 »

Na zacatek programu includovat <commctrl.h>, na zacatku WinMain zavolat InitCommonControls(); v nastaveni projektu hned na prvni strane povolit "Support Windows XP Themes" a pak pridat do linkeru libcomctl32.a (s patricnou cestou).
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
Dá se nějakým jednodužším způsobem natáhnout do editboxu odstavec o cca 300 slovech po 30zn, než abyh ho musel natahovat do programu přes fstream a pak ho přes strcat spojovat. přijde mi to zbytečně komplikovaný...
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 u fsteamu pouzit funkci getline na nacteni radku celeho radku, tim se ti to zjednodusi. Druha moznost je zjistit velikost souboru a pouzit funkci read.
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 »

ta read vypadá hezky, jinak je tohle ono?
http://msdn2.microsoft.com/en-us/library/db5x7c0d.aspx
nějak to nechápu

Pak ještě dotaz jak nastavim ikonu *.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 »

Ne to neni ono, to je pro .NET respektive C#. Tohle je ono...

Nastavenim ikony .rc souboru myslis asi nastaveni ikony dialogu. Nejprve v resource editoru pridej Resource, typ Icon, Name a ID jaky chces (nesmi byt stejne jako nektera cast dialogu) a jako Filename cestu k souboru .ico. V .rc souboru by to melo nasledne vypadat nejak takto:

Kód: Vybrat vše

TestIcon ICON DISCARDABLE "C:/Icons/General.ico"
pricemz TestIcon je na zacatku definovano jako 1100 (#define TestIcon 1100).
V samotnem programu pote pouzij nasledujici na nastaveni ikony:

Kód: Vybrat vše

 HICON hIcon = (HICON) LoadImage(hThisInstance, MAKEINTRESOURCE(1100), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
//hThisInstance je instance programu
//MAKEINTRESOURCE(1100) udava ID ikony, ktera se ma pouzit (1100)
//IMAGE_ICON udava, ze se jedna o ikonu
//0, 0 jsou vyska a sirka ikony, pri pouziti LR_DEFAULTSIZE se pouzije automaticka

SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
//hwnd je okno, kteremu se ma ikona nastavit
//WM_SETICON - zprava pro nastaveni ikony
//ICON_SMALL nastavi malou ikonu (viditelna v taskbaru a ramu okna), ICON_BIG nastavi velkou ikonu (viditelna pri Alt-Tab)
//hIcon je handle ikony vytvorene horni funkci
Vyse uvedene funkce muzes volat v podstate kdykoli po vytvoreni dialogu, treba hned po CreateDialog nebo treba pri zpracovani zpravy WM_INITDIALOG...
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 ješte pár detailů:
1) Jak se zapisuje ve WinApi PerformStep, aby se zvětšil obsah progressbaru o x;
2) Dá se nějak odchytit stisknutí klávesy třeba ctrl + s?
3) Jak přidám do ComboBoxu slova, jestliše ho mám vytvořeny v *.rc souboru? Tušim, že to bude jednodušší, než listview
4) Jak se načítá hodnota Trackbaru do proměnné?
Dá se v trackbaru nastavit, aby skákal po třeba 25%?

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 »

1) ProgressBar se ve WinApi ovlada pomoci zprav, ktere mu posilas pomoci SendMessage. Nejdriv pomoci PBM_SETRANGE nastav rozsah (muzes nechat i defaultni 0-100) a pak pomoci PBM_SETPOS nastavis hodnotu v danem rozsahu a progressbar ji zobrazi. Pripadne muzes pouzit PBM_SETSTEP na nastaveni delta hodnoty, ktera bude pri kazdem poslani zpravy PBM_STEPIT prictena k aktualni hodnote. Vice na MSDN

2) Ano dá. Klávesové zkratky se v dialogu zpracovavaji pomoci takzvanych Acceleratoru. V resource editoru pridas do projektu tabulku akceleratoru (Project/Add accelerator), pak pomoci Add pridas vsechny klavesove zkratky co potrebujes, kazde priradis unikatni jmeno a ID. Tabulce akceleratoru taky prirad nejake unikatni ID (treba ID tabuky 2000 a zkratky 2001, 2002...). Po ulozeni by .rc souboru mela tabulka akceleratoru vypadat nejak takto

Kód: Vybrat vše

#define IDR_ACCEL 2000
#define CtrlShiftK 2001
#define CtrlF 2002
IDR_ACCEL ACCELERATORS
BEGIN
  75,CtrlShiftK,VIRTKEY,CONTROL,SHIFT,NOINVERT
  70,CtrlF,VIRTKEY,CONTROL,NOINVERT
END
V programu je pote nejdriv potreba nacist tabulku akceleratoru pomoci LoadAccelerators()

Kód: Vybrat vše

HACCEL hAccel = LoadAccelerators(hThisInstance, MAKEINTRESOURCE(2000));
//hThisInstance - instance programu
//MAKEINTRESOURCE(2000) - 2000 je ID tabulky akceleratoru
a nasledne pridat funkci TranslateAccelerator() k funkcim na zpracovani zprav

Kód: Vybrat vše

TranslateAccelerator(hwnd, hAccel, &messages);
...
TranslateMessage(&messages);
DispatchMessage(&messages);
Nyni ti pri stisknuti dane kombinace prijde notifikace ve forme zpravy WM_COMMAND stejne, jako ti chodi treba od tlacitek

Kód: Vybrat vše

  case WM_COMMAND:
   switch(LOWORD(wParam))
   {
    case 2001:
     MessageBox(0, "Ctrl-Shift-K", "Prvni", 0);
     break;

    case 2002:
     MessageBox(0, "Ctrl-F", "Druhy", 0);
     break;
   }
   break;
Dalsi info na MSDN

3)

Kód: Vybrat vše

 SendMessage(GetDlgItem(hwnd, 1002), CB_ADDSTRING, 0, (LPARAM) "Text");
//hwnd - handle dialogu
//1002 - ID ComboBoxu
//CB_ADDSTRING - zprava pro pridani polozky
//0 - nepouziva se, musi byt 0
//"Text" - text, ktery chces pridat
Opet viz MSDN

4)

Kód: Vybrat vše

 int Val = SendMessage(GetDlgItem(hwnd, 1003), TBM_GETPOS, 0, 0);
//Val je vysledna hodnota v rozmezi MinRange a MaxRange Trackbaru
//hwnd - handle dialogu
//1003 - ID TrackBaru
//TBM_GETPOS - zprava pro ziskani hodnoty
//0 - nepouziva se, musi byt 0
//0 - nepouziva se, musi byt 0
Tradicne na MSDN

5) Muzes mu bud nastavit TickFrequency

Kód: Vybrat vše

 SendMessage(GetDlgItem(hwnd, 1003), TBM_SETTICFREQ, (WPARAM) 10, 0);
//hwnd - handle dialogu
//1003 - ID TrackBaru
//TBM_SETTICFREQ - zprava pro nastaveni frekvence ticku
//10 - tick kazdou 10. hodnotu
//0 - nepouziva se, musi byt 0
cimz budes mit porad moznost delat i jemne zmeny. Nebo nastav Trackbaru maly rozsah a vysledne hodnoty podle potreby vynasob...


(koukam, ze bych tenhle thread mohl pomalu vydat jako knizku :))
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, to je fakt :-)

btw je normální, že Dialogy pracující přes LRESULTS CALLBACK nezaregistrovávaj globálně definovaný proměnný a fstreamy? :-)
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 »

Heh, neni :)
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 »

sry, špatně jsem se vyjádřil
program se zkompiluje bez problémů, ale když v tý funkci zpracovávající zprávy dialogu mám fin >> Text;, nic se nenačte
když napíšu ifstream fin(xxx) nad switch, tak se načítá pořád stejné slovo.

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 »

Globalne (na zacatek kodu) si definuj fstream fin; (nebo istream), v main funkci (nebo proste tam kde chces soubor otevrit) dej fin.open("soubor.txt") a pak z nej muzes vsude dal vesele cist. Na konci programu potom zavolej fin.close() pro zavreni souboru...
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íkec, už to maká :-)

ještě dotaz, jak se disabluje MAXIMILIZACE okna (aby to nereagovalo ani na dvojklik na lištu okna), jak se nastavuje sysmenu, aby tam byl jenom CLOSE

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 »

V resource editoru mas polozku MinButton a MaxButton, kdyz je nastavis obe na false, zustane ti jenom Close. Kdyz je MaxButton na false, nejde okno maximalizovat zadnym zpusobem.
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“