Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL-ohjelmaan OpenDialog

kayttaja-3842 [08.03.2007 22:46:37]

#

Joo, eli pitäisi saada SDL pohjaiseen Softaan OpenDialog, eli miten tämän saisi mukaan ohjelmaan mahdollisimman yksinkeritaisesti ja mistä kirjastota tämän saisi?
Itselläni kävi mielessä täysin oman Dialogon tekeminen, mutta sen tekemiseen menisi liikaa aikaa ja eikä välttämättä tulisi edes niin hyvää mitä valmiina jo on.

kayttaja-3842 [10.03.2007 10:47:56]

#

Joo, eli sain nytten suurimmin osin itse väsättyä pienen OpenDialogo koodin WinAPI:lla. Mutta nytten on vaan sellanen juttu, että kun avaa Dialogin suorittaa ja painaa esim avaa, niin tämän jälkeen napit eivät enää toimi! Eli avaa nappi jää kohjaan ja muut napit eivät reagoi hiiren painallukseen mitenkään.

Eli tuntuu ihan siltä, että avaa napin jälkeen avaa dialogi jäisi johonkin ikuiseen silmukaan ja näin ylikuormittaisi tapahtuma taulukon tjt.

Suoraan sanottuna ohjelma jää jumiin, ei kuitenkaan nii jumiin, että sen suoritus tilaksi tulisi ("Ei vastaa")

Kertokaa te paremmat mikä voisi olla vikana, jos tän avaa dialogi koodin näyttämisestä on jotain hyötyä.

LPTSTR avaa()
    {


		char* lpszFileName;
    		OPENFILENAME ofn;
    	char szFile[260];
    	char mydir[MAX_PATH];
    	HWND hwnd;
		hwnd = 0;
    	ZeroMemory(&ofn, sizeof(ofn));
    	ofn.lStructSize = sizeof(ofn);
    	ofn.hwndOwner = hwnd;
    	ofn.lpstrFile = szFile;
    	ofn.lpstrFile[0] = '\0';
    	ofn.nMaxFile = sizeof(szFile);
    	ofn.lpstrFilter = "MP3 file\0*.MP3\0Wav file\0*.WAV\0";
    	ofn.nFilterIndex = 1;
    	ofn.lpstrFileTitle = NULL;
    	ofn.nMaxFileTitle = 0;
    	ofn.lpstrInitialDir = NULL;
    	ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_PATHMUSTEXIST;
        		if (GetOpenFileName(&ofn)==TRUE)
        	{
        		int i = (int)strlen(ofn.lpstrFile);
        		lpszFileName = new char[i+10];
        		strcpy(lpszFileName,ofn.lpstrFile);
        		return(lpszFileName);
        	}
        	else

            	{
            		lpszFileName = new TCHAR[2];
            		lpszFileName[0]= __TEXT('\0');
            		return (lpszFileName);
		}

        }

Metabolix [10.03.2007 11:24:16]

#

Muista, että tuo ei sitten toimi enää kuin Windowsissa. wxWidgets olisi monen alustan vaihtoehto, mutta siitä en nyt osaa ihmeempää kertoa. Joka tapauksessa käytät väärää HWND:tä, SDL:ltä saa oikean näin:

HWND Get_SDL_HWnd()
{
    SDL_SysWMinfo info;
    SDL_GetWMInfo(&info);
    return info.window;
}

kayttaja-3842 [10.03.2007 11:59:02]

#

Tuota tuota, itselläni tuo ei auttanut...

Kun laitan näin

    	HWND hwnd;
	hwnd = Get_SDL_HWnd();

...niin OpenDialog ei edes aukea, jos taas laitan alla näytetyllä tavalla, niin...

        SDL_SysWMinfo info;
        SDL_GetWMInfo(&info);
    	HWND hwnd;
	hwnd = info.window;

OPenDialog aukee, mutta tulee taas sama juttu, eli kaataa SDL ikkunan.

Metabolix [10.03.2007 12:10:29]

#

Mutta nuohan ovat täsmälleen sama asia? Aiemmassa koodissasi taas käytit nollaa. Päätäpä nyt. :) Ja minä en voi taikka jaksa noita testata näin Linuxista käsin.

kayttaja-3842 [10.03.2007 12:15:51]

#

Tuota, se minuakin ihmetyttää, että miksi tulee eri tulos? Pitää kattoa varmaan tuota wxWidget:in OpenDialog:ia, meinaan itselläni on kanssa toisella koneella Gentoo asennettuna ja voisin käyttää soitintani myös Gentoossa.

Edit1:

Miten wxDirDialog saa toimimaan SDL:än kanssa, kun en saa mistään parenttia tyyppiä wxWindow.

kokeilin ite näin

void avaa(){
wxWindow *pr;
wxDirDialog *kansio = new wxDirDialog(pr, "Valitse tiedosto", wxGetCwd());
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta