7.8.07

Win32 Hello World

Saya paste-kan "beberapa" baris kode di bawah ini.
Kesan pertama yang timbul saat melihat barisan kode ini mungkin mengerikan!
Hanya untuk menampilkan window yang sedemikian sederhananya harus mengetikan sedemikian banyak baris kode?
Jawabannya ya dan tidak.
  • Ya, baris kode di bawah adalah minimal
  • Tidak harus diketik. Saya belom pernah bertemu dengan programmer Windows yang secara "manual" mengetikan baris kode di bawah. Kebiasaannya adalah baris kode tersebut di simpan dalam suatu file dan kemudian dikopi-pastekan saat dibutuhkan :)
Dibandingkan program yang berbasis windows, program DOS hanya membutuhkan ± 5 baris kode untuk ber-"Hello, World" ria. (saya berbicara tentang pemrograman standar, dan bukan pemrograman "hard-core" yang diikutsertakan dalam kontest Obfuscated code.


#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWinWorld") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     /* definisi window class */
     wndclass.style         = CS_HREDRAW | CS_VREDRAW;
     /* opsi redraw */
     wndclass.lpfnWndProc   = WndProc;
     /* window function */
     wndclass.cbClsExtra    = 0;
     /* bytes extra untuk class struct */
     wndclass.cbWndExtra    = 0;
     /* bytes extra untuk window struct */
     wndclass.hInstance     = hInstance ;
     /* window instance */
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
     /* icon program */
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
     /* cursor program */
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
     /* warna backgroud */
     wndclass.lpszMenuName  = NULL;
     /* window menu   */
     wndclass.lpszClassName = szAppName;
     /* nama class    */

   /* daftarkan window class yang telah kita definisikan di atas */
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),  szAppName, MB_ICONERROR) ;
          return 0 ;
     }
  
   /* buat window dengan nama class yang telah didaftarkan di atas */
     hwnd = CreateWindow (szAppName, /* nama class window      */
TEXT ("The Hello World Program"), /* judul window   */
WS_OVERLAPPEDWINDOW, /* style window    */
CW_USEDEFAULT, /* posisi x window   */
CW_USEDEFAULT, /* posisi y window  */
CW_USEDEFAULT, /* lebar window   */
CW_USEDEFAULT, /* tinggi window   */
NULL, /* handle parent window */
NULL, /* menu window   */
hInstance, /* window instance  */
NULL); /* parameter tambahan  */

   /* tampilkan window yang telah dibuat */
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

   /* proses Windows message */
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

/* window procedure yang akan memproses setiap message yang diterima */
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
   /* contoh message yang diterima dari Windows adalah WM_DESTROY, yaitu windowakan di-"hancurkan", berdasarkan perintah yang diterima dari pengguna program, biasanya pengguna meng-klik tombol close */

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}


Saya tidak membahas lebih lanjut, silahkan diamati saja kode program di atas, dan mulai modifikasi.

No comments: