MFC C++
Pembuatan aplikasi menggunakan c++ berbasis GUI dengan MFC lumayan rumit, karena masih sangat sedikitnya tutorial tentang pembahasan MFC, siapa tahu ini bisa bermanfaat bagi yang membutuhkannya
1. Pengetahuan MFC
Microsoft Visual C + + yang merupakan salah satu tool pemrograman yang digunakan untuk membuat aplikasi komputer untuk keluarga sistem operasi Microsoft Windows.
Untuk membantu itu, maka diciptakan Microsoft Foundation Class (MFC) untuk sebagai sebuah adaptasi dari library Win32 yang digunakan dalam Microsoft Visual Studio.
MFC (Microsoft Foundation Class) adalah tool khusus berbentuk library yang digunakan untuk pembuatan aplikasi windows dari visual C++ merupakan tool yang mirip dengan ObjectWindow dari Borland. MFC mengandung lebih dari 200 kelas yang dapat langsung digunakan secara langsung yang berfungsi terutama sebagai kelas dasar dari kelas dalam pembuatan window.
MFC juga merupakan sebuah framework yang lebih dari sekedar koleksi kelas, MFC membantu menentukan untuk struktur dalam sebuah aplikasi dan menangani banyak tugas-tugas untuk sebuah aplikasi.
Untuk membantu itu, maka diciptakan Microsoft Foundation Class (MFC) untuk sebagai sebuah adaptasi dari library Win32 yang digunakan dalam Microsoft Visual Studio.
MFC (Microsoft Foundation Class) adalah tool khusus berbentuk library yang digunakan untuk pembuatan aplikasi windows dari visual C++ merupakan tool yang mirip dengan ObjectWindow dari Borland. MFC mengandung lebih dari 200 kelas yang dapat langsung digunakan secara langsung yang berfungsi terutama sebagai kelas dasar dari kelas dalam pembuatan window.
MFC juga merupakan sebuah framework yang lebih dari sekedar koleksi kelas, MFC membantu menentukan untuk struktur dalam sebuah aplikasi dan menangani banyak tugas-tugas untuk sebuah aplikasi.
3. MFC pada Visual Studio
4. Pembuatan Aplikasi
Bab pertama Hello MFC
Pemodelan Windows Programing dengan MFC
pemrograman windows c++ berbasis MFC beroperasi secara berbeda, disini akan dijelaskan secara singkat menurut pemahaman penulis, mungkin berbeda dengan pemahaman anda. disini mereka (pemrograman windows) menggunakan model pemrograman event-driven yang diilustrasikan seperti gambar dibawah ini.
di mana aplikasi akan merespon kejadian/proses dengan pengolahan pesan yang dikirim oleh sistem operasi, setiap aksi/atau event bisa menjadi sebuat keystroke, sebuah aksi klik dari sebuah mouse, atau perintah untuk membuat sebuah tampilan windows, sejauh ini mungkin sulit dipahami maksud dari kalimat diatas, anda bisa melihat gambar dibawah ini untuk lebih memperjelas keterangan diatas.
Entry point untuk program Windows pada MFC adalah menggunakan fungsi yang bernama WinMain, tetapi sebagian besar aksi/event terjadi dalam suatu fungsi yang dikenal sebagai prosedur windows. dari prosedur windows ini pesan akan dikirim ke Windows. Fungsi WinMain ini akan menciptakan sebuah windows kemudian masuk kedalam sebuah pesan yang berulang(Message Loop) dan bergantian mengambil pesan kesebuah prosedur windows, lalu pesan akan menunggu dalam antrian pesan sampai mereka diambil.
Sebuah aplikasi Windows sebagian besar akan melakukan pengolahan dalam respon terhadap pesan-pesan yang diterima, dan di antara pesan tersebut, tetapi itu tidak sedikit kecuali akan menunggu untuk pesan berikutnya.
lalu pesan (Message Loop) akan berakhir ketikan pesan WM_QUIT akan dipanggil dari antrian pesan yang dimaksud diatas, menandakan bahwa waktunya untuk aplikasi berakhir atau ditutup.
Pesan ini biasanya muncul karena user atau pengguna memilih File menu Keluar,dengan klik tombol close (tombol kecil dengan tanda X yang ada di sudut kanan atas windows), atau dipilih Close dari menu sistem window. Ketika pesan(message loop) berakhir, WinMain kembali pada alur awal dan aplikasi berakhir/tertutup.
gambar tersebut adalah menggambarkan proses berjalannya windows programing
Windows N MFC
Prosedur Windows biasanya memanggil fungsi lainya untuk membantu proses pesan-pesan yang diterimanya.Hal ini dapat memanggil fungsi-fungsi lokal ke aplikasi tersebut,atau dapat memanggil fungsi-fungsi API yang disediakan oleh Windows, Fungsi API yang terkandung dalam modul khusus yang dikenal sebagai dinamic-link library , atau DLL.
API Win32 sangat banyak bahkan ratusan fungsi yang dapat memanggil aplikasi untuk melakukan berbagai tugas seperti membuat Windows( masksud windows disini adalah tampian gui windows), menggambar garis, dan masukan file input dan output.
Kode yang diberikan untuk memproses pesan tertentu dikenal sebagai handler pesan. Pesan yang tidak diproses oleh aplikasi akan disampaikan ke fungsi API yang bernama DefWindowProc, yang memberikan tanggapan default ke pesan yang belum diolah.
Introduction to Messages
Sistem operasi Microsoft Windows tidak dapat memprediksi jenis permintaan apa dari suatu objek yang akan memerlukan pelayanan yabng harus diambil dan jenis tugas apa dari suatu objek lain yang akan membutuhkanya. Untuk mengelola semua tugas dan request, lalu objek mengirimkan pesan, dari satu pesan pada suatu waktu, maka untuk sistem operasi memilik alasan ini ,sebab itulah Microsoft Windows dikatakan sebagai sistem operasi Message-driven.
Pesan akan terbagi dalam berbagai kategori, tetapi seperti apa yang telah disebutkan , masing-masing objek memiliki tanggung jawab untuk memutuskan bagaimana pesan mengirim dan kapan akan mengirim. Oleh karena itu, sebagian besar pesan yang kita akan review di sini adalah bagian dari window umum.
Begitu objek telah menyusun pesan, maka ia harus mengirimkannya ke tepat sasaran, yang bisa menjadikan sistem beroperasi. Menulis dan mengirim pesan inilah yang disebut sebagai sebuah event.dan Objek juga dikatakan suatu event . Untuk membuat perbedaan antara pesan dan event, maka nama pesan biasanya dimulai dengan WM_ yang merupakan singkatan dari Window Message . sedangkan Nama dari suatu event biasanya dimulai dengan On yang menunjukkan aksi. Ingatlah, pesan adalah apa yang perlu dikirim. sedangkan Even adalah aksi mengirimkan pesan.
A Map of Messages
Makro DECLARE_MESSAGE_MAP harus disediakan di akhir dari definisi kelas. Pesan yang sebenarnya harus tercantum tepat di atas garis DECLARE_MESSAGE_MAP.
Untuk melaksanakan pesan, Anda harus membuat daftar pesan yang digunakan program Anda . Tabel ini menggunakan dua macro pembatas. Ini dimulai dengan BEGIN_MESSAGE_MAP dan berakhir dengan macro END_MESSAGE_MAP. Makro BEGIN_MESSAGE_MAP mengambil dua argumen, nama kelas dan kelas MFC yang diperoleh dari kelas tersebut
BEGIN_MESSAGE_MAP(CSimpleFrame, CFrameWnd)
Seperti makro DECLARE_MESSAGE_MAP, END_MESSAGE_MAP mengambil bukan argumen. Tugasnya adalah hanya untuk menentukan akhir dari daftar pesan. Tabel pesan dapat dibuat sebagai berikut:
#include <afxwin.h>
#include <afxdlgs.h>
#include "resource.h"
class CExerciseApp : public CWinApp
{
public:
BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
class CExerciseDlg : public CDialog
{
public:
enum { IDD = IDD_EXERCISE_DLG };
CExerciseDlg();
~CExerciseDlg();
DECLARE_MESSAGE_MAP()
};
CExerciseDlg::CExerciseDlg()
: CDialog(CExerciseDlg::IDD)
{
}
BEGIN_MESSAGE_MAP(CExerciseDlg, CDialog)
END_MESSAGE_MAP()
CExerciseDlg::~CExerciseDlg()
{
}
BEGIN_MESSAGE_MAP(CExerciseApp, CWinApp)
END_MESSAGE_MAP()
BOOL CExerciseApp::InitInstance()
{
CExerciseDlg Dlg;
m_pMainWnd = &Dlg;
Dlg.DoModal();
return TRUE;
}
CExerciseApp theApp;
dari mana pesan(Message) itu berasal, dan jenis informasi apa yang akan mereka sampaikan? Windows akan mendefinisikan banyak pesan bahkan ratusan jenis pesan yang berbeda. Kebanyakan pesan memiliki nama yang dimulai dengan huruf "WM" dan (underscore) garis bawah, seperti di WM_CREATE dan WM_PAINT.
Tabel berikut menunjukkan 10 dari pesan yang paling umum digunakan dalam pembuatan aplikasi.
10 perintah Windows Messages
=================================================================
WM_CHAR sebuah karakter adalah input dari keyboard.
WM_COMMAND Pengguna memilih menu, atau kontrol guna mengirimkan pemberitahuan ke item menu.
WM_CREATE Membuat sebuah windows / jendela.
WM_DESTROY membuat sebuah windows destroyed.
WM_LBUTTONDOWN Tekan tombol kiri pada mouse.
WM_LBUTTONUP Tombol kiri mouse apa bila di lepas.
WM_MOUSEMOVE Pointer mouse dipindahkan.
WM_PAINT Sebuah window digunakan untuk menggambar.
WM_QUIT Ini digunakan untuk mengakhir/menutup windows.
WM_SIZE Sebuah window resize.
=================================================================
ok itu adalah sekilas mengenai message pada windows yang menggunakan fungsi WinMain, pada pembahasan selanjutnya akan membahas MFC lebih lanjut.
Pengenalan MFC
apa itu MFC, MFC merupakan GUI dari C++ dalam membuat sebuah aplikasi User Interface yang merupakan class library c++ yang di sediakan oleh microsoft. Beberapa kelas MFC yang sangat sederhana, seperti kelas CPoint yang mewakili sebuah titik (lokasi yang ditetapkan koordinanya dengan x dan y ). Misalah yang lain yang lebih kompleks, seperti kelas cwnd yang melapisi fungsionalitas Windows( jendela).
The Structure of an MFC Application
sebuah Aplikasi mfc akan melakukan dua hal dasar yaitu :
Menciptakan sebuah jendela utama aplikasi itu sendiri dan melakukan proses awal, seperti mengalokasikan memori dan memproses pesan ke jendela atau aplikasi.
Saat menulis sebuah program, langkah pertama adalah mendefinisikan dan membuat jendela utama aplikasi, yang merupakan "Bangunan Awal aplikasi" atau bagian dari layar yang akan mengendalikan aplikasi yang dibuat.
Penulisan program hanya ditulis di dalam jendela itu sendiri dan tidak di jendela program lainnya.
Jika sebuah program mencoba ditulis di luar wilayahnya, tidak akan muncul di layar. Ini sebagaimana sistem operasi menyimpan program sehingga tidak mengganggu atau merusak kode yang satu dengan yang lainya di layar. jika anda pernah sekali membuat aplikasi MFC pasti anda tau apa maksud yang saya jelaskan diatas.
Sebuah jendela utama program aplikasi pada MFC disebut juga sebagai Mainframe. Jendela utama menampilkan menu bar. Jendela utama, atau mainframe, dapat menjadi indux untuk jendela jendela yang dibuat lainnya.
Pada pembahasan selanjutnya nanti akan membuat sebuah aplikasi MFC sederhana.
Contoh pertama menunjukkan bagaimana Anda membuat jendela utama dengan fitur yang standar.
Contoh kedua menunjukkan Anda bagaimana untuk membuat jendela utama dengan unsur-unsur non-klien opsional visual
Dalam aplikasi MFC, Anda memperoleh jendela utama atau kelas mainframe dari kelas MFC CFrameWnd, yang berasal dari cwnd.
Semua kelas MFC akan dimulai dengan "C" contoh CFrameWnd adalah kelas MFC yang memanggil kelas mainframe Anda, itu berisi fungsi yang akan dibutuhkan untuk jendela utama. sedangkan Cwnd adalah kelas dasar CFrameWnd. sedangkan untuk Kotak dialog (dialog Box) dan kontrol disini juga merupakan jendela, sehingga cwnd juga merupakan kelas dasar kotak dialog dan kontrol.
Programer perlu membuat objek turunan dari kelas mainframe yang akan menjadi objek jendela utama. Jadi objek mainframe dari jendela utama Anda akan mewarisi perilaku standar dari CFrameWnd dan dapat memiliki perilaku/behafior tambahan yang sesuai untuk setiap fungsi anggota yang tetapkan di kelas mainframe.
Selain itu, perilaku yang terkandung dalam Member Function (fungsi anggota) warisan dari CFrameWnd dapat dimodifikasi dengan menimpa anggota fungsi-fungsi ini lalu diwarisikan dengan fungsi anggota yang diubah di kelas mainframe.
Setiap aplikasi MFC akan memiliki kelas mainframe. Dalam tulisan ini, saya telah memilih untuk memberikan kelas mainframe dalam file terpisah. Kode yang disusun nantinya ini akan cocok dengan compiler digunakan membuat aplikasi pertama, karena alat membangun sebuah file terpisah dari kelas mainframe.
=========================
Semua kelas dalam MFC akan didefinisikan kedalam file header <afxwin.h>.Tanda kurung di sekitar file header berfungsi memberitahu compiler untuk melihat isi dalam subdirektori compiler untuk setiap file yang ada didalamnya, bukan hanya di direktori kerja saja.
Awalan "AFX" adalah sebuah singkatan dari "application framework x." File header <afxwin.h> berisi definisi dari kelas MFC, yang mengetahui bagaimana sebuah compiler untuk memasukkan kelas CWinApp dan CFrameWnd. File header ini juga berisi sejumlah direktif (# include) , yang membawa kedalam file header yang lainya.
<afxwin.h> juga termasuk file header afx.h, yang pada intinya meliputi lima file header lainya yaitu : string.h, stdio.h, stdlib.h, time.h, dan afx.ini.File header <afxwin.h> di compiler yang akan membaca beberapa file header yang ada sebelum dimulainya kompilasi.
Ini adalah daftar file header yang termasuk dalam file <afxwin.h>.
File Contents
afxwin.h MFC header file
afx.h MFC header file for utility functions
string.h C run-time library for string functions
stdio.h C run-time library for input/output
stdlib.h Standard C run-time library
time.h C run-time library for time functions
afx.ini Inline function declarations
windows.h Windows OS header file
afxmsg_.h Message map table for MFC
afxdd_.h Standard DDX_and DDV_routines
afxwin1.in1 Inline function declarations
afxwin2.in1 Inline function declarations
Pengantar Win32
Win32 adalah library yang terbuat dari tipe data, variabel, konstanta, fungsi, dan kelas (kebanyakan struktur) yang dapat digunakan untuk membuat sebuah aplikasi untuk keluarga sistem operasi Microsoft Windows
Sama seperti C + + program selalu memiliki fungsi main (), sebuah program Win32 menggunakan fungsi pusat yang disebut winmain.
Sintaks fungsi yaitu:
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow );
Untuk mendukung karakter internasional, Microsoft Windows menyediakan versi lain dari fungsi ini yang bernama _tWinMain. Versi ini menggunakan sintaks yang sama (argumen yang sama) sebagai yang pertama.
Tidak seperti C + + 's fungsi main (), argumen dari fungsi winmain () tidak opsional. Program akan membutuhkannya untuk berkomunikasi dengan sistem operasi. Berikut adalah contoh memulai program dengan winmain () fungsi:
#include <windows.h>
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
return 0;
}
Microsoft Foundation Class (MFC) library menyediakan satu set fungsi, konstanta, tipe data, dan kelas untuk mempermudah membuat aplikasi untuk keluarga Microsoft Windows sistem operasi.
CObject, the Ancestor of All/Most MFC Classes
Untuk melaksanakan fungsi nya, MFC yang diatur sebagai pohon kelas hirarki , nenek moyang dari CObject itu sendiri. Meskipun Anda dapat membuat kelas C + + untuk aplikasi Anda, sebagian besar sebuah kelas akan menggunakan seluruh turunan dari CObject langsung ataupun tidak langsung .
Kelas CObject meletakkan dasar yang berharga bahwa kelas lain dapat dibangun di atasnya. Menggunakan aturan warisan, fungsi CObject dapat transparan untuk dapat diterapkan pada kelas-kelas lain seperti yang kita akan pelajari sedikit demi sedikit.
class CCar : public CObject
{
Ketika mewarisi sebuah kelas dari CObject, kelas akan dapat memanfaatkan fitur dari CObject induknya. Ini berarti bahwa akan tersedia sebuah fungsi yang diletakkan oleh metodnya
.
Berikut ini adalah beberapa metod dari kelas CObject adalah:
* CObject ();
Konstruktor ini memungkinkan Anda untuk menggunakan sebuah instance dari CObject. Jika telah membuat sebuah kelas berdasarkan CObject, ketika mendeklarasikan sebuah instance dari kelas tersebut maka, konstruktor default CObject tersedia dan memberikan akses ke metode CObject.
* CObject (const CObject & Src);
metod ini digunakan jika akan menyalin sebuah variabel CObject dari kelas yang digunakan dalam sebuah program, misalnya untuk menetapkan ke variabel lain, dapat menggunakan copy constructor yang diwariskanya. Karena objek berasal dari CObject, compiler akan membuat salinan variabel secara member-by-member.
* Serialize ();
Metode ini memungkinkan untuk meletakan sebuah nilai-nilai dari sebuah objek.
* AssertValid ();
Metode ini digunakan untuk memeriksa sebuah kelas . Karena kelas warisan biasanya dimaksudkan untuk menyediakan fungsionalitas baru berdasarkan kelas induk, ketika akan membuat kelas berdasarkan CObject, maka harus menyediakan proses pengecekan untuk sebuah variabel . Dalam hal ini harus menyediakan sebuah implementasi sendiri dari method AssertValid () . Agar dapat menggunakannya misalnya untuk memeriksa bahwa variabel unsigned int selalu positif.
Objek dari sebuah aplikasi akan mengirim pesan ke sistem operasi untuk menentukan apa yang mereka inginkan. Library MFC menyediakan kelas khusus untuk mengelola banyak pesan. Kelas disebut CCmdTarget. Objek akan kembali ke sana ketika berhadapan dengan pesan.
==========================================================================
Untuk membuat sebuah program atau aplikasi, maka akan memperoleh sebuah kelas dari kelas CWinApp di MFC. Kelas CWinApp berasal dari kelas CWinThread. Dan CWinThread berasal dari kelas bernama CCmdTarget,ini yang berasal dari CObject. CWinApp singkatan Kelas Untuk Sebuah Aplikasi Windows:
Perlu di ingat bahwa
Karena kelas CWinApp didefinisikan pada file header AFXWIN.H, pastikan Anda menyertakan file yang mana CWinApp sedang digunakan.
Daripada membuat aplikasi yang menggunakan kelas Win32 dan fungsi "yang masih baku",Library MFC telah menyederhanakan proses ini dengan menyediakan mekanisme yang disebut framework. Framework adalah seperangkat kelas, fungsi, dan teknik yang digunakan untuk membuat aplikasi selengkap mungkin dengan sebagai beberapa baris kode yang tersusun sebaik mungkin.
Untuk menyediakan semua fungsionalitas ini, framework bekerja di balik layar dengan kelas CWinApp untuk mengumpulkan kelas dan fungsi MFC yang diperlukan, untuk mengenali dan mendamaikan kelas-kelas Win32 bahwa aplikasi tersebut membutuhkanya.
Rekonsiliasi ini juga dimungkinkan oleh satu set fungsi global. Fungsi-fungsi ini memiliki nama yang dimulai dengan AFX ... Beberapa fungsi-fungsi ini:
* AfxFormatString1
Sebuah Objek Global dari Sebuah Aplikasi
Untuk membuat kelas aplikasi yang tersedia dan dapat diakses oleh objek aplikasi itu sendiri, maka harus mendeklarasikan variabel global terlebih dahulu, maka dari itu harus ada walau hanya satu variabel dari sebuah aplikasi. Variabel ini adalah jenis kelas turunan dari CWinApp. Berikut adalah contohnya:
class CSimpleApp : public CWinApp
{
};
CSimpleApp MyApplication;
Seperti yang terlihat,ini adalah nama variabel global yang inginkan. Dalam Microsoft Visual C + +, variabel ini biasa diberi nama theApp. Berikut adalah contohnya:
CSimpleApp theApp;
Untuk mendapatkan pointer ke variabel ini dari mana saja dalam sebuah aplikasi , maka dapat memanggil fungsi framework berikut AfxGetApp () . Sintaks-nya adalah:
CWinApp* AfxGetApp();
Untuk melaksanakan peran winmain di fungsi Win32 () , framework diimplementasikan sendiri menggunakan fungsi ini dan MFC menyediakan fungsi ini AfxWinInit (). Hal ini dideklarasikan sebagai berikut:
BOOL AFXAPI AfxWinInit(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow);
Seperti yang Anda lihat, di Win32 fungsi WinMain(); dan AfxWinInit (); di MFC menggunakan argumen yang sama.
Ketika Anda menjalankan aplikasi seperti Notepad, anda dikatakan telah menciptakan sebuah instance dari aplikasi. Dengan cara yang sama, ketika anda mendeklarasikan sebuah variabel kelas, maka sebuah instance dari kelas tersebuh dibuat dan tersedia untuk projeck.
fungsi Winmain (); juga memungkinkan Anda untuk membuat sebuah instance dari sebuah aplikasi, disebut sebagai argumen hInstance dari fungsi winmain (); (Argumen yang sering penulis sebut dari awal pembahasan disini adalah parameter). contoh ini dibuat sebagai suatu HINSTANCE. Kelas CWinApp menyediakan variabel m_hInstance sesuai contoh yang disebut. Variabel ini dapat membuat Anda mendapatkan pegangan ke instance dari aplikasi Anda.
Atau, untuk mendapatkan pegangan ke instance dari aplikasi Anda, maka Anda dapat menghubungi AfxGetInstanceHandle () fungsi global. Sintaks-nya adalah:
HINSTANCE AfxGetInstanceHandle ();
Bahkan lebih dari itu, untuk mendapatkan pegangan untuk aplikasi Anda, Anda dapat memanggil API Win32 fungsi GetWindowLong (); . Misalkan anda telah membuka Notepad untuk melihat kode sumber dari sebuah dokumen HTML. Ini dikatakan bahwa Anda memiliki instance dari Notepad. Bayangkan bahwa Anda ingin membuka dokumen teks menggunakan Notepad tanpa menutup contoh pertama Notepad. Untuk melakukan ini, Anda harus membuka salinan lain dari Notepad. Ini salinan kedua Notepad adalah contoh lainnya. Dalam hal ini, contoh pertama disebut sebagai contoh sebelumnya. Untuk aplikasi Win32, contoh sebelumnya akan menjadi argumen hPrevInstance dari fungsi Winmain () . Untuk aplikasi Win32, argumen hPrevInstance selalu memiliki nilai NULL. Jika Anda ingin mengetahui apakah contoh aplikasi sebelumnya sudah ada, Anda dapat menghubungi method cwnd:: FindWindow () . Sintaks-nya adalah:
static CWnd* PASCAL FindWindow(LPCTSTR lpszClassName, LPCTSTR lpszWindowName);
Jika Anda membuat jendela atau apabila jendela dapat dipastikan, bahwa dalam hal ini bisa menjadi sebuah objek WNDCLASS atau WNDCLASSEX, tentukan sebagai argumen/parameter untuk variabel lpszClassName. Jika Anda tidak tahu nama dari window dengan pasti, maka set argumen/parameter ini sebagai NULL. Argumen dari variabel lpszWindowName adalah keterangan yang mungkin dari window yang dimaksud. Bayangkan posisi tombol pada kotak dialog dan oleh pengguna ingin memulai Notepad dengan tombol itu lalu bayangkan jika Notepad itu sudah dibuka, tidak akan ada alasan untuk membuat contoh lain dari itu.
Kelas CWinApp menyediakan semua fungsionalitas dasar yang aplikasi butuhkan.dalam Hal ini dilengkapi dengan metode yang disebut InitInstance (). Sintaks-nya adalah:
virtual BOOL InitInstance();
Ketika membuat sebuah aplikasi, anda harus mengganti metode di kelas Anda sendiri. Metode ini digunakan untuk menciptakan aplikasi. Jika berhasil, ia mengembalikan TRUE atau nilai bukan nol. Jika aplikasi tidak dapat dibuat, kembali metode FALSE atau 0. Berikut adalah contoh mengimplementasikannya:
class CSimpleApp : public CWinApp
{
BOOL InitInstance() { return TRUE; }
};
perlu diingat bahwa metode juga bisa saja diterapkan sebagai berikut:
struct CSimpleApp : public CWinApp
{
BOOL InitInstance()
{
return TRUE;
}
};
atau sebagai berikut :
struct CSimpleApp : public CWinApp
{
BOOL InitInstance();
};
BOOL CSimpleApp::InitInstance()
{
return TRUE;
}
Untuk menjalankan program, Anda harus berkomunikasi denga path dan yang mungkin ada beberapa parameter tambahan untuk compiler. Informasi ini disebut informasi command line dan diberikan sebagai nilai string. Anda harus selalu ingat itu meskipun semua program pelajaran yang kita akan disusun menggunakan Visual C + +. Informasi common line dipasok ke compiler sebagai argumen lpCmdLine dari Fungso WinMain( );. Secara internal, Visual C + + menciptakan jalan dan berkomunikasi ke compiler ketika menjalankan program. Jika ingin mengetahui apa yang digunakan command Line untuk mengeksekusi program , kita dapat menghubungi fungsi GetCommandLine (); di Win32 . Sintaks-nya adalah:.
LPTSTR GetCommandLine(VOID);
Fungsi ini tidak membutuhkan sebuah argumen tapi akan mengembalikan commman line dari aplikasi yang diakhiri sebagai string-null
Identifier adalah konstanta integer yang namanya biasanya dimulai dengan ID. Meskipun dalam pemrograman Win32 biasanya dapat menggunakan nama resource sebagai string, dalam aplikasi MFC, resource biasanya dinamai dengan identifier mereka sendiri. Untuk membuat nama identifier (yang dianggap sbagai string) yang dikenal ke fungsi MFC (atau Win32) , maka menggunakan MAKEINTRESOURCE yang disebut makro. Sintaks-nya adalah sebagai berikut:
LPTSTR MAKEINTRESOURCE (WORD Identifier);
Makro ini mengambil identifier dari resource dan mengembalikan kesebuah nilai string yang diberikan kepada fungsi yang memanggilnya. Dalam arti yang tepat, setelah membuat file resource, maka harus dikompilasi untuk membuat file baru yang memiliki ekstensi.res. Untungnya, didalam Microsoft Visual C + + secara otomatis akan menyusun file dan akan ngelink ke aplikasi.
Pada pembahsan ini mengenai Dialog Box
Dialog Box
Sebuah kotak dialog dibuat dari kelas yang bernama CDialog. Kelas CDialog mengimplementasikan sebuah kelas yang bernama cwnd. lalu kelas cwnd berasal dari CCmdTarget:
Seperti kontrol lainnya, untuk kotak dialog harus diidentifikasi. Pengenal dari kotak dialog biasanya dimulai dengan IDD_ . Contoh identifier kota dialog ini IDD_SCHOOL_SURVEY. Oleh karena itu, bagian dari kotak dialog di file bisa mulai dengan:
IDD_SCHOOL_SURVEY
Library Win32 menyediakan serangkaian nama siap pakai kelas untuk menciptakan kontrol. Dengan cara yang sama, sebuah kotak dialog memiliki dua jenis kelas yang digunakan untuk membuat kotak dialog. Statemen DIALOG pada dasarnya/umunya yang biasa digunakan untuk membuat ID kotak dialog. Ini telah diperbarui dan diganti dengan nama DIALOGEX. Oleh karena itu, untuk menunjukkan dalam file yang bagian Anda membuat adalah untuk kotak dialog, ketik DIALOGEX. Berikut adalah contohnya:
IDD_SCHOOL_SURVEY DIALOGEX
Membuat Klass untuk Dialog Box
Setelah membuat resource untuk kotak dialog, Anda harus membuat sebuah class yang akan digunakan untuk menangani tugas-tugasnya. Untuk melakukan ini, maka harus menurunkan kelas dari CDialog. Anda dapat membuat sebuah file header dan file sumber untuk kotak dialog.
Dalam file header kelas dialog itu, menetapkan penghitungan yang disebut sebagai SLI dan menginisialisasi dengan identifier dari kotak dialog. Karena identifier yang terdaftar dalam file header , maka harus menyertakan file header diresource di mana Anda menggunakan dialog identifier.
Sebuah kotak dialog yang dibuat berdasarkan pada kelas CDialog. Seperti yang terlihat di atas, ketika membuat kotak dialog, Anda dapat memperoleh kelas dari CDialog. Kelas CDialog itu sendiri menyediakan tiga konstruktor default sebagai berikut:
CDialog ();
CDialog (uint nIDTemplate, cwnd * pParentWnd = NULL);
CDialog (LPCTSTR lpszTemplateName, cwnd * pParentWnd = NULL);
Constructor default, CDialog ();, dapat digunakan untuk mendeklarasikan variabel yang perilakunya belum diketahui atau, untuk satu alasan lainnya tergantung kebutuhan dalam pembuatan program, yang belum dapat didefinisikan. Ketika membuat kelas , Anda juga harus mendeklarasikan setidaknya constructor default.
Pengenal dari kotak dialog, seperti IDD_DIALOG1, dapat digunakan sebagai argumen pertama, nIDTemplate, dari konstruktor CDialog () untuk membuat kotak dialog dari resource yang ada.
Jika Anda menggunakan template Win32 untuk membuat kotak dialog Anda, kirimkan nama template ini sebagai nilai string ke konstruktor CDialog () , lpszTemplateName.
Ketika menerapkan konstruktor default, dalam menginisialisasi CDialog konstruktor induk dengan enumerator IDD maka dideklarasikan kedalam kelas Anda. Jika kotak dialog Anda memiliki pemilik dari dialog induk,mak tentukan sebagai argumen pParentWnd. Jika Anda menetapkan ke NULL, aplikasi akan digunakan sebagai induk dialog itu.
Jika Anda membuat objek secara dinamis untuk aplikasi maka menggunakan kelas dialog Anda, itu adalah ide yang baik untuk mendeklarasikan dan mendefinisikan sebuah destructor. Ini akan digunakan untuk menghancurkan objek dinamis tersebut.
Mendeklarasikan constructor
========
Mendeklarasikan constructor default dan destructor untuk kelas sebuah dialog dan mengimplementasikan mereka sebagai berikut (dalam file yang sama):
class CPreparationDlg : public CDialog
{
public:
enum { IDD = IDD_PREPARATION_DLG };
CPreparationDlg();
~CPreparationDlg();
};
CPreparationDlg::CPreparationDlg()
: CDialog(CPreparationDlg::IDD)
{
}
CPreparationDlg::~CPreparationDlg()
{
}
# sebelum menggunakan class baru, maka deklarasikan variable berlebih dahulu seperti berikut
BOOL CPreparationApp::InitInstance()
{
CPreparationDlg Dlg;
m_pMainWnd = &Dlg;
return TRUE;
}
Ada dua jenis kotak dialog:
modal dan modeless. Sebuah modal dari kotak dialog yang merupakan salah satu yang pengguna harus terlebih dahulu menutup agar mengakses ke jendela atau kotak dialog dari aplikasi yang sama.
Salah satu skenario di mana dalam menggunakan kotak dialog yaitu untuk menciptakan sebuah aplikasi yang berpusat di sekitar kotak dialog. Dalam hal ini, jika salah satu tidak ada jendela lain dari sebuah aplikasi atau jika semua jendela lain itu tergantung pada kotak dialog pusat/induk,maka harus diciptakan sebagai modal. Permohonan semacam ini disebut sebagai dialog _base
Ada dua teknik utama yang dapat Anda gunakan untuk membuat aplikasi berbasis dialog: dari awal atau menggunakan salah satu Visual C + + Wizards. Setelah membuat dialog dan resource yang berasal dari kelas CDialog, anda dapat mendeklarasikan variabel kelas dialog Anda. Untuk menampilkan kotak dialog sebagai moda, Anda dapat memanggil CDialog ini:: DoModal () metode dalam Anda CWinApp:: InitInstance () method. Sintaks-nya adalah:
virtual int DoModal ();
Metode ini dengan sendirinya akan menampilkan kotak dialog ada lagi sebagai modal. Kita akan mempelajari dalam menggunakan metod ini, untuk mengetahui bagaimana pengguna telah menutup kotak dialog tersebut.
Untuk menampilkan kotak dialog sebagai modal, maka dalam InitInstance (); event dari kelas turunan CWinApp ,dengan memanggil method DoModal () menggunakan variabel dialog Anda:
#include <afxwin.h>
#include <afxdlgs.h>
#include "resource.h"
class CPreparationApp : public CWinApp
{
public:
BOOL InitInstance();
};
class CPreparationDlg : public CDialog
{
public:
enum { IDD = IDD_PREPARATION_DLG };
CPreparationDlg();
~CPreparationDlg();
};
CPreparationDlg::CPreparationDlg()
: CDialog(CPreparationDlg::IDD)
{
}
CPreparationDlg::~CPreparationDlg()
{
}
BOOL CPreparationApp::InitInstance()
{
CPreparationDlg Dlg;
m_pMainWnd = &Dlg;
Dlg.DoModal();
return TRUE;
}
CPreparationApp theApp;
Ok untuk materi menenai MFC dapat dilihat halaman lain...
The Structure of an MFC Application
sebuah Aplikasi mfc akan melakukan dua hal dasar yaitu :
Menciptakan sebuah jendela utama aplikasi itu sendiri dan melakukan proses awal, seperti mengalokasikan memori dan memproses pesan ke jendela atau aplikasi.
Saat menulis sebuah program, langkah pertama adalah mendefinisikan dan membuat jendela utama aplikasi, yang merupakan "Bangunan Awal aplikasi" atau bagian dari layar yang akan mengendalikan aplikasi yang dibuat.
Penulisan program hanya ditulis di dalam jendela itu sendiri dan tidak di jendela program lainnya.
Jika sebuah program mencoba ditulis di luar wilayahnya, tidak akan muncul di layar. Ini sebagaimana sistem operasi menyimpan program sehingga tidak mengganggu atau merusak kode yang satu dengan yang lainya di layar. jika anda pernah sekali membuat aplikasi MFC pasti anda tau apa maksud yang saya jelaskan diatas.
Sebuah jendela utama program aplikasi pada MFC disebut juga sebagai Mainframe. Jendela utama menampilkan menu bar. Jendela utama, atau mainframe, dapat menjadi indux untuk jendela jendela yang dibuat lainnya.
Pada pembahasan selanjutnya nanti akan membuat sebuah aplikasi MFC sederhana.
Contoh pertama menunjukkan bagaimana Anda membuat jendela utama dengan fitur yang standar.
Contoh kedua menunjukkan Anda bagaimana untuk membuat jendela utama dengan unsur-unsur non-klien opsional visual
Pada contoh ketiga Anda menunjukkan bagaimana untuk menyesuaikan fitur lain dari jendela, yaitu: warna backgroun, ikon, dan kursor. Fitur-fitur ini disesuaikan dengan program yang akan dibuat.
============Dalam aplikasi MFC, Anda memperoleh jendela utama atau kelas mainframe dari kelas MFC CFrameWnd, yang berasal dari cwnd.
Semua kelas MFC akan dimulai dengan "C" contoh CFrameWnd adalah kelas MFC yang memanggil kelas mainframe Anda, itu berisi fungsi yang akan dibutuhkan untuk jendela utama. sedangkan Cwnd adalah kelas dasar CFrameWnd. sedangkan untuk Kotak dialog (dialog Box) dan kontrol disini juga merupakan jendela, sehingga cwnd juga merupakan kelas dasar kotak dialog dan kontrol.
Programer perlu membuat objek turunan dari kelas mainframe yang akan menjadi objek jendela utama. Jadi objek mainframe dari jendela utama Anda akan mewarisi perilaku standar dari CFrameWnd dan dapat memiliki perilaku/behafior tambahan yang sesuai untuk setiap fungsi anggota yang tetapkan di kelas mainframe.
Selain itu, perilaku yang terkandung dalam Member Function (fungsi anggota) warisan dari CFrameWnd dapat dimodifikasi dengan menimpa anggota fungsi-fungsi ini lalu diwarisikan dengan fungsi anggota yang diubah di kelas mainframe.
Setiap aplikasi MFC akan memiliki kelas mainframe. Dalam tulisan ini, saya telah memilih untuk memberikan kelas mainframe dalam file terpisah. Kode yang disusun nantinya ini akan cocok dengan compiler digunakan membuat aplikasi pertama, karena alat membangun sebuah file terpisah dari kelas mainframe.
=========================
Pada pembahsan berikut ini akan membahas dasar-dasar pembuatan aplikasi.
Semua kelas dalam MFC akan didefinisikan kedalam file header <afxwin.h>.Tanda kurung di sekitar file header berfungsi memberitahu compiler untuk melihat isi dalam subdirektori compiler untuk setiap file yang ada didalamnya, bukan hanya di direktori kerja saja.
Awalan "AFX" adalah sebuah singkatan dari "application framework x." File header <afxwin.h> berisi definisi dari kelas MFC, yang mengetahui bagaimana sebuah compiler untuk memasukkan kelas CWinApp dan CFrameWnd. File header ini juga berisi sejumlah direktif (# include) , yang membawa kedalam file header yang lainya.
<afxwin.h> juga termasuk file header afx.h, yang pada intinya meliputi lima file header lainya yaitu : string.h, stdio.h, stdlib.h, time.h, dan afx.ini.File header <afxwin.h> di compiler yang akan membaca beberapa file header yang ada sebelum dimulainya kompilasi.
Ini adalah daftar file header yang termasuk dalam file <afxwin.h>.
File Contents
afxwin.h MFC header file
afx.h MFC header file for utility functions
string.h C run-time library for string functions
stdio.h C run-time library for input/output
stdlib.h Standard C run-time library
time.h C run-time library for time functions
afx.ini Inline function declarations
windows.h Windows OS header file
afxmsg_.h Message map table for MFC
afxdd_.h Standard DDX_and DDV_routines
afxwin1.in1 Inline function declarations
afxwin2.in1 Inline function declarations
Pengantar Win32
Win32 adalah library yang terbuat dari tipe data, variabel, konstanta, fungsi, dan kelas (kebanyakan struktur) yang dapat digunakan untuk membuat sebuah aplikasi untuk keluarga sistem operasi Microsoft Windows
Sama seperti C + + program selalu memiliki fungsi main (), sebuah program Win32 menggunakan fungsi pusat yang disebut winmain.
Sintaks fungsi yaitu:
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow );
Untuk mendukung karakter internasional, Microsoft Windows menyediakan versi lain dari fungsi ini yang bernama _tWinMain. Versi ini menggunakan sintaks yang sama (argumen yang sama) sebagai yang pertama.
Tidak seperti C + + 's fungsi main (), argumen dari fungsi winmain () tidak opsional. Program akan membutuhkannya untuk berkomunikasi dengan sistem operasi. Berikut adalah contoh memulai program dengan winmain () fungsi:
#include <windows.h>
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
return 0;
}
Diingat Kembali tentang MFC
CObject, the Ancestor of All/Most MFC Classes
Untuk melaksanakan fungsi nya, MFC yang diatur sebagai pohon kelas hirarki , nenek moyang dari CObject itu sendiri. Meskipun Anda dapat membuat kelas C + + untuk aplikasi Anda, sebagian besar sebuah kelas akan menggunakan seluruh turunan dari CObject langsung ataupun tidak langsung .
Kelas CObject meletakkan dasar yang berharga bahwa kelas lain dapat dibangun di atasnya. Menggunakan aturan warisan, fungsi CObject dapat transparan untuk dapat diterapkan pada kelas-kelas lain seperti yang kita akan pelajari sedikit demi sedikit.
- Nilai yang akan melakukan streaming untuk menyimpan atau membuka isi file
- Pengontrolan dimik yang akan membuat dan penghancuran kelas yang mewarisinya
- Memeriksa validitas variabel kelas, dll
class CCar : public CObject
{
public:
CCar();
char *Make;
char *Model;
int Year;
long Mileage;
int Doors;
double Price;
};
Ketika mewarisi sebuah kelas dari CObject, kelas akan dapat memanfaatkan fitur dari CObject induknya. Ini berarti bahwa akan tersedia sebuah fungsi yang diletakkan oleh metodnya
.
Berikut ini adalah beberapa metod dari kelas CObject adalah:
* CObject ();
Konstruktor ini memungkinkan Anda untuk menggunakan sebuah instance dari CObject. Jika telah membuat sebuah kelas berdasarkan CObject, ketika mendeklarasikan sebuah instance dari kelas tersebut maka, konstruktor default CObject tersedia dan memberikan akses ke metode CObject.
* CObject (const CObject & Src);
metod ini digunakan jika akan menyalin sebuah variabel CObject dari kelas yang digunakan dalam sebuah program, misalnya untuk menetapkan ke variabel lain, dapat menggunakan copy constructor yang diwariskanya. Karena objek berasal dari CObject, compiler akan membuat salinan variabel secara member-by-member.
* Serialize ();
Metode ini memungkinkan untuk meletakan sebuah nilai-nilai dari sebuah objek.
* AssertValid ();
Metode ini digunakan untuk memeriksa sebuah kelas . Karena kelas warisan biasanya dimaksudkan untuk menyediakan fungsionalitas baru berdasarkan kelas induk, ketika akan membuat kelas berdasarkan CObject, maka harus menyediakan proses pengecekan untuk sebuah variabel . Dalam hal ini harus menyediakan sebuah implementasi sendiri dari method AssertValid () . Agar dapat menggunakannya misalnya untuk memeriksa bahwa variabel unsigned int selalu positif.
Objek dari sebuah aplikasi akan mengirim pesan ke sistem operasi untuk menentukan apa yang mereka inginkan. Library MFC menyediakan kelas khusus untuk mengelola banyak pesan. Kelas disebut CCmdTarget. Objek akan kembali ke sana ketika berhadapan dengan pesan.
==========================================================================
Sebuah Aplikasi Dasar
Perlu di ingat bahwa
Karena kelas CWinApp didefinisikan pada file header AFXWIN.H, pastikan Anda menyertakan file yang mana CWinApp sedang digunakan.
The Framework
Untuk menyediakan semua fungsionalitas ini, framework bekerja di balik layar dengan kelas CWinApp untuk mengumpulkan kelas dan fungsi MFC yang diperlukan, untuk mengenali dan mendamaikan kelas-kelas Win32 bahwa aplikasi tersebut membutuhkanya.
Rekonsiliasi ini juga dimungkinkan oleh satu set fungsi global. Fungsi-fungsi ini memiliki nama yang dimulai dengan AFX ... Beberapa fungsi-fungsi ini:
* AfxFormatString1
* AfxFormatString2
* AfxMessageBox
* AfxFreeLibrary
* AfxGetApp
* AfxGetAppName
* AfxGetInstanceHandle
* AfxGetMainWnd
* AfxGetResourceHandle
* AfxInitRichEdit
* AfxLoadLibrary
* AfxMessageBox
* AfxRegisterWndClass
* AfxSocketInit
* AfxSetResourceHandle
* AfxRegisterClass
* AfxBeginThread
* AfxEndThread
* AfxGetThread
* AfxWinInit
===============================Sebuah Objek Global dari Sebuah Aplikasi
Untuk membuat kelas aplikasi yang tersedia dan dapat diakses oleh objek aplikasi itu sendiri, maka harus mendeklarasikan variabel global terlebih dahulu, maka dari itu harus ada walau hanya satu variabel dari sebuah aplikasi. Variabel ini adalah jenis kelas turunan dari CWinApp. Berikut adalah contohnya:
class CSimpleApp : public CWinApp
{
};
CSimpleApp MyApplication;
Seperti yang terlihat,ini adalah nama variabel global yang inginkan. Dalam Microsoft Visual C + +, variabel ini biasa diberi nama theApp. Berikut adalah contohnya:
CSimpleApp theApp;
Untuk mendapatkan pointer ke variabel ini dari mana saja dalam sebuah aplikasi , maka dapat memanggil fungsi framework berikut AfxGetApp () . Sintaks-nya adalah:
CWinApp* AfxGetApp();
Untuk melaksanakan peran winmain di fungsi Win32 () , framework diimplementasikan sendiri menggunakan fungsi ini dan MFC menyediakan fungsi ini AfxWinInit (). Hal ini dideklarasikan sebagai berikut:
BOOL AFXAPI AfxWinInit(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow);
Seperti yang Anda lihat, di Win32 fungsi WinMain(); dan AfxWinInit (); di MFC menggunakan argumen yang sama.
Sebuah Window's Instance
Ketika Anda menjalankan aplikasi seperti Notepad, anda dikatakan telah menciptakan sebuah instance dari aplikasi. Dengan cara yang sama, ketika anda mendeklarasikan sebuah variabel kelas, maka sebuah instance dari kelas tersebuh dibuat dan tersedia untuk projeck.
fungsi Winmain (); juga memungkinkan Anda untuk membuat sebuah instance dari sebuah aplikasi, disebut sebagai argumen hInstance dari fungsi winmain (); (Argumen yang sering penulis sebut dari awal pembahasan disini adalah parameter). contoh ini dibuat sebagai suatu HINSTANCE. Kelas CWinApp menyediakan variabel m_hInstance sesuai contoh yang disebut. Variabel ini dapat membuat Anda mendapatkan pegangan ke instance dari aplikasi Anda.
Atau, untuk mendapatkan pegangan ke instance dari aplikasi Anda, maka Anda dapat menghubungi AfxGetInstanceHandle () fungsi global. Sintaks-nya adalah:
HINSTANCE AfxGetInstanceHandle ();
Bahkan lebih dari itu, untuk mendapatkan pegangan untuk aplikasi Anda, Anda dapat memanggil API Win32 fungsi GetWindowLong (); . Misalkan anda telah membuka Notepad untuk melihat kode sumber dari sebuah dokumen HTML. Ini dikatakan bahwa Anda memiliki instance dari Notepad. Bayangkan bahwa Anda ingin membuka dokumen teks menggunakan Notepad tanpa menutup contoh pertama Notepad. Untuk melakukan ini, Anda harus membuka salinan lain dari Notepad. Ini salinan kedua Notepad adalah contoh lainnya. Dalam hal ini, contoh pertama disebut sebagai contoh sebelumnya. Untuk aplikasi Win32, contoh sebelumnya akan menjadi argumen hPrevInstance dari fungsi Winmain () . Untuk aplikasi Win32, argumen hPrevInstance selalu memiliki nilai NULL. Jika Anda ingin mengetahui apakah contoh aplikasi sebelumnya sudah ada, Anda dapat menghubungi method cwnd:: FindWindow () . Sintaks-nya adalah:
static CWnd* PASCAL FindWindow(LPCTSTR lpszClassName, LPCTSTR lpszWindowName);
Jika Anda membuat jendela atau apabila jendela dapat dipastikan, bahwa dalam hal ini bisa menjadi sebuah objek WNDCLASS atau WNDCLASSEX, tentukan sebagai argumen/parameter untuk variabel lpszClassName. Jika Anda tidak tahu nama dari window dengan pasti, maka set argumen/parameter ini sebagai NULL. Argumen dari variabel lpszWindowName adalah keterangan yang mungkin dari window yang dimaksud. Bayangkan posisi tombol pada kotak dialog dan oleh pengguna ingin memulai Notepad dengan tombol itu lalu bayangkan jika Notepad itu sudah dibuka, tidak akan ada alasan untuk membuat contoh lain dari itu.
Kelas CWinApp menyediakan semua fungsionalitas dasar yang aplikasi butuhkan.dalam Hal ini dilengkapi dengan metode yang disebut InitInstance (). Sintaks-nya adalah:
virtual BOOL InitInstance();
Ketika membuat sebuah aplikasi, anda harus mengganti metode di kelas Anda sendiri. Metode ini digunakan untuk menciptakan aplikasi. Jika berhasil, ia mengembalikan TRUE atau nilai bukan nol. Jika aplikasi tidak dapat dibuat, kembali metode FALSE atau 0. Berikut adalah contoh mengimplementasikannya:
class CSimpleApp : public CWinApp
{
BOOL InitInstance() { return TRUE; }
};
perlu diingat bahwa metode juga bisa saja diterapkan sebagai berikut:
struct CSimpleApp : public CWinApp
{
BOOL InitInstance()
{
return TRUE;
}
};
atau sebagai berikut :
struct CSimpleApp : public CWinApp
{
BOOL InitInstance();
};
BOOL CSimpleApp::InitInstance()
{
return TRUE;
}
Command Line
Untuk menjalankan program, Anda harus berkomunikasi denga path dan yang mungkin ada beberapa parameter tambahan untuk compiler. Informasi ini disebut informasi command line dan diberikan sebagai nilai string. Anda harus selalu ingat itu meskipun semua program pelajaran yang kita akan disusun menggunakan Visual C + +. Informasi common line dipasok ke compiler sebagai argumen lpCmdLine dari Fungso WinMain( );. Secara internal, Visual C + + menciptakan jalan dan berkomunikasi ke compiler ketika menjalankan program. Jika ingin mengetahui apa yang digunakan command Line untuk mengeksekusi program , kita dapat menghubungi fungsi GetCommandLine (); di Win32 . Sintaks-nya adalah:.
LPTSTR GetCommandLine(VOID);
Fungsi ini tidak membutuhkan sebuah argumen tapi akan mengembalikan commman line dari aplikasi yang diakhiri sebagai string-null
onverting a Resource Identifier
Identifier adalah konstanta integer yang namanya biasanya dimulai dengan ID. Meskipun dalam pemrograman Win32 biasanya dapat menggunakan nama resource sebagai string, dalam aplikasi MFC, resource biasanya dinamai dengan identifier mereka sendiri. Untuk membuat nama identifier (yang dianggap sbagai string) yang dikenal ke fungsi MFC (atau Win32) , maka menggunakan MAKEINTRESOURCE yang disebut makro. Sintaks-nya adalah sebagai berikut:
LPTSTR MAKEINTRESOURCE (WORD Identifier);
Makro ini mengambil identifier dari resource dan mengembalikan kesebuah nilai string yang diberikan kepada fungsi yang memanggilnya. Dalam arti yang tepat, setelah membuat file resource, maka harus dikompilasi untuk membuat file baru yang memiliki ekstensi.res. Untungnya, didalam Microsoft Visual C + + secara otomatis akan menyusun file dan akan ngelink ke aplikasi.
Dialog BOX
Pada pembahsan ini mengenai Dialog Box
Dialog Box
Sebuah kotak dialog dibuat dari kelas yang bernama CDialog. Kelas CDialog mengimplementasikan sebuah kelas yang bernama cwnd. lalu kelas cwnd berasal dari CCmdTarget:
Seperti kontrol lainnya, untuk kotak dialog harus diidentifikasi. Pengenal dari kotak dialog biasanya dimulai dengan IDD_ . Contoh identifier kota dialog ini IDD_SCHOOL_SURVEY. Oleh karena itu, bagian dari kotak dialog di file bisa mulai dengan:
IDD_SCHOOL_SURVEY
Library Win32 menyediakan serangkaian nama siap pakai kelas untuk menciptakan kontrol. Dengan cara yang sama, sebuah kotak dialog memiliki dua jenis kelas yang digunakan untuk membuat kotak dialog. Statemen DIALOG pada dasarnya/umunya yang biasa digunakan untuk membuat ID kotak dialog. Ini telah diperbarui dan diganti dengan nama DIALOGEX. Oleh karena itu, untuk menunjukkan dalam file yang bagian Anda membuat adalah untuk kotak dialog, ketik DIALOGEX. Berikut adalah contohnya:
IDD_SCHOOL_SURVEY DIALOGEX
Membuat Klass untuk Dialog Box
Setelah membuat resource untuk kotak dialog, Anda harus membuat sebuah class yang akan digunakan untuk menangani tugas-tugasnya. Untuk melakukan ini, maka harus menurunkan kelas dari CDialog. Anda dapat membuat sebuah file header dan file sumber untuk kotak dialog.
Dalam file header kelas dialog itu, menetapkan penghitungan yang disebut sebagai SLI dan menginisialisasi dengan identifier dari kotak dialog. Karena identifier yang terdaftar dalam file header , maka harus menyertakan file header diresource di mana Anda menggunakan dialog identifier.
Metod Dialog Box
Sebuah kotak dialog yang dibuat berdasarkan pada kelas CDialog. Seperti yang terlihat di atas, ketika membuat kotak dialog, Anda dapat memperoleh kelas dari CDialog. Kelas CDialog itu sendiri menyediakan tiga konstruktor default sebagai berikut:
CDialog ();
CDialog (uint nIDTemplate, cwnd * pParentWnd = NULL);
CDialog (LPCTSTR lpszTemplateName, cwnd * pParentWnd = NULL);
Constructor default, CDialog ();, dapat digunakan untuk mendeklarasikan variabel yang perilakunya belum diketahui atau, untuk satu alasan lainnya tergantung kebutuhan dalam pembuatan program, yang belum dapat didefinisikan. Ketika membuat kelas , Anda juga harus mendeklarasikan setidaknya constructor default.
Pengenal dari kotak dialog, seperti IDD_DIALOG1, dapat digunakan sebagai argumen pertama, nIDTemplate, dari konstruktor CDialog () untuk membuat kotak dialog dari resource yang ada.
Jika Anda menggunakan template Win32 untuk membuat kotak dialog Anda, kirimkan nama template ini sebagai nilai string ke konstruktor CDialog () , lpszTemplateName.
Ketika menerapkan konstruktor default, dalam menginisialisasi CDialog konstruktor induk dengan enumerator IDD maka dideklarasikan kedalam kelas Anda. Jika kotak dialog Anda memiliki pemilik dari dialog induk,mak tentukan sebagai argumen pParentWnd. Jika Anda menetapkan ke NULL, aplikasi akan digunakan sebagai induk dialog itu.
Jika Anda membuat objek secara dinamis untuk aplikasi maka menggunakan kelas dialog Anda, itu adalah ide yang baik untuk mendeklarasikan dan mendefinisikan sebuah destructor. Ini akan digunakan untuk menghancurkan objek dinamis tersebut.
Mendeklarasikan constructor
========
Mendeklarasikan constructor default dan destructor untuk kelas sebuah dialog dan mengimplementasikan mereka sebagai berikut (dalam file yang sama):
class CPreparationDlg : public CDialog
{
public:
enum { IDD = IDD_PREPARATION_DLG };
CPreparationDlg();
~CPreparationDlg();
};
CPreparationDlg::CPreparationDlg()
: CDialog(CPreparationDlg::IDD)
{
}
CPreparationDlg::~CPreparationDlg()
{
}
# sebelum menggunakan class baru, maka deklarasikan variable berlebih dahulu seperti berikut
BOOL CPreparationApp::InitInstance()
{
CPreparationDlg Dlg;
m_pMainWnd = &Dlg;
return TRUE;
}
Modal dalam Dialog Box
Ada dua jenis kotak dialog:
modal dan modeless. Sebuah modal dari kotak dialog yang merupakan salah satu yang pengguna harus terlebih dahulu menutup agar mengakses ke jendela atau kotak dialog dari aplikasi yang sama.
Salah satu skenario di mana dalam menggunakan kotak dialog yaitu untuk menciptakan sebuah aplikasi yang berpusat di sekitar kotak dialog. Dalam hal ini, jika salah satu tidak ada jendela lain dari sebuah aplikasi atau jika semua jendela lain itu tergantung pada kotak dialog pusat/induk,maka harus diciptakan sebagai modal. Permohonan semacam ini disebut sebagai dialog _base
Ada dua teknik utama yang dapat Anda gunakan untuk membuat aplikasi berbasis dialog: dari awal atau menggunakan salah satu Visual C + + Wizards. Setelah membuat dialog dan resource yang berasal dari kelas CDialog, anda dapat mendeklarasikan variabel kelas dialog Anda. Untuk menampilkan kotak dialog sebagai moda, Anda dapat memanggil CDialog ini:: DoModal () metode dalam Anda CWinApp:: InitInstance () method. Sintaks-nya adalah:
virtual int DoModal ();
Metode ini dengan sendirinya akan menampilkan kotak dialog ada lagi sebagai modal. Kita akan mempelajari dalam menggunakan metod ini, untuk mengetahui bagaimana pengguna telah menutup kotak dialog tersebut.
Untuk menampilkan kotak dialog sebagai modal, maka dalam InitInstance (); event dari kelas turunan CWinApp ,dengan memanggil method DoModal () menggunakan variabel dialog Anda:
#include <afxwin.h>
#include <afxdlgs.h>
#include "resource.h"
class CPreparationApp : public CWinApp
{
public:
BOOL InitInstance();
};
class CPreparationDlg : public CDialog
{
public:
enum { IDD = IDD_PREPARATION_DLG };
CPreparationDlg();
~CPreparationDlg();
};
CPreparationDlg::CPreparationDlg()
: CDialog(CPreparationDlg::IDD)
{
}
CPreparationDlg::~CPreparationDlg()
{
}
BOOL CPreparationApp::InitInstance()
{
CPreparationDlg Dlg;
m_pMainWnd = &Dlg;
Dlg.DoModal();
return TRUE;
}
CPreparationApp theApp;
Ok untuk materi menenai MFC dapat dilihat halaman lain...
EmoticonEmoticon