» »

en blemček v C (win 32api)..

en blemček v C (win 32api)..

Monster ::

okej.. tule mam en skupek kode ki spremeni resolucijo... edini blem je da mi skos javla napako da mam več ekranov!!! kar seveda nimam ;).. SEdaj pa bi rad da izberem prvi grafical device in ga potem obdelam... Hvala za odgovore

int ChangeToFullScreen()
{
//Shranimo lasnosti naprave... grafčne kartice pač :)
DEVMODE devNastavitve;

//Spraznimo in preverimo(da je prazna) našo spremenljivko
memset( &devNastavitve, 0, sizeof( DEVMODE ) );

//Poberemo trenutne lastnosti ekrana
if( !EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &devNastavitve ) )
{
//Ni uspelo... Poročamo konzoli.. in zapremo program..
//Ne mroemo dobiti lastnosti graficne

return 0;
}

//Začnemo z nastavljanjem NAŠIH nastavitev...
devNastavitve.dmPelsHeight = RES_X;
devNastavitve.dmPelsWidth = RES_Y;

//Nastavimo naše lastnosti...
if( ( ChangeDisplaySettings( &devNastavitve, CDS_FULLSCREEN ) ) != DISP_CHANGE_SUCCESSFUL )
{
//Spet nesupela zadeva.. tokrat nismo mogli podati naših nastavitev..
return 0;
}

return 1;
}

//////////////////////
Skratka tole mora pasat.. in nardit... seveda pred tem PRAVILNO nardim okno(register class etc..) sm nekak mi noce dokoncat tegakar bi moglo...

lp monster... Če rabite še kej več kode povejte
Ka zaboga...

cyer^3d ::

V strukturi 'devNastavitve' moras nastavit 'dmSize' na velikost strukture...ti si samo zafilu celotno z 0.

READ MSDN.;)

Monster ::

okej... to resi "prvi" if stavek :).. sm drugega mi pa še vedno ne.. vrne rezultat -2!!
Ka zaboga...

Senitel ::

V "devNastavitve" moraš naštimat tudi dmFields, da ChangeDisplaySettings ve kaj spreminjat! Po vsej verjetnosti boš moral nastaviti vsaj tole DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT.

cyer^3d ::

easy working code:
DEVMODE devNastavitve;
memset(&devNastavitve, 0, sizeof(DEVMODE));
devNastavitve.dmSize = sizeof(DEVMODE);
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devNastavitve);
devNastavitve.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
devNastavitve.dmPelsWidth = 800;
devNastavitve.dmPelsHeight = 600;
devNastavitve.dmBitsPerPel = 32;
ChangeDisplaySettings(&devNastavitve, CDS_FULLSCREEN);

Ce pa hoces dobit vse settingse za graficno pol pa uporabs EnumDisplaySettings pa rukns u eno while zanko etc...ce bos menjavu resolucijo na 'roke', potem pazi da bos dal pametno resolucijo...brez kaksnih 334345x4234x53:D

Monster ::

hmnja.... tole še vedno ne dela(2. if stavek)... err coda je -2.. neki da če maš XPje in če grafika podpira dva ekrana... ne najde pravega oz neve kerrega morma vzet :(....

še koda:

int ChangeToFullScreen()
{
//Shranimo lasnosti naprave... grafčne kartice pač :)
DEVMODE devNastavitve;

//Spraznimo in preverimo(da je prazna) našo spremenljivko
memset( &devNastavitve, 0, sizeof( devNastavitve ) );

//Poberemo trenutne lastnosti ekrana
if( !EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &devNastavitve ) )
{
//Ni uspelo... Poročamo konzoli.. in zapremo program..
//Ne mroemo dobiti lastnosti graficne

return 0;
}

//Začnemo z nastavljanjem NAŠIH nastavitev...
devNastavitve.dmPelsHeight = RES_X;
devNastavitve.dmPelsWidth = RES_Y;
devNastavitve.dmBitsPerPel = RES_BIT;

devNastavitve.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

//Nastavimo naše lastnosti...
int res = ChangeDisplaySettings( &devNastavitve, CDS_FULLSCREEN );
if( res != DISP_CHANGE_SUCCESSFUL )
{
//Spet nesupela zadeva.. tokrat nismo mogli podati naših nastavitev..
return 0;
}

return 1;
}
Ka zaboga...

cyer^3d ::

Nisi dober pogledal kode oz. ne poslusas:\

V strukturi 'devNastavitve' moras nastavit 'dmSize' na velikost strukture...ti si samo zafilu celotno z 0.
Poglej si tist del kode, ki sem ti poslal malo visje.

:D

se mal helpa
- RES_X, RES_Y, RES_BIT > vrednost tega?
- use debugger

update:
- napako imas v kodi:
devNastavitve.dmPelsHeight = RES_X;
devNastavitve.dmPelsWidth = RES_Y;
...Height je RES_Y..Width je RES_X...torej ravno obratno:
devNastavitve.dmPelsWidth = RES_X;
devNastavitve.dmPelsHeight = RES_Y;




Zgodovina sprememb…

  • spremenil: cyer^3d ()

Monster ::

pm... :)) neki se ne zastopmo...

RES_X = 800
RES_Y = 600
RES_BIT = 32

dj... neki mi povej... da vidim ce te kapiram

pac tule je n primer

int NEVEMKAJ

memset( &NEVEMKAJ, 0, sizeof( ka mora bit tu notr... NEVEMKAJ
(verjetno a) al int)..

ka mora bit pod sizeof.. spremenljivka al njen tip da dolocis velikost letega

lp... pa mah..se bom jutr sol naprej bavit z tem :))
Ka zaboga...

cyer^3d ::

ok...

2 problema.

1. problem:
pod vrstico:
memset(&devNastavitve, 0, sizeof(DEVMODE));
...dodas se:
devNastavitve.dmSize = sizeof(DEVMODE);
-> skupaj izgleda potem:
memset(&devNastavitve, 0, sizeof(DEVMODE));
devNastavitve.dmSize = sizeof(DEVMODE);

2. problem:
Zamenjal si WIDTH in HEIGHT...kar pomeni, da si vpisal dolzino tam kjer bi moral visino in obratno.
Torej tole imas ti:
devNastavitve.dmPelsHeight = RES_X;
devNastavitve.dmPelsWidth = RES_Y;
vidis napako?
dmPelsHeight = RES_X; -> mora biti dmPelsHeight = RES_Y;
(Height je visina, torej napises podatek za visino)
...ter
dmPelsWidth = RES_Y; -> mora biti dmPelsWidth = RES_X;
(Width je dolzina, torej tukaj napises podatek za dolzino)
na koncu izgleda:
devNastavitve.dmPelsHeight = RES_Y;
devNastavitve.dmPelsWidth = RES_X;

Zato ti je pa error -2 ven mece (nekompatibilna locljivost)..
Npr. ti si njemu podal npr. 600x800 ..moral bi pa 800x600.










Monster ::

oke dela :))))...na beda na MOJIH napakah.. hvala za pomoc...
Ka zaboga...

Monster ::

okej.. zadeve grejo dalje.. Zdej mam pac pred sabo en dialogbox z dvena textnima poljima in nc več...

zgornje večje polje predstavlja neko LOG(dnevnik) vsega kar mu bom sendal iz sistema in iz spodnjega komadnega vnosgea polja... Zdej pa bi rad vedel( razen če so kaki dobri članki o dialogboxih :))) kk se senda (multi linanemu :) ) editboxu komada naj gre v novo vrsto in da se ves prejšni text ohrani... to je to

lp :)
Ka zaboga...

Monster ::

okej.. tist sem recimo rešil z tole proceduro.. naceloma dela... sm mam en blen.. vrne mi err da hEdit(hwnd) ni definiran(v runtimu to), klub temu da je jasno vidno da je!!!... mogoce kdo ve ka je pa zdej narobe :)

int SetDlgText( HWND hWnd, int CtrlID, char *Msg )
{
HWND hEdit;
int iDolzinaTeksta;

GetDlgItem( hEdit, CtrlID );

iDolzinaTeksta = GetWindowTextLength( hEdit );

SendDlgItemMessage( hWnd, CtrlID, EM_SETSEL, iDolzinaTeksta, iDolzinaTeksta );

SendDlgItemMessage( hWnd, CtrlID, EM_REPLACESEL, false, (LPARAM)(LPCTSTR)"toooooo\r\n" );

return 1;
}
Ka zaboga...

cyer^3d ::

V GetDlgItem moras vstaviti parent hwnd ter ID od kontrole,
vrne pa ti hwnd od te kontrole.
torej tole:
GetDlgItem(hEdit, CtrlID);
zamenji s tem...
hEdit = GetDlgItem(hWnd, CtrlID);

Monster ::

aham.. okej,.,
Ka zaboga...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111130 (809) PecenkA
»

Win32 API in C++

Oddelek: Programiranje
131515 (1386) Monster
»

OpenGL orr v ansi c

Oddelek: Programiranje
121578 (1366) igor12
»

DirectX, neki ne gre

Oddelek: Programiranje
61104 (1002) Senitel

Več podobnih tem