Moje reseni - hlavni program spusti a pocka na ukonceni vedlejsiho programu, ltery vyvola potrebny dialog a posle vybrany soubor hlavni aplikaci....
Jeste jsem zapomnel napsat, ze nekdy po spusteni vyse uvedeneho kodu aplikace zatuhne..
Příspěvky odeslané z IP adresy 85.132.191.–
Ahoj vsichni,
mam problem s funkci GetOpenFileName:
Pokud tuto f-ci pouziji (viz nize), tak pomoci taskmanageru zjistim ,ze moje aplikace zacne vyuzivat misto svych 2000Kb pameti asi 9000Kb, misto 2 vlaken ma 13 vlaken a naskacou ji USER a GDI objekty. Tento stav pretrva i po skonceni dialogu (GetOpenFileName)..
Poradte mi prosim, co s tim mam delat - aplikace pak vetsinou po par vterinach spadne...
/////////////////////
string ssFN="";
OPENFILENAME ofn;
char szFileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = GetDesktopWindow();
ofn.lpstrFilter = "*.mp3\0*.mp3\0*.wma\0*.wma\0*.wav\0*.wav\0";
ofn.lpstrFile = hwnd;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST/* | OFN_ALLOWMULTISELECT*/;
ofn.lpstrDefExt = "mp3";
if(GetOpenFileName(&ofn)){
SendDlgItemMessage(hwnd,IDLBplaylist,LB_ADDSTRING,0,(LPARAM)(LPCTSTR) szFileName);
ssFN=szFileName;
Orezat(hwnd, ssFN, "\\");
GetDlgItemText(hwnd, IDESKLAD , szFileName , MAX_PATH );
SendDlgItemMessage(hwnd,IDLBplaylistSHOW,LB_ADDSTRING,0,(LPARAM)(LPCTSTR) szFileName);
}
ZeroMemory(&ofn, sizeof(OPENFILENAME));
//////////////////////////////
Tak kdyby měl někdo podobnej problém, už jsem na to přišel :) Řešení jsem vyčetl z příkladu na doublebuffering viz - http://forum.builder.cz/read.php?16,1842218,1842354#msg-1842354
Takže:
V proceduře editu (ne hlavního okna) odchytit zprávu WM_ERASEBKGND a tam to udělat nějak takhle:
case WM_ERASEBKGND:
RECT rc;
GetClientRect(g_EBox, &rc);
HDC BoxDC;
BoxDC = GetDC(g_EBox);
FillRect(BoxDC,&rc,(HBRUSH)GetStockObject(WHITE_BRUSH));
break;
Řešení spočívalo v použití funkce FillRect ...
Zdravím, mám takový menší problém.
Vytvořil jsem si edit box funkci CreateWindowEx, který je normálně bílý. Pozadí okna je modré. Jakmile ale změním velikost okna tažením za okraj, edit box se překreslí na barvu pozadí okna, tedy na modrou. Patrně je to zapříčiněno tím, že při změně velikosti okna se volá zpráva WM_ERASEBKGND která překreslí pozadí (asi i toho editboxu) na barvu, která je definována ve třídě okna.
Poradí mi někdo jak to ošetřit, aby i po změně velikosti okna ten edit box zůstal bílý? Mám pro něj vytvořenou i vlastní proceduru (subclassing) jen potřebuju nakopnout co odkud volat nebo jak to řešit. Už jsem zkoušel vše možné (SetClassLong, SetBkMode, WM_CTLCOLOREDIT, ...) tak budu vděčný za každou pomoc.
Díky
Ahoj vsichni, mam problem s pouzitim techto funkci
capDriverConnect(hwndCap, 0);
capPreviewRate(hwndCap, 66);
capPreview(hwndCap, TRUE);
protoze nejsou nadefinovany v moji verzi knihovny vfw.h
Ale funkce
capCreateCaptureWindow("Webcamera", WS_CHILD | WS_VISIBLE, 10, 10, Rect.right-10-10, Rect.bottom-10-10, hwnd, 0);
funguje normalne (ta tam opravdu nadefinovana je)...
Pokud tyto funkce nekomu funguji, at mi prosim posle knihovnu vfw.h na mail (LJ1024 na gmail tecka com). Byl bych opravdu moc vdecny!
OPENFILENAME ofn;
char szFileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "*.mp3\0*.mp3\0*.wma\0*.wma\0*.wav\0*.wav\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
ofn.lpstrDefExt = "mp3";
if(GetOpenFileName(&ofn))
{
SendDlgItemMessage(hwnd,IDLBplaylist,LB_ADDSTRING,0,(LPARAM)(LPCTSTR) szFileName);
}
a když pak v úplně jiné f-ci zavolám
ofstream foutp;
foutp.open("t2.dat", ios::out);
foutp << "text" << endl;
foutp.close();
tak se nic nezapíše, pokud to udělám před výběrem souboru, všechno je OK...
char get[MAX_PATH];
LRESULT polozek=SendDlgItemMessage(hwnd,IDLBplaylist, LB_GETCOUNT, 0, 0);
ofstream foutp("timer2.dat");
for(int i=0;i<polozek;i++){
Item = SendDlgItemMessage(hwnd, IDLBplaylist, LB_GETTEXT, i, (LPARAM)(LPCTSTR) get);
foutp << get << "\n";
}foutp.close();
kdyz to zkompiluju, tak to nic nezapise do toho souboru, nevi nekdo prosim, cim to je?
Ahoj vsichni,
mam problem s problikavanim prvku Edit. Nastavim mu (editu) styl pres zpravu WM_CTLCOLOREDIT
//////////////////////////////////////
HBRUSH g_hbPozadi;
case WM_CTLCOLOREDIT:
if ((HWND) lParam == (HWND) hwndTIME){
SetTextColor((HDC)wParam, RGB(iR, iG, iB));
SetBkMode((HDC)wParam, OPAQUE);
SetBkColor((HDC)wParam, RGB(0,0,0));
return (INT_PTR) g_hbPozadi;
}
break;
//////////////////////////////////////
Problem: Kdykoliv neco pripisu do editu nebo jen oznacim nekterou cast textu uvnitr editu, tak mi text zacne velice neprijemne blikat. Pozn. : Neumim pouzivat DoubleBuffering, ale po precteni dokumentace jsem dosel k nazoru, ze tim to stejne nevyresim (pokud se pletu, budu rad, kdyz me opravite)....
Mockrat predem dekuji za odpovedi!
Ahoj vsichni, potrebuji prosim pomoct se zamenou barev obrazovky v OpenGL.
Neco ve stylu:
Zmen(0,0,0,255,255,255) //pokud by mel monitor zobrazit cernou (0,0,0), zobrazi bilou (255,255,255)
Hledal jsem na googlu, ale nenasel jsem nic...
Nevi nekdo, jak to udelat? Predem diky za odpovedi!