Stránka 3 z 7

Napsal: pát 13. črc 2007, 13:44
od Coburn
Kompilátor tvrdí, že hInstance nebyla deklarována. Z jaké části hlavní funkce že ji mám zjistit?

Jinak jak jsem se tak koukal na ten RecEd, tak v něm se dá udělat celá vizuální stránka programu. Chápu to správně, že se v tomhle "nakreslí" vedlejší okno programu? Nebo se v něm dá udělat celý program?
Dialogy komunikují s hlavním oknem pouze přes proměnné ID_XXX?
díky

Napsal: pát 13. črc 2007, 21:03
od Coburn
heh, možná dělám všechno uplně špatně...

v ResEdu si mám vytvořit nové okno, nebo začít jinak.

na msdn jsem nice našel spoustu příkazů na formátování a řazení tabulky, ale ne syntax, jak ji vytvořit, tak jestli bys mi sem plz nenapsal jednoduchy příklad 2x2 tabulky a jak se do ní vkládá řetězec.

jinak za vše díky

Napsal: pát 13. črc 2007, 21:17
od €agle
hInstance dostanes jako hThisInstance ve vstupni funkci programu (vetsinou pojmenovane jako Main nebo WinMain).
V ResEdu, pokud chces vytvorit dialogove okno, vytvoris novy projekt, das Project/Add dialog a potom tam uz jenom pridavas prvky, jake potrebujes. Je to v podstate WYSIWYG editor oken, pridas si tam tlacitka, texty a editboxy, nastavis jejich parametry a pak si to ulozis jako .rc soubor. Mel bych te jeste upozornit, ze ListView, TabView a podobne slozitejsi prvky nelze pouzit, jelikoz to nejsou zakladni soucasti oken a pri jejich pouziti ti program hned po spusteni spadne... Ty se pak musi vytvaret rucne.
Jinak na to MSDN jsi asi koukal spatne, jelikoz tady mas priklady vytvoreni tabulky, pridavani sloupcu i radku.

Napsal: sob 14. črc 2007, 00:38
od Coburn
Ještě malá otázečka:
kompilátor hlásí chybu s řádkem

Kód: Vybrat vše

icex.dwICC  = ICC_LISTVIEW_CLASSES;
jak to mam opravit plz?

Kód: Vybrat vše

typedef struct tagINITCOMMONCONTROLSEX {
    DWORD dwSize;
    DWORD dwICC;
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;

void InitCommonControls(VOID);

HWND CreateListView (HWND hwndParent) 
{     
    RECT rcl; 
    INITCOMMONCONTROLSEX icex;
    
    // Ensure that the common control DLL is loaded. 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC  = ICC_LISTVIEW_CLASSES; // chyba
    InitCommonControlsEx(&icex); 
    
    // Create the list-view window in report view with label editing enabled.
    GetClientRect (hwndParent, &rcl); 
    
    HWND hWndListView = CreateWindow(WC_LISTVIEW, 
                                "", 
                                WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 
                                0, 
                                0, 
                                rcl.right - rcl.left, 
                                rcl.bottom - rcl.top, 
                                hwndParent, 
                                (HMENU)ID_LISTVIEW, 
                                hInst, 
                                NULL); 
                                
    return (hWndListView);
}
thx

Napsal: sob 14. črc 2007, 01:04
od €agle
To

Kód: Vybrat vše

typedef struct tagINITCOMMONCONTROLSEX { 
    DWORD dwSize; 
    DWORD dwICC; 
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX; 

void InitCommonControls(VOID);
bys ve svem programu nemel mit, to uz je definovano v hlavickach Windows.
Co se toho listu tyce, tak nahrad cele tohle

Kód: Vybrat vše

    INITCOMMONCONTROLSEX icex; 
    
    // Ensure that the common control DLL is loaded. 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX); 
    icex.dwICC  = ICC_LISTVIEW_CLASSES; // chyba 
    InitCommonControlsEx(&icex); 
   
timhle

Kód: Vybrat vše

InitCommonControls();

Napsal: sob 14. črc 2007, 01:19
od Coburn
diky

problem se posunul dal

Kód: Vybrat vše

    HWND hWndListView = CreateWindow(WC_LISTVIEW, 
                                "", 
                                WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 
                                0, 
                                0, 
                                rcl.right - rcl.left, 
                                rcl.bottom - rcl.top, 
                                hwndParent, 
                                (HMENU)ID_LISTVIEW, 
                                hInst, 
                                NULL); 
                                
    return (hWndListView);
}
In function `HWND__* CreateListView(HWND__*)':
`WC_LISTVIEW' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
`LVS_REPORT' undeclared (first use this function)
`LVS_EDITLABELS' undeclared (first use this function)
`ID_LISTVIEW' undeclared (first use this function)
`hInst' undeclared (first use this function)
[Build Error] [Test.o] Error 1

nemam neco specialniho includovat?
na MSDN o deklaraci nic nepsali

Napsal: sob 14. črc 2007, 23:30
od €agle
Jsem zapomnel, musis includovat <commctrl.h> :oops:

Napsal: ned 15. črc 2007, 21:14
od Coburn
thx, uz to jenom chce deklaraci hInst

když si do zavorky pripisu ", HINSTANCE hInst", tak to vyhodí build error

Kód: Vybrat vše

 HWND CreateListView (HWND hwndParent/*, HINSTANCE hInst*/) 
{     
    RECT rcl; 
InitCommonControls();
    
    GetClientRect (hwndParent, &rcl); 
    
    HWND hWndListView = CreateWindow(WC_LISTVIEW, 
                                "", 
                                WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 
                                0, 
                                0, 
                                rcl.right - rcl.left, 
                                rcl.bottom - rcl.top, 
                                hwndParent, 
                                (HMENU)ID_LISTVIEW, 
                                hInst, 
                                NULL); 
                                
    return (hWndListView);
}
pak bych se chtel zeptat, jestli se dá jednoduše říct strstr(*,*), aby nerozlišoval velká a malá písmena.

Napsal: pon 16. črc 2007, 00:44
od €agle
HINSTANCE hInst by melo jit, pokud se ti to nekrizi s predchozi deklaraci te funkce (tzn. nekde nahore v programu mas deklaraci a az dale v kodu definujes vlastni funkci), co to hlasi za chybu?

strstr nemuzes primo rict, aby rozlisovala velka a mala pismena. Moznosti je projit retezec po jednotlivych znacich a pomoci funkci tolower() a toupper() prevest cely text bud na velka nebo na mala pismena a ten nasledne porovnavat... Nejsem si ale jisty, zda to bude fungovat i pro ceske znaky typu ěščř...

Napsal: pon 16. črc 2007, 01:19
od Coburn
neni chyba, ze predchazejici text mam napsany tesne PŘED
"LRESULTS CALLBACK" před MainWndProc?

chyba

Test.o(.text+0x3be5) In function `Z14CreateListViewP6HWND(HINSTANCE__ *)':
[Linker error] undefined reference to `InitCommonControls@0'
Test.o(.text+0x3be5) ld returned 1 exit status
Makefile.win [Build Error] [WinTest.exe] Error 1

jinak jako v notepadu, wordu apod se při vyhledávání v textu rozlišování písmen dělá taky takhle komplikovaně? Nemaj na to nějakou knihovnu?

Napsal: pon 16. črc 2007, 21:31
od €agle
To je chyba linkeru, musis v parametrech projektu pridat link na libcomctl32.a (najdes ve slozce lib)

Napsal: pon 16. črc 2007, 22:12
od Coburn
ok

jak to mám zavolat? když to se všim všudy přetáhnu do hwndMainProc za WM_CREATE, vyhodí to chybu, když to přetáhnu samotné, chybí deklarace hInstance.

Kód: Vybrat vše

HWND CreateListView(HWND hwnd, HINSTANCE hInst);
Tohle jsem zkoušel zapsat do WM_CREATE, nevyhodi to chybu, program se spustí, ale nikde tam neni vidět mřížka. hwndParent jsemzměnl n hwnd.

Diky

Napsal: stř 18. črc 2007, 00:12
od €agle
Nemuzes psat HWND CreateListView(), kdyz tu funkci chces zavolat, tvari se to potom jako deklarace, staci CreateListView(). Jinak te musim upozornit, ze samotne vytvoreni okna jeste neznamena, ze uvidis tabuku. Dokud tam pri nejmensim nepridas sloupce, uvidis nanejvys bilou plochu.

Napsal: čtv 26. črc 2007, 23:33
od Coburn
no, tak tabulku jsem odložil na později, ale teď mě spíš začal zajímat trackbar; na MSDN jsem ho našel, ale jeho vytvořeni bylo podobně dlouhé, jako u tabulky.

Nedá se udělat jednodušším způsobem?
Díky

Napsal: pát 27. črc 2007, 20:18
od €agle
Bohuzel nejde, alespon tedy v DevC++ bez pouziti nejake GUI knihovny (jako WxWidgets). V DevC++ musis vsechno napsat v kodu pomoci WinApi. Docela pekny clanek o tom najdes tady na Builder.cz

Napsal: ned 12. srp 2007, 18:51
od Coburn
Dá se nějak přes nějakou knihovnu nebo "prostě nějak" nasát do programu text ze souboru s koncovkou *.doc? fakt bych to potřeboval.
Díkec

Napsal: ned 12. srp 2007, 21:12
od Coburn
a ješte nechybí mi tady nějakej údaj, kterej je důležitej pro překreslování při změně editboxu, případně pro podporu UpdateWindow(hwnd);

Kód: Vybrat vše

/* All windows of this class redraw when resized. */
wndclass.style = CS_HREDRAW | CS_VREDRAW;
Díky

Napsal: ned 12. srp 2007, 23:42
od €agle
Coburn píše:Dá se nějak přes nějakou knihovnu nebo "prostě nějak" nasát do programu text ze souboru s koncovkou *.doc? fakt bych to potřeboval.
Díkec
O zadnem jednoduchem zpusobu nevim...

Co se tyce toho editboxu, tak myslim, ze nic nechybi

Napsal: pon 13. srp 2007, 13:53
od Coburn
heh
a je tady nějaká chyba na ten způsob?

Kód: Vybrat vše

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rc);

rc.bottom = rc.bottom*2-9;

DrawText (hdc, "Text", -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint (hwnd, &ps);
break;
Tohle je příklad, jak se v mém proramu vytváří text, nevim, kde může být chyba

Díky

Napsal: čtv 16. srp 2007, 13:50
od €agle
A nebylo by lepsi misto rucniho psani textu pouzit Static control, ktery jenom umistis do dialogu a pomoci SetDlgItemText mu nastavis pozadovany text? V tom tvem kodu bych zkusil odebrat to rc.bottom = rc.bottom*2-9; a do DrawText pridat parametr DT_NOCLIP.