Aplikasi Berbasis Win32 ?
Mungkin sebagian orang tidak tahu apa itu aplikasi win32 ? ya..ya..ya, semua aplikasi Windows sebagian besar aplikasi Win32 karena memang mengarah ke 32-bit operation. Itu tidak salah tetapi hal yang dikatakan aplikasi Win32 apabila aplikasi tersebut menggunakn PURE WIN32 API sehingga code dari aplikasi tersebut langsung mengakses API dari OS Windows tersebut sehingga deployment dari aplikasi Win32 tidak memerlukan library/framework lain akibatnya ukuran file nya kecil dan performance jauh lebih bagus.
Skill Yang Dibutuhkan
Ok, untuk mempelajari pemrograman Win32 application diperlukan skill yang mendasar yaitu (urutan paling atas lebih penting daripada dibawah)
-
Pemrograman C. Ini wajib dan kalau anda belum bisa bahasa C, mendingan belajar dulu. Banyak buku baik bahasa Indonesia ataupun inggris yang membahas pemrograman bahasa C. PE College juga menyediakan video tutorial , bisa di cek
http://www.pecollege.net/
-
Windows Message. Ini perlu diketahui walaupun tidak perlu dihafal, lama2x hafal sendiri. Kenapa ini perlu? Karena kita harus mengetahui alur-alur command yang terjadi pada OS Windows
-
Pemrograman C++. Ini optional, jika bisa ini akan mempermudah anda dalam manage object anda dan juga dapat menerapkan full OOP.
IDE yang Digunakan
Banyak IDE untuk C/C++ yang dapat digunakan untuk coding Win32 application. Salah satunya anda bisa menggunakan Visual C++ dari merupakan bagian dari Visual Studio.
Hello World Win32
Biar lebih mantap, kita langsung ke demo. Disini gw menggunakan Visual Studio 2005. Pada IDE ini, buat project dengan tipe Visual C++ dan template Win32 Project seperti gambar dibawah ini

Beri nama dan lokasi untuk project ini, misalkan disini MyFirstWin32App. Jika selesai, klik tombol Ok sehingga akan muncul kotak dialog dibawah ini. Pilih opsi seperti gambar.
Setelah itu klik tombol Finish. Selesai deh!!....tinggal run saja dengan klik tombol F5 dan boommm, muncul deh aplikasi kita
Membedah Hello World Win32 Application
Kalau kita melihat di solution explorer maka kita akan mendapatkan seperti gambar dibawah ini

Sedangkan Entry point kita ad adi file MyFirstWin32App.cpp yang code nya dapat dilihat disini:
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MYFIRSTWIN32APP, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYFIRSTWIN32APP));
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
Ok, apa yang terjadi di Entry Point ini ? Let’s start….Awalnya kita deklarasikan global variable instance untuk aplikasi windows kita
Selanjutnya kita lakukan initialisasi data dan juga object windows kita, ingat OS Windows dibangun dengan menerapkan OO sehingga apa yang kita buat mesti inline dengan architecture OS Windows.
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MYFIRSTWIN32APP, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
Diatas tertulis pemanggilan MyRegisterClass() yang fungsinya untuk register object windows kita. Didalam function ini kita menentukan fitur-fitur windows dialog kita
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYFIRSTWIN32APP));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MYFIRSTWIN32APP);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
Hal yang terpenting dari register object windows kita adalah dibagian wcex.lpfnWndProc = WndProc; dimana WndProc merupakan callback function yang akan menerima Windows Message yang dikirim oleh OS Windows ke aplikasi kita. Call function WndProc dideklarasikan sebagai berikut
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Parameter passing message menunjukkan nilai dari Windows Message. Disini tergantung dari kita mau menangani Windows Message apa saja. Yang wajib ada adalah WM_PAINT untuk drawing windows dialog dan juga WM_DESTROY untuk keluar dari aplikasi.
Setelah kita deklarasikan object windows maka kita lakukan register dengan menggunakan API RegisterClassEx()
Object windows kita sudah di register terus selanjutnya baru kita kita buat windowsnya
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
Sedangkan untuk mengaktifkan/menampilkan windowsnya cukup kita panggil ShowWindow()
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Supaya aplikasi kita tidak keluar dari entry point maka kita lakukan looping dan sekalian menerima Windows Message kita
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Kalau diperhatikan aplikasi windows kita terlihat ada menu Help->About, nah untuk memanggil kotak dialog About cukup panggil dengan method DialogBox() yang dipanggil ketika meneriman windows message WM_COMMAND dengan menu id IDM_ABOUT (ini tergantung dari deklarasi menu Help->About)
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
Pada DialogBox(), kita lakukan passing callback function yaitu About() untuk menerima windows message yang dideklarasikan sebagai berikut
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
Itu aja sebagai perkenalan aplikasi Win32, next kita akan bekerja dengan Dialog Form dan meng-handle windows message yang terjadi..kalau ada hal yang ditanyakan saja posting disini..see you
Source code aplikasinya dapat didownload dibawah ini