Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini menjelaskan cara membuat aplikasi desktop Windows tradisional di Visual Studio. Aplikasi yang Anda buat menggunakan WINDOWS API untuk menampilkan Halo, desktop Windows! di jendela. Anda dapat menggunakan kode yang Anda kembangkan dalam panduan ini sebagai pola untuk membuat aplikasi desktop Windows.
WINDOWS API (juga dikenal sebagai WIN32 API, Windows Desktop API, dan Windows Classic API) adalah kerangka kerja berbasis bahasa C untuk membuat aplikasi Windows. Ini telah digunakan untuk membuat aplikasi Windows selama beberapa dekade. Kerangka kerja yang lebih canggih dan lebih mudah diprogram telah dibangun di atas Windows API, misalnya, kerangka kerja MFC, ATL, dan .NET. Bahkan kode Windows Runtime paling modern untuk aplikasi UWP dan Store yang ditulis dalam C++/WinRT menggunakan WINDOWS API di bawahnya. Untuk informasi selengkapnya tentang Windows API, lihat Indeks WINDOWS API.
Penting
Bagian Bangun kode di akhir artikel ini memperlihatkan kode lengkap. Panduan ini mencakup berbagai bagian kode yang masuk ke aplikasi Windows, tetapi beberapa detail dihilangkan dalam cuplikan kode untuk berfokus pada bagian yang paling penting. Anda dapat menyalin kode lengkap dan menempelkannya ke proyek Anda di akhir.
Prasyarat
Microsoft Windows 7 atau versi yang lebih baru. Kami merekomendasikan Windows 11 atau yang lebih baru untuk pengalaman pengembangan terbaik.
Visual Studio. Untuk informasi tentang cara mengunduh dan menginstal Visual Studio, lihat Menginstal Visual Studio. Saat Anda menjalankan alat penginstal, pastikan bahwa pengembangan Desktop dengan beban kerja C++ dicentang. Jangan khawatir jika Anda tidak menginstal beban kerja ini saat menginstal Visual Studio. Anda dapat menjalankan alat penginstal lagi dan menginstalnya sekarang.
Pemahaman dasar tentang penggunaan Visual Studio IDE. Jika Anda telah menggunakan aplikasi desktop Windows sebelumnya, Anda mungkin dapat mengikutinya. Untuk pengenalan, lihat tur fitur Visual Studio IDE.
Beberapa keakraban dengan bahasa C++. Jangan khawatir, kami tidak melakukan sesuatu yang terlalu rumit.
Membuat proyek desktop Windows
Ikuti langkah-langkah ini untuk membuat proyek desktop Windows pertama Anda. Seperti yang disebutkan di awal artikel ini, kode yang diselesaikan tersedia di bagian Bangun kode di akhir panduan. Lanjutkan dan ikuti langkah-langkah untuk membuat proyek, tetapi tahan menempelkan bagian kode berikut hingga akhir, saat kode aplikasi lengkap disajikan. Beberapa detail dihilangkan dalam cuplikan kode untuk berfokus pada bagian yang paling penting. Anda dapat menyalin kode lengkap dan menempelkannya ke proyek Anda di akhir.
Untuk melihat langkah-langkah untuk versi Visual Studio pilihan Anda, gunakan pemilih Versi yang terletak di bagian atas daftar isi di halaman ini.
Untuk membuat proyek desktop Windows di Visual Studio
Dari menu utama, pilih File>Baru>Proyek untuk membuka kotak dialog Buat Proyek Baru.
Di bagian atas dialog, atur Bahasa ke C++, atur Platform ke Windows, dan atur Jenis proyek ke Desktop.
Dari daftar tipe proyek yang difilter, pilih Windows Desktop Wizard lalu pilih Berikutnya. Di halaman berikutnya, masukkan nama untuk proyek, misalnya, DesktopApp.
Pilih tombol Buat untuk membuat proyek.
Dialog Proyek Desktop Windows sekarang muncul. Di menu dropdown Jenis aplikasi, pastikan Anda memilih Aplikasi desktop (.exe). Karena kami membuat aplikasi Windows, memilih Aplikasi Konsol menghasilkan proyek yang tidak akan dibuat mengingat kode yang akan kami gunakan. Lalu, di bawah Opsi tambahan, pilih Kosongkan proyek. Pilih OK untuk membuat proyek.
Di Penjelajah Solusi, klik kanan proyek DesktopApp, pilih Tambahkan, lalu pilih Item Baru.
Animasi memperlihatkan mengklik kanan pada nama proyek di Penjelajah Solusi, memilih Tambahkan di menu yang muncul, lalu memilih Item Baru.
Dalam kotak dialog Tambahkan Item Baru, pilih File C++ (.cpp). Dalam kotak Nama , ketik nama untuk file, misalnya,
HelloWindowsDesktop.cpp. Pilih Tambahkan.
Proyek Anda sekarang dibuat dan file sumber Anda dibuka di editor.
Untuk membuat proyek desktop Windows di Visual Studio 2017
Pada menu File , pilih Baru lalu pilih Proyek.
Dalam kotak dialog Proyek Baru, di panel kiri, perluas> Visual C++, lalu pilih Windows Desktop. Di panel tengah, pilih Windows Desktop Wizard.
Dalam kotak Nama , ketik nama untuk proyek, misalnya, DesktopApp. Pilih OK.
Dalam dialog Proyek Desktop Windows, di bawah Jenis aplikasi, pilih Aplikasi Windows (.exe). Di bawah Opsi tambahan, pilih Kosongkan proyek. Pastikan Header Yang Telah Dikompresi tidak dipilih. Pilih OK untuk membuat proyek.
Di Penjelajah Solusi, klik kanan proyek DesktopApp, pilih Tambahkan, lalu pilih Item Baru.
Animasi memperlihatkan klik kanan pada nama proyek di Penjelajah Solusi, memilih Tambahkan di menu yang muncul, lalu memilih Item Baru.
Dalam kotak dialog Tambahkan Item Baru, pilih File C++ (.cpp). Dalam kotak Nama , ketik nama untuk file, misalnya,
HelloWindowsDesktop.cpp. Pilih Tambahkan.
Proyek Anda sekarang dibuat dan file sumber Anda dibuka di editor.
Untuk membuat proyek desktop Windows di Visual Studio 2015
Pada menu File , pilih Baru lalu pilih Proyek.
Dalam kotak dialog Proyek Baru, di panel kiri, perluas , lalu pilih > Di panel tengah, pilih Proyek Win32.
Dalam kotak Nama , ketik nama untuk proyek, misalnya, DesktopApp. Pilih OK.
Pada halaman Gambaran Umum Wizard Aplikasi Win32, pilih Berikutnya.
Pada halaman Pengaturan Aplikasi, di bawah Jenis aplikasi, pilih Aplikasi Windows. Di bawah Opsi tambahan, hapus centang Header yang telah dikompilasi sebelumnya, lalu pilih Kosongkan proyek. Pilih Selesai untuk membuat proyek.
Di Penjelajah Solusi, klik kanan proyek DesktopApp, pilih Tambahkan, lalu pilih Item Baru.
Animasi memperlihatkan mengklik kanan pada nama proyek di Penjelajah Solusi, memilih Tambahkan di menu yang muncul, lalu memilih Item Baru.
Dalam kotak dialog Tambahkan Item Baru, pilih File C++ (.cpp). Dalam kotak Nama , ketik nama untuk file, misalnya,
HelloWindowsDesktop.cpp. Pilih Tambahkan.
Proyek Anda sekarang dibuat dan file sumber Anda dibuka di editor.
Kode
Selanjutnya, pelajari cara membuat kode untuk aplikasi desktop Windows di Visual Studio.
Di mana kode mulai berjalan di aplikasi desktop Windows
Sama seperti setiap aplikasi C dan aplikasi C++ harus memiliki
mainfungsi sebagai titik awalnya, setiap aplikasi desktop Windows harus memilikiWinMainfungsi.WinMainmemiliki sintaks berikut.int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );Untuk informasi tentang parameter dan nilai pengembalian fungsi ini, lihat Titik masuk WinMain.
Catatan
Apa saja kata tambahan tersebut, seperti
WINAPI, atauCALLBACK, atauHINSTANCE, atau_In_? WINDOWS API tradisional menggunakan typedefs dan makro praprosesor secara luas untuk mengabstraksi beberapa detail jenis dan kode khusus platform, seperti konvensi panggilan,__declspecdeklarasi, dan pragma kompilator. Di Visual Studio, Anda dapat menggunakan fitur Info Cepat IntelliSense untuk melihat definisi typedefs dan makro ini. Arahkan mouse Anda ke kata yang menarik, atau pilih dan tekan Ctrl+K, + untuk jendela pop-up kecil yang berisi definisi. Untuk informasi selengkapnya, lihat Menggunakan IntelliSense. Parameter dan jenis pengembalian sering menggunakan Anotasi SAL untuk membantu Anda menangkap kesalahan pemrograman. Untuk informasi selengkapnya, lihat Menggunakan Anotasi SAL untuk Mengurangi Cacat Kode C/C++.Program desktop Windows memerlukan
<windows.h>. Anda juga sering melihat#include <tchar.h>. Itu untuk mempermudah penulisan aplikasi yang dapat bekerja dengancharatauwchar_t. Cara kerjanya adalah Anda menggunakanTCHARmakro dalam kode Anda, yang pada akhirnyawchar_tmenyelesaikan jikaUNICODEsimbol ditentukan dalam proyek Anda, jika tidak, itu diselesaikan kechar. Jika Anda selalu membangun dengan UNICODE diaktifkan, Anda tidak perluTCHARdan hanya dapat menggunakannyawchar_tsecara langsung. Untuk informasi selengkapnya, lihat Menggunakan pemetaan teks generik. Kode berikut menunjukkan kedua#includepernyataan ini di bagian atas file.#include <windows.h> #include <tchar.h>Seiring dengan
WinMainfungsi, setiap aplikasi desktop Windows juga harus memiliki fungsi prosedur jendela. Fungsi ini disebutWndProc, tetapi Anda dapat memberikan nama apa pun yang Anda suka dalam kode Anda.WndProcmemiliki sintaks berikut.LRESULT CALLBACK WndProc( _In_ HWND hWnd, _In_ UINT message, _In_ WPARAM wParam, _In_ LPARAM lParam );Dalam fungsi ini, Anda menulis kode untuk menangani pesan yang diterima aplikasi dari Windows ketika peristiwa terjadi. Misalnya, jika pengguna memilih tombol OK di aplikasi Anda, Windows mengirimkan pesan kepada Anda. Anda menulis kode di dalam
WndProcfungsi yang melakukan pekerjaan apa pun yang sesuai. Ini disebut menangani peristiwa. Anda hanya menangani peristiwa yang relevan untuk aplikasi Anda.Untuk informasi selengkapnya, lihat Prosedur Jendela.
Menambahkan fungsionalitas ke WinMain fungsi
Dalam fungsi ini
WinMain, Anda perlu mengambil beberapa informasi dasar tentang jendela utama Anda. Anda melakukannya dengan mengisi struktur jenisWNDCLASSEX. Struktur berisi informasi tentang jendela, seperti ikon aplikasi, warna latar belakang jendela, nama yang ditampilkan di bilah judul, antara lain. Yang penting, ini berisi penunjuk fungsi ke prosedur jendela Anda yang menangani pesan yang dikirim Windows ke aplikasi Anda. Contoh berikut menunjukkan struktur umumWNDCLASSEX: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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);Untuk informasi tentang bidang struktur ini, lihat
WNDCLASSEX.Setelah struktur
WNDCLASSEXterisi, Anda mendaftarkannya dengan Windows sehingga tahu tentang jendela Anda dan cara mengirim pesan ke dalamnya.RegisterClassExGunakan fungsi dan teruskan struktur kelas jendela sebagai argumen. Makro_Tdigunakan karena, seperti yang dijelaskan sebelumnya tentang Unicode, kami menggunakan jenisTCHAR. Kode berikut menunjukkan cara mendaftarkan kelas jendela.if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }Buat jendela menggunakan
CreateWindowExfungsi .static TCHAR szWindowClass[] = _T("DesktopApp"); static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }Fungsi ini mengembalikan
HWND, yang merupakan handel ke jendela. Handel agak seperti penunjuk. Windows menggunakannya untuk melacak jendela yang Anda buat. Untuk informasi selengkapnya, lihat Jenis Data Windows.Pada titik ini, jendela telah dibuat, tetapi kita masih perlu memberi tahu Windows untuk membuatnya terlihat. Itulah yang dilakukan kode ini:
// The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);Jendela yang ditampilkan hanya persegi panjang kosong karena Anda belum menerapkan
WndProcfungsi. Aplikasi belum menangani pesan yang sekarang dikirim Windows ke dalamnya.Untuk menangani pesan, kami terlebih dahulu menambahkan apa yang disebut perulangan pesan untuk mendengarkan pesan yang dikirim Windows. Ketika aplikasi menerima pesan, perulangan ini mengirimkannya ke fungsi Anda
WndProcuntuk ditangani. Perulangan pesan menyerupan kode berikut:MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam;Untuk informasi selengkapnya tentang struktur dan fungsi dalam perulangan pesan, lihat
MSG, ,GetMessageTranslateMessage, danDispatchMessage.Fungsi dasar
WinMainyang membuat jendela utama aplikasi, dan mendengarkan pesan yang dikirim Windows aplikasi Anda, akan menyerupai kode berikut:int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; }
Menangani pesan dalam WndProc fungsi
Untuk menangani pesan yang diterima aplikasi, Anda menerapkan
switchpernyataan dalam fungsi AndaWndProc.Pesan penting untuk ditangani adalah
WM_PAINT. Aplikasi menerimaWM_PAINTpesan ketika bagian dari jendela yang ditampilkan harus diperbarui. Peristiwa dapat terjadi ketika pengguna memindahkan jendela di depan jendela Anda dan memindahkannya lagi. Ini menerima pesan ini saat pertama kali jendela Anda ditampilkan, memberi Anda kesempatan untuk menampilkan antarmuka pengguna aplikasi Anda. Aplikasi Anda mencari tahu tentang peristiwa ini ketika Windows mengirimnya. Ketika jendela pertama kali ditampilkan, semua jendela harus diperbarui.Untuk menangani
WM_PAINTpesan, pertama-tama panggilBeginPaint, lalu tangani semua logika untuk meletakkan teks, tombol, dan kontrol lainnya di jendela. Kemudian hubungiEndPaint. Untuk aplikasi ini, kode antaraBeginPaint()danEndPaint()tampilanHello, Windows desktop!di jendela yang Anda buat diWinMain(). Dalam kode berikut,TextOutfungsi menampilkan teks di lokasi yang ditentukan di jendela.PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; }Dalam kode sebelumnya,
HDCadalah handel ke konteks perangkat yang terkait dengan area klien jendela. Anda menggunakannya saat menggambar di jendela untuk merujuk ke area kliennya.BeginPaintGunakan fungsi danEndPaintuntuk mempersiapkan dan menyelesaikan gambar di area klien.BeginPaintmengembalikan handel ke konteks perangkat tampilan yang digunakan untuk menggambar di area klien;EndPaintmengakhiri permintaan cat dan merilis konteks perangkat.Aplikasi biasanya menangani banyak pesan lain. Misalnya,
WM_CREATEdikirim saat jendela pertama kali dibuat, danWM_DESTROYsaat jendela ditutup. Kode berikut menunjukkan fungsi dasar tetapi lengkapWndProc:LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
Bangun kode
Seperti yang dijanjikan, kode lengkap untuk aplikasi kerja mengikuti.
Untuk membangun contoh ini
Hapus semua kode di
HelloWindowsDesktop.cppeditor. Salin contoh kode ini dan tempelkan ke dalamHelloWindowsDesktop.cpp:// HelloWindowsDesktop.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> // Global variables // The main window class name. static TCHAR szWindowClass[] = _T("DesktopApp"); // The string that appears in the application's title bar. static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // Stored instance handle for use in Win32 API calls such as FindResource HINSTANCE hInst; // Forward declarations of functions included in this code module: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ) { 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(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }Pada menu Build, pilih Buat Solusi. Hasil kompilasi muncul di jendela Output di Visual Studio.
Animasi menunjukkan mengklik tombol simpan semua, lalu memilih Build > Build Solution dari menu utama.
Untuk menjalankan aplikasi, tekan F5. Jendela dengan teks
Hello, Windows desktop!akan muncul.
Selamat! Anda telah membangun aplikasi desktop Windows tradisional.