» »

mfc problem

mfc problem

ddeben ::

Ze kaksno uro iscem primerno funkcijo za risanje pravokotnika v mfcju. U bistvu hocem naredit mrežo pravokotnikov/kvadratov, v smislu takšno mrežo ki jo imamo pri igri sudoku. Nimam pojma kako tisti kvadrat/pravokotnik izrisat...Kaksen nasvet.

Senitel ::

MFC nima s samim risanjem nič. Uporabit moraš GDI ali pa GDI+. Poglej pa funkcijo Rectangle (GDI) ali metodo Graphics::DrawRectangle (GDI+).

ddeben ::

Se pravi je sploh mozno nardit v smislu
 
for (int j = 0; j < 6; j++)
{
   for (int i = 0; i < 7; i++)
   {
      narisi pravokotnik() - tukaj nevem kako?
   }
}

Zgodovina sprememb…

  • spremenil: ddeben ()

Senitel ::

Seveda, samo dobit moraš DC handle (GDI) in/ali konstruirat Graphics objekt iz tega DC-ja. Poglej si dokumentacijo za omenjeni funkciji na MSDN-u. Window class ima metodo GetDC in vse skup zapakiraš v OnPaint.

ddeben ::

Zdej mamo nekako tkole nareto, ampak ne dobim zelenega rezultata...se pravi da bi mi narisalo mrezo. Ideje?

int visina_celice = 75;//visina okenca
int sirina_celice = 75; //sirina okenca
int odmik_levo = 20; //odmik od levega roba
int odmik_zgoraj = 75; //odmik od zgornjega roba

for (int j = 0; j < 6; j++)
            {
                for (int i = 0; i < 7; i++)
                {
                    //risanje kvadratka po vrsticah
					dc.Rectangle(odmik_levo, odmik_zgoraj, sirina_celice, visina_celice); 
                   
                    odmik_levo = odmik_levo + sirina_celice; //povecamo za vsak novi stolpec v vrstici (odmik od levega roba)
                }
                odmik_zgoraj = odmik_zgoraj + visina_celice; //povecamo za vsako novo vrstico (odmik od zgornjega roba)
                odmik_levo = 20;
            }

Zgodovina sprememb…

  • spremenil: ddeben ()

Senitel ::

Zato ker sta prva dva parametra koordinati levega zgornjega roba pravokotnika, druge dva parametra pa koordinati desnega spodnjega roba. Ti pa namesto koordinate podaš širino in višino celice...

xordie ::

Zakaj pa ne narises crt? Sudoku mreza je sestavljena iz 20 crt.
x

ddeben ::

Pac zamislil sem si mrežo - se pravi pravokotnik razdeljen na manjše pravokotnike oz. kvadrate.
Ok problem resen. ce bom se imel kaksna vprasanja, se oglasim - Hvala senitel

Zgodovina sprememb…

  • spremenil: ddeben ()

ddeben ::

Ok, drug problem. Uporabit moram CColorDialog in picture control. Se pravi v smislu, da bi kliknil na ta picture control in bi se mi odprl CColorDialog, zbral bi barvo potrdil, in nato bi se mi cifre oz. vstavlje številke v mreži pobarvale v tej zbrani barvi - pravtako bi se izbrana barva pokazala v tem picture controlu.
Ideje?

Zgodovina sprememb…

  • spremenil: ddeben ()

Senitel ::

Kaj točno je problem?

ddeben ::

Kako dodelit barvo iz colordialoga na cbrush , s katero potem barvam cifre

Senitel ::

GetColor od CColorDialoga vrne COLORREF, ki ga CBrush vzame v konstruktorju?

ddeben ::

Hvala.

rustypac ::

Pozdrav!

Imam težavo sicer imam narisano mrežo, sedaj ko kliknem v kvadratek mi kvadratek pobarva rdečo, ko kliknem drug kvadratek mi ga pobarva z rdečo s tem da mi prejšnji kvadratek izgine. Pri tem je pa tudi težava rad bi imel pobarvanih več kvadratkov, ne pa da mi jih sproti briše.

Prosim za pomoč!

roba87 ::

rustypac...

Zadeva je preprosta. Delaš samo z eno spremenljivko. Ti rabiš za vsak kvadrat nov objekt (spremenljivko).

Edit: Oziroma najbolje da narediš polje.

Zgodovina sprememb…

  • spremenil: roba87 ()

koksi ::

A lahko zaupaš kak si mrežo narisal?

FuI2cY ::

Mrežo lahko narišeš na več načinov.

način, ki ti nariše mrežo v levi zgornji kot
1. nacin za barvo kvadratka in barvo črte
CBrush barvaOzadja(RGB(255, 255, 255)); 
pDC->SelectObject(&barvaOzadja);

CPen barvaMreze(PS_SOLID, 1, RGB(0, 0, 0));
pDC->SelectObject(&barvaMreze);
2. nacin za barvo kvadratka in barvo črte, vendar je malo večja koda
CBrush barvaOzadja;
barvaOzadja.CreateSolidBrush(RGB(255, 255, 255));
pDC->SelectObject(&barvaOzadja);

CPen barvaMreze;
barvaMreze.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pDC->SelectObject(&barvaMreze);

int vrstica = 10;
int stolpec = 10;
int velikostCelice = 20;

for(int x = 0; x < vrstica*velikostCelice; x += velikostCelice){
   for(int y = 0; y < stolpec*velikostCelice; y += velikostCelice){
       pDC->Rectangle(x, y, x+velikostCelice, y+velikostCelice);
   }
}



pDC imaš za izris, ker rišeš v OnDraw(CDC* pDC) funkciji.
tu ti nariže mrezo 10x10 z 20 velikostjo celice. Če želiš, da ti jo npr. centrira na sredino okno pa malo pomisli, kako bi lahko naredil. Je enostavno. Ti priporočam, da si mogoče včasih pomagaš s tem, da vzameš list papirja in kuli, boš včasih prej narisal kot pa s fraj glave.

Drugače lahko barvo delaš tudi z COLORREF.

Če boš še kaj potreboval, kar z besedo na dan

Zgodovina sprememb…

  • spremenil: FuI2cY ()


Vredno ogleda ...

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

C#-pomoč

Oddelek: Programiranje
71031 (849) mlamat
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
465402 (3715) imagodei
»

[C++]Kako narediti screenshot?

Oddelek: Programiranje
121449 (1020) *ziga*
»

[C++ Visual Studio] kako narisati krog?

Oddelek: Programiranje
141397 (1164) c0dehunter
»

mfc krogi

Oddelek: Programiranje
9867 (705) Yeznick

Več podobnih tem