Wednesday, 11 July 2012

Win32: Menggambar Dengan WM_PAINT (1)


Garis-garis yang menakjubkan!

IDE : Code::Blocks v10.05

Kali ini kita akan membuat beberapa garis yang membentuk sebuah objek. Pertama-tama mari kita membuat project Win32 terlebih dahulu, dengan memilih File -> New -> Project -> Win32 GUI Project -> Go. Pilih Frame Based sebagai tipe dasarnya lalu lanjutkan sampai finish. Untuk memulai proses penggambaran kita perlu menambahkan WM_PAINT pada looping message :


...
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT Ps;

    switch (message)         /* handle the messages */
    {
        case WM_PAINT:
   //waktunya menggambar sesuatu!
...

Sebelum masuk ke dalam message yang akan diolah, kita buat terlebih dahulu variabel untuk menampung garis, yaitu variabel hDC (dengan tipe data HDC ~ Handle Device Context). Setelah tercipta langsung saja ke proses melukis (inggris : paint) melalui WM_PAINT. Perhatikan lalu tambahkan kode berikut ini:


...
void symbolTambah(HDC *_hDC, int x, int y)
{
    MoveToEx(*_hDC,x+50,y, NULL);   //+, 1
    LineTo(*_hDC,x+30,y+40);        //+, 2
    LineTo(*_hDC,x, y+40);          //+, 3
    LineTo(*_hDC,x-10,y+60);        //+, 4
    LineTo(*_hDC,x+20,y+60);        //+, 5
    LineTo(*_hDC,x,y+100);          //+, 6
    LineTo(*_hDC,x+30,y+100);       //+, 7
    LineTo(*_hDC,x+50,y+60);        //+, 8
    LineTo(*_hDC,x+80,y+60);        //+, 9
    LineTo(*_hDC,x+90,y+40);        //+, 10
    LineTo(*_hDC,x+60,y+40);        //+, 11
    LineTo(*_hDC,x+80,y);           //+, 12
    LineTo(*_hDC,x+50,y);           //+, 13
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT Ps;

    switch (message)                  /* handle the messages */
    {
 case WM_PAINT:
  hDC = BeginPaint( hwnd, &Ps);
  MoveToEx(hDC, 120, 30, NULL);   //C 1
  LineTo(hDC, 70, 130);   //C 2
  LineTo(hDC, 160, 130);  //C 3
  LineTo(hDC, 180, 110);  //C 4
  LineTo(hDC, 120, 110);  //C 5
  LineTo(hDC, 150, 50);   //C 6
  LineTo(hDC, 200, 50);   //C 7
  LineTo(hDC, 220, 30);   //C 8
  LineTo(hDC, 120,30);    //C 9

  //menampilkan karakter tambah ('+')
  symbolTambah(&hDC,210,30);
  symbolTambah(&hDC,320,30);
  EndPaint(hwnd, &Ps);
        break;
...


MoveToEx(HDC,X,Y,tagPOINT) adalah proses dimana titik pertama akan digambar. LineTo(HDC,X,Y) digunakan untuk membentuk garis dari titik sebelumnya menuju ke titik yang baru dibuat. Keterangan komentar C1 bertujuan sebagai penanda pada gambar berbentuk huruf C. Gambar C tersebut dibentuk dengan 9 titik, dimana titik pertama dan kesembilan menempati posisi yang sama. Selanjutnya membuat karakter '+', tapi disini kita memerlukan 2 buah karakter '+'. Dibanding membuat karakter yang sama dengan copy-paste kode (atau menulis ulang?!!! ~ cape deeh! ), kita buat saja sebuah fungsi untuk mempermudah yaitu symbolTambah(HDC,X,Y). Kordinat X dan Y -nya dapat kita sesuaikan. Sehingga akan terlihat seperti gambar berikut:

Gambar 1. Menampilkan informasi untuk setiap titik pada gambar.

Jika anda mengalami masalah saat membuat file project atau menulis kode-kode diatas. Anda dapat men-Download file berikut dari MediaFire. So, Happy Coding .

- krofz

2 comments:

  1. tanx banyak ya bang ilmunya.....
    kalo kuliah pasti dah mahal ni persemesternya!!!
    xixixi

    ReplyDelete

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top