Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 386.490
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
protjeran
offline
Programiranje u C-u - od svega pomalo

Neznam ništa o programiranju, ići ću na FER pa me zanima koji programski jezik da počnem učit?

Ako imate preporuku za literaturu isto bi mi dobro došlo. Znam da se uči sve ispočetka, ali da ne dođem baš kao laik.

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Koliko se sjećam, na prve dvije godine se radi isključivo C jezik. Kasnije, ima i C++a, Jave itd..

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
11 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Dakle trebao bih pomoć.

 

        Using reader As StreamReader = New StreamReader("data.txt")
            Do While (True)
                Dim line As String = reader.ReadLine
                If line Is Nothing Then
                    Exit Do
                End If
                Dim words As String() = line.Split(New Char() {" "c})
                Dim word As String
                For Each word In words
                    If word = TextBox1.Text Then
                        TextBox2.Text = words(+1)
                    End If
                Next
            Loop
        End Using

 

ovakav je wordlist: http://puu.sh/40tKe.png

 

program mi izbacuje samo jednu riječ i tu dolazi do problema kad je u word listu više riječi, kad upišem "yes" izbaci mi "man" jer u wordlistu postoji riječ "yes man"...

dakle zanima me kako da stavim da ja upišem jednu riječ i izbaci mi sve riječi + prijevo koje postoje u wordlistu, u slučaju "yes" da izbaci "yes da, yes jest, yes potvrda, yes if da ako je, yes man ulizica"

ovako izgleda interace programa: http://puu.sh/40tUj.png

 

Početnik sam u programiranju pa radim male zadatke dok se ne ufuram :)

 
0 1 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
pieuvre kaže...

Neznam ništa o programiranju, ići ću na FER pa me zanima koji programski jezik da počnem učit?

Ako imate preporuku za literaturu isto bi mi dobro došlo. Znam da se uči sve ispočetka, ali da ne dođem baš kao laik.

Jedino sto ces uciti na faksu u redovnom programu jest C. Prvi semestar - Programiranje i programsko inzinjerstvo (PiPI), zvuci kul, ali u biti upoznavanje s C-om, tj. ucenje C-a. Drugi semestar - Algoritmi i strukture podataka (ASP), vec malo zanimljivije, kao sto samo ime kaze obraduju se razno-razni algoritmi, uglavnom sortiranja, pretrazivanja, hashevi i sl. Naravno, neizostavne su liste, redovi, stog (stack)...

I to je u biti to sto ces od programiranja uciti na FER-u (ako ne racunamo asembler). Jedino jos imas Cupicevu Javu kao vjestinu (znaci dodatni predmet, nije redovni program), Natjecateljsko programiranje (takoder dodatni predmet), od nedavno i Haskell (funkcijsko programiranje), ali to je u biti to. Za sve vise od toga si prepusten sam sebi. A vjeruj mi, na kasnijim godinama ti poznavanje nekog viseg jezika od C-a puno olaksa stvari. Tako da, morat ces i sam zapeti.

Simon_says kaže...

Dakle trebao bih pomoć.

...

program mi izbacuje samo jednu riječ i tu dolazi do problema kad je u word listu više riječi, kad upišem "yes" izbaci mi "man" jer u wordlistu postoji riječ "yes man"...

dakle zanima me kako da stavim da ja upišem jednu riječ i izbaci mi sve riječi + prijevo koje postoje u wordlistu, u slučaju "yes" da izbaci "yes da, yes jest, yes potvrda, yes if da ako je, yes man ulizica"

ovako izgleda interace programa: http://puu.sh/40tUj.png

 

Početnik sam u programiranju pa radim male zadatke dok se ne ufuram :)

Ako je to Basic, a tako mi izgleda, mislim da si fulao temu. ;)

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...
Ako je to Basic, a tako mi izgleda, mislim da si fulao temu. ;)

Basic je. I to VB.net

 

Da je qbasic ili nešto slično već bih se ja ubacio, ali o .net-u znam koliko i o neurokirurgiji...

What Andy giveth, Bill taketh away.
11 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Kako da učinim svoj program idiot-proof? Ne želim da mi u textbox gdje treba ići broj da unese string...

 

probao sam ovako:

 

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            const char Delete = (char)8;
            e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
        }

 

i dalje se može unijet slovo...

 

probao sam i ovu metodu:

 

private bool nonNumberEntered = false;

 

ali isto...

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ovo nije tema o C#-u, nego o C-u.  Za C# imašovu. A što se tiče problema:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Simon_says kaže...

Kako da učinim svoj program idiot-proof? Ne želim da mi u textbox gdje treba ići broj da unese string...

To nije C...

 

Koristi ES_NUMBER stil pri kreiranju edit kontrole, ili ga naknadno izmijeni sa SetWindowLong...

 

Recimo:

long style = GetWindowLong(hwndEdit, GWL_STYLE) | ES_NUMBER;
SetWindowLong(hwndEdit, GWL_STYLE, style);
SetWindowPos(hwndEdit,
             NULL,
             0, 0, 0, 0,
             SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE);

 

Pod uvjetom da ti se handle od edit kontrole zove hwndEdit :D

 

Royal me pretekao, i to čini se sa boljim rješenjem :P

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put čet 15.8.2013 19:51 (rustweaver).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...

Royal me pretekao, i to čini se sa boljim rješenjem :P

Ni moje neće puštati recimo delete. Ali tražio samo brojeve. :)

 

Ako želiš da pustiš delete dodaj u if i !char.IsControl(e.KeyChar).

14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Propuštaje tipke po ASCII vrijednosti (48-57).

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
1 0 hvala 0
14 godina
offline
Programiranje u C-u - od svega pomalo

Unaprijed oprostite sto ce pitanje biti lose formulirano ali ne mogu si pomoci ;)

Dakle radi se o tablici mnozenja koja se treba napraviti pomocu dva jednodimenzionalna polja i jednog dvodimenzionalnog polja. Stigao sam do ovog dijele i dalje ne znam a trebao bi ove umnoske "podici" za tri reda bio bi zahvalan na pomoci.

 

#include <stdio.h>

#define R 5

#define S 3

#define RED 4

#define STUPAC 6

int main()

{

   int n,m,redak[R], stupac[S],i=0,j=0,tablica[RED][STUPAC];

 

   //printf ("N=");

   scanf ("%d",&n);

   //printf ("M=");

   scanf ("%d",&m);

   if (n>m || n<2 || n>100 || m<2 || m>100)

    printf ("krivi unos");

 

   while(i<R) {

     //printf ("Redak %d ",i);

     scanf("%d",&redak[i]);

     if (redak[i] >= n && redak[i] <= m) {

       tablica[0][i +1] = redak[i];

       i++;

     }

   }

 

   while (j<S) {

     //printf ("Stupac %d ",j);

     scanf ("%d", &stupac[j]);

     if (stupac[j] >= 10 && stupac[j]<=50) {

       tablica[j+1][0] = stupac[j];

       j++;

     }

   }

   printf ("Polje redak:");

   for (i=0;i<R-1;i++){

     printf (" %d,", redak[i]);

 

   }

   for (i;i==R-1;i++)

     printf (" %d",redak[i]);

 

   printf ("\nPolje stupac:");

   for (j=0;j<S-1;j++){

     printf (" %d,", stupac[j]);

   }

   for (j;j==S-1;j++)

     printf (" %d",stupac[j]);

   printf ("\n");

 

 

   for(j = 1; j < STUPAC; j++) {

     for(i = 1; i < RED; i++) {

       tablica[i][j]=redak[j-1]*stupac[i-1];

 

     }

   }

   printf ("Dvodimenzionalno polje:");

 

   for (j=1;j<=3;j++){

     for(i=1;i<= 5; i++){

     if  (j==3&&i==5)

       printf (" %d ", tablica [j][i]);

     else

       printf (" %d,", tablica [j][i]);

     }

   }

 

 

   printf ("\n\n");

   printf ("Ispis tablice mnozenja:");

   printf ("\n\n");

 

   for (i=0;i<R;i++){

     printf ("\t%d",redak[i]);

 

   }

   printf ("\n\n");

   for (j=0;j<S;j++){

     printf ("%d",stupac[j]);

   printf ("\n\n");

   }

   for (j=1;j<RED;j++){

     for (i=1;i<STUPAC;i++){

       printf ("\t%d",tablica[j][i]);

     }

     printf("\n\n");

   }

 

   return 0;

}

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ajoj što si ga zakomplicirao.

 

Tri stvari:

1. Koristiti imena varijabli koja imaju neko značenje, 'n', 'm' i slično ne govore ništa. Takva imena prolaze samo u jednostavnim petljama kao brojači. Isto tako, makro konstante čije je ime jedno jedino slovo vrijeđaju oči onoga tko ih čita.

 

2. Što je ovo:

    for (j = 1; j < STUPAC; j++)
    {
        for (i = 1; i < RED; i++)
        {
            tablica[i][j] = redak[j - 1] * stupac[i - 1];
        }
    }

Zašto brojače postavljaš na početnu vrijednost 1 samo da bi kasnije oduzimao tu istu jedinicu par linija niže? Nepotrebno komplicira kod.

 

3. Što je ovo:

    for (i; i == R - 1; i++)
        printf(" %d", redak[i]);

Mislim, vidim što to radi, ali znaš li ti što se tu događa? Vrlo vjerojatno ne, jer ne vidim smisao takvog konstrukta. Takva slična petlja se ponavlja na još jednom mjestu pa mi stvarno ništa nije jasno.

 

Pogledaj ovo za usporedbu:

#include <stdio.h>

int main()
{
    int brojStupaca, brojRedaka;

    printf("Unesi broj stupaca: ");
    scanf("%d", &brojStupaca);

    printf("Unesi broj redaka: ");
    scanf("%d", &brojRedaka);

    if (brojStupaca > 10 || brojRedaka > 10)
    {
        printf("Prevelik broj stupaca ili redaka!");
        return 1;
    }

    int brojevi[brojStupaca], mnozitelji[brojRedaka];
    int tablica[brojRedaka][brojStupaca];

    printf("\n");

    // unos svih brojeva
    for (int n = 0; n < brojStupaca; n++)
    {
        printf("Unesi %d. broj: ", n + 1);
        scanf("%d", &brojevi[n]);
    }

    printf("\n");

    // unos svih mnozitelja
    for (int n = 0; n < brojRedaka; n++)
    {
        printf("Unesi %d. mnozitelj: ", n + 1);
        scanf("%d", &mnozitelji[n]);
    }

    // upis umnozaka u tablicu
    for (int redak = 0; redak < brojRedaka; redak++)
    {
        for (int stupac = 0; stupac < brojStupaca; stupac++)
        {
            tablica[redak][stupac] = brojevi[stupac] * mnozitelji[redak];
        }
    }

    printf("\n\t");

    // ispis brojeva
    for (int n = 0; n < brojStupaca; n++)
        printf("%d\t", brojevi[n]);

    printf("\n");

    // ispis mnozitelja i tablice
    for (int redak = 0; redak < brojRedaka; redak++)
    {
        printf("%d\t", mnozitelji[redak]);

        for (int stupac = 0; stupac < brojStupaca; stupac++)
        {
            printf("%d\t", tablica[redak][stupac]);
        }

        printf("\n");
    }

    return 0;
}

Kako ti se čini? Komentari? Pitanja?

 

Da ti i odgovorim na pitanje, trebaš samo prije nego što kreneš ispisivati svaki redak ispisati mnozitelj za taj redak.

What Andy giveth, Bill taketh away.
14 godina
offline
Re: Programiranje u C-u - od svega pomalo

1.u zadatku je zadano M i N pa eto zato i ja koristim znam da ja mogu upisati sta hocu ali eto
2. Nemam pojma zasto sam to radio a isto vrijedi i za 3

Pitanja nemam, trebao sam samo neke ispravke napraviti jer se u zadatku trazi da uvijek ima 5 brojeva i 3 mnozitelja ali ostalo je super.

Puno hvala{#}

Poruka je uređivana zadnji put sub 16.11.2013 21:58 (yaga01).
14 godina
offline
Programiranje u C-u - od svega pomalo

Poz jel ima netko neku stranicu sa zadatcima u C-u za vježbu znam za mojwebdizajn može biti i na engleskom važno da imaju rješenja, početnički zadatci. Hvala

Ono što možeš sutra,ne ostavljaj za danas.
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

ImašHONI i Infokup na hrvatskom, tu su ti zadaci i rješenja u PDF. Probaj i spoj.pl, imaš dosta zadataka od samih početaka pa sve do komplikovanih algoritama. Možeš probati čitati neke knjige o algoritmima i strukturama podataka, a i knjige koje su namjenjene pripremanju za natjecanja, poput Napredno Programiranje u C++.

 

Sretno.

Crk'o Marshall!
14 godina
offline
Programiranje u C-u - od svega pomalo

Evo mene opet :), ovaj put je laksi zadatak sa laksim problemom ali mi ne ide. Program treba ispisivati koliko se puta koja znamenka pojavila i to za sve znamenke bez obzira da li se ona pojavila ili ne, a meni ispisuje od prve unesene.

 

#include <stdio.h>

int main()

{

int broj, i, pom;

int brojac[10] = { 0 };

scanf("%d", &broj);

for (i=0;i<10;i++){

while(broj){

i=broj%10;

broj=broj/10;

brojac[i]++;

}

printf ("broj %d se pojavljuje %d puta\n",i,brojac[i]);

}

return 0;

}

Moj PC  
0 1 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

To ti se događa zato što unutar while petlje modificiraš varijablu 'i' koja ti služi kao brojač u vanjskoj for petlji.

I kad smo već kod toga, posve je nepotrebno da ti while petlja stoji unutar for petlje. Izvadi ju van i neka se izvrši prije for petlje.

To understand what recursion is, you must first understand recursion.
Poruka je uređivana zadnji put sub 23.11.2013 23:58 (rustweaver).
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Nisam dugo kodirao u C-u, pa sam neke stvari i zaboravio.

 

Ako otvorim datoteku s fopen i onda u nekoj drugoj funkciji ponovno stvorim FILE pointer i otvorim istu datoteku s fopen, krajnji rezultat (tj. ono sto ce se dogoditi) ovisi o implementacijskim detaljima.

Konkretno, iz C standarda:

1) "The address of the FILE object used to control a stream may be significant; a copy of a FILE object need not serve in place of the original."

i

2) "Functions that open additional (nontemporary) files require afile name, which is a string. The rules for composing valid file names are implementation-defined. Whether the same file can be simultaneously open multiple times is also implementation-defined."

 

Ok, dakle sto se boldanoga iz 2) tice, funkciji predajem vec koristeni FILE pointer. No, s obzirom na 1), nije mi sad bas jasno da li mogu napraviti ovo:

funkcija(FILE* datoteka)
{
    FILE* f = datoteka;
    fseek(f, bla bla);
    // bla bla
}

 

Zna netko?

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
 
0 0 hvala 0
12 godina
offline
Re: Programiranje u C-u - od svega pomalo

U praksi varijabla 'f' je nepotrebna, mozes koristit 'datoteka' direktno.

No i ako uzmemo primjer cisto radi ilustracije, radit ce, jer 1) tu nije primjenjivo: u 'FILE* f = datoteka;' nema kopiranja objekta, vec incijaliziras jedan pointer vrijednoscu drugoga, a i dalje je samo jedan objekt u igri.

17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
CyberK kaže...

U praksi varijabla 'f' je nepotrebna, mozes koristit 'datoteka' direktno.

No i ako uzmemo primjer cisto radi ilustracije, radit ce, jer 1) tu nije primjenjivo: u 'FILE* f = datoteka;' nema kopiranja objekta, vec incijaliziras jedan pointer vrijednoscu drugoga, a i dalje je samo jedan objekt u igri.

Znam da nije potrebna, ali volim da mi svaka funkcija ima "svoje" varijable s kojima unutar nje radim.

 

Ok, hvala.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...

Znam da nije potrebna, ali volim da mi svaka funkcija ima "svoje" varijable s kojima unutar nje radim.

 

Ok, hvala.

'datoteka' i jest varijabla te funkcije.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

'datoteka' i jest varijabla te funkcije.

Zato navodnici. :D

Eto, tako pisem kod.

funkcija(int broj)
{
    nekiBroj = broj;
    // dalje radim s nekiBroj
}
Da li je to dobro ili nije, ne znam, toga se uvijek drzim kad pisem svoj kod, kompajler to ionako optimizira.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Nepotrebno zauzimaš novu memoriju... ;)

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

htio bih napraviti nesto slicno kao u dosu kad se poziva program sa argumentima samo sta ovo se iz programa poziva funkcija i uz nju argument , znaci htio bih upisat u liniju

ime_funkcije  argument_char

moze pomoc kako da to ostvarim

Come to the dark side.... we have cookies :)
Poruka je uređivana zadnji put uto 17.12.2013 21:33 (alias_noname).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ti bi dakle napravio parser naredbenog retka.

 

http://en.wikipedia.org/wiki/Lexical_analysis

To understand what recursion is, you must first understand recursion.
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako

Come to the dark side.... we have cookies :)
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
alias_noname kaže...

e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako

Pa argc je nista drugo nego broj stringova na koje pokazuje argv, a argv je polje pointera na stringove.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
alias_noname kaže...

e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako

To samo po sebi ne mora biti nešto komplicirano, ali može biti komplicirano. Ovisno o tome koliko daleko želiš ići s time.

 

Prvo i osnovno što moraš napraviti je razbiti liniju teksta na niz nekakvih tokena. Za to možeš koristiti strtok ili, budući da je ta funkcija prilično trivijalna, iskemijati nekakvo svoje rješenje koje ti možda više odgovara.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char *command;  // pokazivač na komandu
    int nArgs;      // broj argumenata u polju
    char *args[20]; // polje od 20 pokazivača na po jedan argument
} CMD, *PCMD;

void GetCmdArgs(PCMD command, char *line);

int main()
{
    int quit = 0;
    char commandLine[255];
    CMD cmd = {0};

    while (!quit)
    {
        memset(&cmd, 0, sizeof(CMD));

        printf(">");
        fgets(commandLine, 255, stdin);

        GetCmdArgs(&cmd, commandLine);

        if (cmd.command[0] == 0)
        {
            printf("blank line!\n\n");
            continue;
        }

        printf("command: %s\n", cmd.command);
        for (int n = 0; n < cmd.nArgs; n++)
            printf("  arg[%d]: %s\n", n, cmd.args[n]);

        if (strcmp(cmd.command, "exit") == 0)
            quit = 1;

        printf("\n");
    }

    return 0;
}

int SkipWhitespace(char *line, int offset)
{
    for ( ; line[offset] < 33 && line[offset] > 0; offset++) {};
    return offset;
}

int SkipLetters(char *line, int offset)
{
    for ( ; line[offset] > 32; offset++) {};
    return offset;
}

void GetCmdArgs(PCMD command, char *line)
{
    int offset = 0;

    // preskoči moguće razmake na početku
    offset = SkipWhitespace(line, offset);

    // spremi pokazivač na komandu
    command->command = line + offset;
    offset = SkipLetters(line, offset);

    // jesmo li na kraju stringa?
    if (line[offset] == 0 || line[offset] == '\n')
    {
        // terminiraj komandu
        line[offset] = 0;
        return;
    }
    else
    {
        // terminiraj komandu
        line[offset] = 0;
        offset++;
    }

    // preskoči sve razmake između komande i argumenta
    offset = SkipWhitespace(line, offset);

    // dohvati sve argumente
    do
    {
        // spremi pokazivač na argument
        command->args[command->nArgs] = line + offset;
        offset = SkipLetters(line, offset);
       
        command->nArgs++;

        // ako još nismo došli do kraja stringa
        if (line[offset] != 0 || line[offset] == '\n')
        {
            // terminiraj argument
            line[offset] = 0;
            offset++;
        }

        // preskoči sve razmake koji dolaze nakon argumenta
        offset = SkipWhitespace(line, offset);
    }
    while (line[offset] && command->nArgs < 20);
}

 

Eto nešto što si možeš analizirati. Moguće je da sam napravio neku glupost, kasno je, ali mislim da prenosi opću ideju kako bi to otprilike mogao napraviti.

 

Dobiješ bonus bodove ako skužiš da ti varijabla 'offset' zapravo i ne treba i da (uz sitne preinake) možeš umjesto korištenja te varijable jednostavno direktno inkrementirati pokazivač na liniju teksta.

To understand what recursion is, you must first understand recursion.
12 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Zdravo kolege programeri,

radim zadacu iz predmeta Windows programiranje, cilj je napraviti nesto slicno paintu. Uz dodatni prozor za odabir boje, debljine olovke i slicno.


Sve sam to rijesio ali imam jedan problem, u tekstu zadatka stoji da klikom odgovaracujom tipkom misa (recimo desnim klikom) na odgovarajucu boju (koja je button)
odaberemo tu boju za iscrtavanje tim klikom misa.

Znaci desni klik na button crvena-> boja olovke za crtanje desnim klikom crvena.

Jel neko od vas mozda zna na koji to nacin rijesiti? JA sam dosta guglao ali nisam naletio na prave stvari.

Za lijevu tipku misa naravno nije problem.


 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

@Codebreaker:

Postoje i drugi načini da dohvatiš desni klik na button, ali "the right way" bi ti bio subclassirati (ili čak superclassirati) button kontrolu. Na hrvatskom: moraš ubaciti vlastiti window procedure u instancu button kontrole. To je mehanizam kojim win32 api simulira nasljeđivanje i polimorfizam.

 

Trenutno stanje je:

Poruka -> ButtonWindowProcedure -> DefWindowProcedure

 

A ti želiš postići:

Poruka -> CustomWindowProcedure -> ButtonWindowProcedure -> DefWindowProcedure

 

I onda u svojoj window proceduri moraš obraditi WM_RBUTTONDOWN i WM_RBUTTONUP poruke i o tome izvijestiti prozor roditelj. No problem, pushbutton ne reagira na desni klik, pa iako ćeš samim tim slanjem poruka roditelju postići željeni učinak i dalje nećeš dobivati vizualni feedback da si zapravo i pritisnuo gumb. To se može riješiti fejkanjem WM_LBUTTONDOWN i WM_LBUTTONUP poruka slijedećoj proceduri u nizu ali to još više komplicira stvari.

 

Mogao bih ti sada napisati nekakav primjer, ali neću. Ovo doista moraš shvatiti sâm kako treba da ne bi bilo dafuq situacija kasnije. Evo ti linkovi, prouči ih, i ako ti nakon toga i dalje nije jasno ja ću nakucati nešto koda i potruditi se što je moguće bolje objasniti:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773183%28v=vs.85%29.aspx

http://cboard.cprogramming.com/windows-programming/148771-subclassing-edit-box.html

http://winapi.foosyerdoos.org.uk/info/sub_superclass.php

 

P.S.

Mogao bi i razmisliti o pisanju vlastite kontrole za tu svrhu, kada već ionako trebaš toliko invazivno djelovati na button (koji ni od početka nije bio posve idealan izbor, jesam li u pravu?) praktički ti količina posla izađe na isto a manje je "prljavo".

To understand what recursion is, you must first understand recursion.
Poruka je uređivana zadnji put ned 22.12.2013 4:24 (rustweaver).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice