WinAPI : DrawLine

Opetten WinAPIa, ja tarvitsen hieman apua.
-----------------------------------------------

CreateWindowEx(NULL, "button", NULL, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 0, 472, 245, hwnd, (HMENU) 0, hInstance, NULL); // kehys

Kyseisellä koodin saan tehtyä laatikon Dialogiin.

Miten saan tehtyä suoran viivan?
4411
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

kuten laatikko aseta leveydeksi 1 ?

tai vastaa WM_PAINT viestiin.

helpointa lienee käyttää jotain resurssi editoria ?

Äänestä
  • Sain toimimaan kyseisen ongelman.

    Pystyykö resurssieditorilla jos tekee esim. dialogin, niin kopiomaan sen jotenkin tuonne WM_CREATE osioon?

    Jotenkin niin, että saisin vaihdettua ikkunan sisältöä tarpeen mukaan. (Erikseen tietysti voi luoda Dialogin, mutta sille nyt ei ole tarvitta.)

    Äänestä

Käsittelet WM_PAINT sanoman niinkun tuossa joku jo mainitsikin.

Siinä sinun pitää hankkia ensiksi piirtopinnan kahva BeginPaint -funktiolla.

Kun olet saanut piirtopinnan kahvan, valitset vaikka kynän piirtopinnalle. Tässä käytä SelectObject ja GetStockObject -funktioita.

GetClientRect funktiolla saat vaikkapa sen haluamasi kontrollin koordinaatit jonka päälle haluat niitä viivoja piirrellä.

MoveToEx ja LineTo funktioilla piirtelemään.

Muista lopettaa piirtäminen EndPaint funktiolla.

Katso msdn:stä noiden funktioiden kuvaukset. Löytyy varmaan tarkat esimerkitkin.

Äänestä
  • Kiitos vinkistä! Sain WM_PAINTin MoveTo&LineTo toimimaan ja piirrerrettyä viivoja ja pisteitä.

    Entäs bitmapin laitto ruudulle? Osaatko sanoa mitä vikaa kyseisessä koodissa on? Tuota mietin eilen ainakin neljätuntia, ja mielestäni se on tehty aivan esimerkkien mukaisesti.

    case WM_PAINT:
    {
          
    HBITMAP bmp = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_KUVA));

    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    SetPixel(hdc,100,10,RGB(255,0,255)); //testataan että piirto onnistuu
    HDC hdcMem;
    RECT rc;

    GetClientRect(hwnd,&rc);
    hdcMem = CreateCompatibleDC(hdc);
    SelectObject(hdcMem,bmp);
          
    BitBlt(hdc,0,0,100,100,hdcMem,0,0,SRCCOPY);

    DeleteDC(hdcMem);
    EndPaint(hwnd, &ps);
    }

    Äänestä

Kommentoi aloitusta


help kirjoitti:

Opetten WinAPIa, ja tarvitsen hieman apua.
-----------------------------------------------

CreateWindowEx(NULL, "button", NULL, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 0, 472, 245, hwnd, (HMENU) 0, hInstance, NULL); // kehys

Kyseisellä koodin saan tehtyä laatikon Dialogiin.

Miten saan tehtyä suoran viivan?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu