C
C
Guest
Aku sedang mencoba mempelajari mfc pada saya sendiri melalui trial and error...Sejauh ini aku tahu banyak barang-barang, tapi masih ada 1 hal yang saya tidak mengerti...
Saya menggunakan MFC Application Wizard (VC . NET) untuk memulai sebuah dialog berbasis proyek, itu menghasilkan kode untuk OK, dan tombol Cancel yang kedua keluar program ...
Program ini juga keluar ketika tombol Esc ditekan, aku tahu bagaimana ia ada dengan menekan dua tombol, tapi aku tidak bisa menemukan kode untuk tempat keluar bila ditekan tombol Esc
Kode:
/ / Stdafx.h: include file untuk sistem standar termasuk file,
/ / Atau proyek meliputi spesifik file yang sering digunakan,
/ / Tapi jarang berubah# Pragma sekali# ifndef VC_EXTRALEAN
# define VC_EXTRALEAN / / Pengecualian jarang-digunakan barang dari Windows header
# endif/ / Ubah mendefinisikan berikut jika Anda harus menargetkan sebuah platform sebelum yang ditentukan di bawah ini.
/ / Lihat MSDN untuk info terbaru pada nilai-nilai untuk berbagai platform.
# ifndef WINVER / / Allow penggunaan fitur khusus untuk Windows 95 dan Windows NT 4 atau nanti.
# define WINVER 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows 98 dan Windows 2000 atau nanti.
# endif# ifndef _WIN32_WINNT / / Allow penggunaan fitur khusus untuk Windows NT 4 atau nanti.
# define _WIN32_WINNT 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows 98 dan Windows 2000 atau nanti.
# endif# ifndef _WIN32_WINDOWS / / Allow penggunaan fitur khusus untuk Windows 98 atau kemudian.
# define _WIN32_WINDOWS 0x0410 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows Me atau lambat.
# endif# ifndef _WIN32_IE / / Allow penggunaan fitur spesifik ke IE 4.0 atau nanti.
# define _WIN32_IE 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan IE 5.0 atau nanti.
# endif# define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS / / beberapa konstruktor akan CString eksplisit/ / Akan menonaktifkan MFC bersembunyi dari beberapa umum dan seringkali diabaikan dengan aman pesan peringatan
# define _AFX_ALL_WARNINGS# include <afxwin.h> / / MFC inti dan komponen standar
# include <afxext.h> / / MFC extensions# include <afxdtctl.h> / / MFC dukungan untuk Internet Explorer 4 Common Controls
# ifndef _AFX_NO_AFXCMN_SUPPORT
# include <afxcmn.h> / / MFC dukungan untuk Windows Common Controls
# endif / / _AFX_NO_AFXCMN_SUPPORT/ / Win32TestAppDlg.h: header file
/# Pragma sekali/ / CWin32TestAppDlg dialog
kelas CWin32TestAppDlg: CDialog publik
(
/ / Konstruksi
publik:
CWin32TestAppDlg (cwnd * pParent = NULL); / / standard constructor/ / Dialog Data
enum (IDD = IDD_WIN32TESTAPP_DIALOG);dilindungi:
virtual void DoDataExchange (CDataExchange * PDX); / / DDX / DDV dukungan/ / Pelaksanaan
dilindungi:
HICON m_hIcon;/ / Generated message fungsi peta
virtual bool OnInitDialog ();
afx_msg void OnPaint ();
afx_msg HCURSOR OnQueryDragIcon ();
DECLARE_MESSAGE_MAP ()
);/ / Win32TestApp.h: file header utama untuk aplikasi PROJECT_NAME
/# Pragma sekali# ifndef __AFXWIN_H__
# kesalahan termasuk 'stdafx.h' sebelum termasuk file ini untuk PCH
# endif# include "resource.h" / / main simbol-simbol/ / CWin32TestApp:
/ / Lihat Win32TestApp.cpp untuk pelaksanaan kelas ini
/kelas CWin32TestApp: CWinApp publik
(
publik:
CWin32TestApp ();/ / Menggantikan
publik:
virtual bool InitInstance ();/ / PelaksanaanDECLARE_MESSAGE_MAP ()
);extern CWin32TestApp theApp;/ / Stdafx.cpp: berkas sumber yang mencakup standar hanya mencakup
/ / Win32TestApp.pch akan menjadi pre-compiled header
/ / Stdafx.obj akan berisi pre-compiled informasi jenis# include "stdafx.h"
/ / Win32TestAppDlg.cpp: implementasi file
/# include "stdafx.h"
# include "Win32TestApp.h"
# include "Win32TestAppDlg.h"# ifdef _DEBUG
# define baru DEBUG_NEW
# endif/ / CWin32TestAppDlg dialog
CWin32TestAppDlg:: CWin32TestAppDlg (cwnd * pParent / *= NULL * /)
: CDialog (CWin32TestAppDlg:: IDD, pParent)
(
m_hIcon = AfxGetApp () -> LoadIcon (IDR_MAINFRAME);
)void CWin32TestAppDlg:: DoDataExchange (CDataExchange * PDX)
(
CDialog:: DoDataExchange (PDX);
)BEGIN_MESSAGE_MAP (CWin32TestAppDlg, CDialog)
ON_WM_PAINT ()
ON_WM_QUERYDRAGICON ()
/ /)) AFX_MSG_MAP
END_MESSAGE_MAP ()/ / Pesan CWin32TestAppDlg penanganBOOL CWin32TestAppDlg:: OnInitDialog ()
(
CDialog:: OnInitDialog ();/ / Set ikon untuk dialog ini. Kerangka melakukan hal ini secara otomatis
/ / Saat aplikasi jendela utama bukanlah dialog
SetIcon (m_hIcon, TRUE); / / Set ikon besar
SetIcon (m_hIcon, FALSE); / / Set ikon kecil/ / TODO: Tambahkan extra initialization di sinireturn TRUE; / / return TRUE kecuali jika Anda mengatur fokus ke kontrol
)/ / Jika anda menambahkan sebuah tombol untuk meminimalkan dialog Anda, Anda akan memerlukan kode di bawah ini
/ / Untuk menggambar ikon. Untuk aplikasi MFC menggunakan dokumen / view model,
/ / Ini dilakukan secara otomatis untuk Anda oleh kerangka.void CWin32TestAppDlg:: OnPaint ()
(
if (IsIconic ())
(
Dc CPaintDC (ini); / / perangkat konteks untuk lukisanSendMessage (WM_ICONERASEBKGND, reinterpret_cast <WPARAM> (dc.GetSafeHdc ()), 0);/ / Center ikon di klien persegi panjang
int cxIcon = GetSystemMetrics (SM_CXICON);
int cyIcon = GetSystemMetrics (SM_CYICON);
CRect rect;
GetClientRect (& rect);
int x = (rect.Width () - cxIcon 1) / 2;
int y = (rect.Height () - cyIcon 1) / 2;/ / Menggambar ikon
dc.DrawIcon (x, y, m_hIcon);
)
lain
(
CDialog:: OnPaint ();
)
)/ / Sistem panggilan fungsi ini untuk mendapatkan kursor untuk menampilkan sementara pengguna menyeret
/ / Jendela yang diminimalkan.
HCURSOR CWin32TestAppDlg:: OnQueryDragIcon ()
(
kembali static_cast <HCURSOR> (m_hIcon);
)/ / Win32TestApp.cpp: Tetapkan perilaku kelas untuk aplikasi.
/# include "stdafx.h"
# include "Win32TestApp.h"
# include "Win32TestAppDlg.h"# ifdef _DEBUG
# define baru DEBUG_NEW
# endif/ / CWin32TestAppBEGIN_MESSAGE_MAP (CWin32TestApp, CWinApp)
ON_COMMAND (ID_HELP, CWinApp:: OnHelp)
END_MESSAGE_MAP ()/ / CWin32TestApp konstruksiCWin32TestApp:: CWin32TestApp ()
(
/ / TODO: tambahkan kode konstruksi di sini,
/ / Masukkan semua inisialisasi signifikan dalam InitInstance
)/ / Satu-satunya objek CWin32TestAppCWin32TestApp theApp;/ / CWin32TestApp initializationBOOL CWin32TestApp:: InitInstance ()
(
CWinApp:: InitInstance ();/ / Standard initialization
/ / Jika Anda tidak menggunakan fitur ini dan ingin mengurangi ukuran
/ / Dari eksekusi akhir Anda, Anda harus menghapus dari berikut
/ / Inisialisasi spesifik rutinitas Anda tidak perlu
/ / Mengubah kunci registri di mana pengaturan kami disimpan
/ / TODO: Anda harus memodifikasi string ini menjadi sesuatu yang sesuai
/ / Seperti nama perusahaan atau organisasi Anda
SetRegistryKey (_t ( "Lokal AppWizard-Generated Aplikasi"));CWin32TestAppDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal ();
if (nResponse == IDOK)
(
/ / TODO: Place code di sini untuk menangani saat dialog
/ / Diberhentikan dengan OK
)
else if (nResponse == IDCANCEL)
(
/ / TODO: Place code di sini untuk menangani saat dialog
/ / Diberhentikan dengan Batal
)/ / Karena dialog telah ditutup, return sehingga kita keluar dari
/ / Aplikasi, bukan memulai pesan aplikasi pompa.
return FALSE;
)
Saya menggunakan MFC Application Wizard (VC . NET) untuk memulai sebuah dialog berbasis proyek, itu menghasilkan kode untuk OK, dan tombol Cancel yang kedua keluar program ...
Program ini juga keluar ketika tombol Esc ditekan, aku tahu bagaimana ia ada dengan menekan dua tombol, tapi aku tidak bisa menemukan kode untuk tempat keluar bila ditekan tombol Esc
Kode:
/ / Stdafx.h: include file untuk sistem standar termasuk file,
/ / Atau proyek meliputi spesifik file yang sering digunakan,
/ / Tapi jarang berubah# Pragma sekali# ifndef VC_EXTRALEAN
# define VC_EXTRALEAN / / Pengecualian jarang-digunakan barang dari Windows header
# endif/ / Ubah mendefinisikan berikut jika Anda harus menargetkan sebuah platform sebelum yang ditentukan di bawah ini.
/ / Lihat MSDN untuk info terbaru pada nilai-nilai untuk berbagai platform.
# ifndef WINVER / / Allow penggunaan fitur khusus untuk Windows 95 dan Windows NT 4 atau nanti.
# define WINVER 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows 98 dan Windows 2000 atau nanti.
# endif# ifndef _WIN32_WINNT / / Allow penggunaan fitur khusus untuk Windows NT 4 atau nanti.
# define _WIN32_WINNT 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows 98 dan Windows 2000 atau nanti.
# endif# ifndef _WIN32_WINDOWS / / Allow penggunaan fitur khusus untuk Windows 98 atau kemudian.
# define _WIN32_WINDOWS 0x0410 / / Ubah ini untuk nilai yang sesuai untuk menargetkan Windows Me atau lambat.
# endif# ifndef _WIN32_IE / / Allow penggunaan fitur spesifik ke IE 4.0 atau nanti.
# define _WIN32_IE 0x0400 / / Ubah ini untuk nilai yang sesuai untuk menargetkan IE 5.0 atau nanti.
# endif# define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS / / beberapa konstruktor akan CString eksplisit/ / Akan menonaktifkan MFC bersembunyi dari beberapa umum dan seringkali diabaikan dengan aman pesan peringatan
# define _AFX_ALL_WARNINGS# include <afxwin.h> / / MFC inti dan komponen standar
# include <afxext.h> / / MFC extensions# include <afxdtctl.h> / / MFC dukungan untuk Internet Explorer 4 Common Controls
# ifndef _AFX_NO_AFXCMN_SUPPORT
# include <afxcmn.h> / / MFC dukungan untuk Windows Common Controls
# endif / / _AFX_NO_AFXCMN_SUPPORT/ / Win32TestAppDlg.h: header file
/# Pragma sekali/ / CWin32TestAppDlg dialog
kelas CWin32TestAppDlg: CDialog publik
(
/ / Konstruksi
publik:
CWin32TestAppDlg (cwnd * pParent = NULL); / / standard constructor/ / Dialog Data
enum (IDD = IDD_WIN32TESTAPP_DIALOG);dilindungi:
virtual void DoDataExchange (CDataExchange * PDX); / / DDX / DDV dukungan/ / Pelaksanaan
dilindungi:
HICON m_hIcon;/ / Generated message fungsi peta
virtual bool OnInitDialog ();
afx_msg void OnPaint ();
afx_msg HCURSOR OnQueryDragIcon ();
DECLARE_MESSAGE_MAP ()
);/ / Win32TestApp.h: file header utama untuk aplikasi PROJECT_NAME
/# Pragma sekali# ifndef __AFXWIN_H__
# kesalahan termasuk 'stdafx.h' sebelum termasuk file ini untuk PCH
# endif# include "resource.h" / / main simbol-simbol/ / CWin32TestApp:
/ / Lihat Win32TestApp.cpp untuk pelaksanaan kelas ini
/kelas CWin32TestApp: CWinApp publik
(
publik:
CWin32TestApp ();/ / Menggantikan
publik:
virtual bool InitInstance ();/ / PelaksanaanDECLARE_MESSAGE_MAP ()
);extern CWin32TestApp theApp;/ / Stdafx.cpp: berkas sumber yang mencakup standar hanya mencakup
/ / Win32TestApp.pch akan menjadi pre-compiled header
/ / Stdafx.obj akan berisi pre-compiled informasi jenis# include "stdafx.h"
/ / Win32TestAppDlg.cpp: implementasi file
/# include "stdafx.h"
# include "Win32TestApp.h"
# include "Win32TestAppDlg.h"# ifdef _DEBUG
# define baru DEBUG_NEW
# endif/ / CWin32TestAppDlg dialog
CWin32TestAppDlg:: CWin32TestAppDlg (cwnd * pParent / *= NULL * /)
: CDialog (CWin32TestAppDlg:: IDD, pParent)
(
m_hIcon = AfxGetApp () -> LoadIcon (IDR_MAINFRAME);
)void CWin32TestAppDlg:: DoDataExchange (CDataExchange * PDX)
(
CDialog:: DoDataExchange (PDX);
)BEGIN_MESSAGE_MAP (CWin32TestAppDlg, CDialog)
ON_WM_PAINT ()
ON_WM_QUERYDRAGICON ()
/ /)) AFX_MSG_MAP
END_MESSAGE_MAP ()/ / Pesan CWin32TestAppDlg penanganBOOL CWin32TestAppDlg:: OnInitDialog ()
(
CDialog:: OnInitDialog ();/ / Set ikon untuk dialog ini. Kerangka melakukan hal ini secara otomatis
/ / Saat aplikasi jendela utama bukanlah dialog
SetIcon (m_hIcon, TRUE); / / Set ikon besar
SetIcon (m_hIcon, FALSE); / / Set ikon kecil/ / TODO: Tambahkan extra initialization di sinireturn TRUE; / / return TRUE kecuali jika Anda mengatur fokus ke kontrol
)/ / Jika anda menambahkan sebuah tombol untuk meminimalkan dialog Anda, Anda akan memerlukan kode di bawah ini
/ / Untuk menggambar ikon. Untuk aplikasi MFC menggunakan dokumen / view model,
/ / Ini dilakukan secara otomatis untuk Anda oleh kerangka.void CWin32TestAppDlg:: OnPaint ()
(
if (IsIconic ())
(
Dc CPaintDC (ini); / / perangkat konteks untuk lukisanSendMessage (WM_ICONERASEBKGND, reinterpret_cast <WPARAM> (dc.GetSafeHdc ()), 0);/ / Center ikon di klien persegi panjang
int cxIcon = GetSystemMetrics (SM_CXICON);
int cyIcon = GetSystemMetrics (SM_CYICON);
CRect rect;
GetClientRect (& rect);
int x = (rect.Width () - cxIcon 1) / 2;
int y = (rect.Height () - cyIcon 1) / 2;/ / Menggambar ikon
dc.DrawIcon (x, y, m_hIcon);
)
lain
(
CDialog:: OnPaint ();
)
)/ / Sistem panggilan fungsi ini untuk mendapatkan kursor untuk menampilkan sementara pengguna menyeret
/ / Jendela yang diminimalkan.
HCURSOR CWin32TestAppDlg:: OnQueryDragIcon ()
(
kembali static_cast <HCURSOR> (m_hIcon);
)/ / Win32TestApp.cpp: Tetapkan perilaku kelas untuk aplikasi.
/# include "stdafx.h"
# include "Win32TestApp.h"
# include "Win32TestAppDlg.h"# ifdef _DEBUG
# define baru DEBUG_NEW
# endif/ / CWin32TestAppBEGIN_MESSAGE_MAP (CWin32TestApp, CWinApp)
ON_COMMAND (ID_HELP, CWinApp:: OnHelp)
END_MESSAGE_MAP ()/ / CWin32TestApp konstruksiCWin32TestApp:: CWin32TestApp ()
(
/ / TODO: tambahkan kode konstruksi di sini,
/ / Masukkan semua inisialisasi signifikan dalam InitInstance
)/ / Satu-satunya objek CWin32TestAppCWin32TestApp theApp;/ / CWin32TestApp initializationBOOL CWin32TestApp:: InitInstance ()
(
CWinApp:: InitInstance ();/ / Standard initialization
/ / Jika Anda tidak menggunakan fitur ini dan ingin mengurangi ukuran
/ / Dari eksekusi akhir Anda, Anda harus menghapus dari berikut
/ / Inisialisasi spesifik rutinitas Anda tidak perlu
/ / Mengubah kunci registri di mana pengaturan kami disimpan
/ / TODO: Anda harus memodifikasi string ini menjadi sesuatu yang sesuai
/ / Seperti nama perusahaan atau organisasi Anda
SetRegistryKey (_t ( "Lokal AppWizard-Generated Aplikasi"));CWin32TestAppDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal ();
if (nResponse == IDOK)
(
/ / TODO: Place code di sini untuk menangani saat dialog
/ / Diberhentikan dengan OK
)
else if (nResponse == IDCANCEL)
(
/ / TODO: Place code di sini untuk menangani saat dialog
/ / Diberhentikan dengan Batal
)/ / Karena dialog telah ditutup, return sehingga kita keluar dari
/ / Aplikasi, bukan memulai pesan aplikasi pompa.
return FALSE;
)