Bagikan melalui


TN024: Pesan dan Sumber Daya yang Ditentukan MFC

Catatan

Catatan teknis berikut belum diperbarui sejak pertama kali disertakan dalam dokumentasi online. Akibatnya, beberapa prosedur dan topik mungkin kedaluarsa atau salah. Untuk informasi terbaru, disarankan agar Anda mencari topik yang menarik dalam indeks dokumentasi online.

Catatan ini menjelaskan pesan Windows internal dan format sumber daya yang digunakan oleh MFC. Informasi ini menjelaskan implementasi kerangka kerja, dan akan membantu Anda dalam men-debug aplikasi Anda. Untuk petualang, meskipun semua informasi ini secara resmi tidak didukung, Anda dapat menggunakan beberapa informasi ini untuk implementasi lanjutan.

Catatan ini berisi detail implementasi privat MFC; semua konten dapat berubah di masa mendatang. Pesan Windows privat MFC memiliki arti dalam cakupan satu aplikasi saja tetapi akan berubah di masa depan untuk berisi pesan di seluruh sistem.

Rentang pesan Windows privat MFC dan jenis sumber daya berada dalam rentang "sistem" khusus yang disisihkan oleh Microsoft Windows. Saat ini tidak semua angka dalam rentang digunakan dan, di masa mendatang, angka baru dalam rentang dapat digunakan. Angka yang saat ini digunakan dapat diubah.

Pesan Windows privat MFC berada dalam rentang 0x360-0x37F>.

Jenis sumber daya privat MFC berada dalam rentang 0xF0-0xFF>.

Pesan Windows Privat MFC

Pesan Windows ini digunakan sebagai pengganti fungsi virtual C++ di mana kopling yang relatif longgar diperlukan antara objek jendela dan di mana fungsi virtual C++ tidak akan sesuai.

Pesan Windows privat dan struktur parameter terkait ini dideklarasikan di header privat MFC 'AFXPRIV. H'. Diperingatkan bahwa salah satu kode Anda yang menyertakan header ini mungkin mengandalkan perilaku yang tidak terdokumentasi dan kemungkinan akan rusak dalam versi MFC di masa mendatang.

Dalam kasus yang jarang terjadi karena perlu menangani salah satu pesan ini, Anda harus menggunakan makro peta pesan ON_MESSAGE dan menangani pesan dalam format LRESULT/WPARAM/LPARAM generik.

WM_QUERYAFXWNDPROC

Pesan ini dikirim ke jendela yang sedang dibuat. Ini dikirim sangat awal dalam proses pembuatan sebagai metode penentuan apakah WndProc adalah AfxWndProc. AfxWndProc mengembalikan 1.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan
lParam Tidak digunakan
pengembalian 1 jika diproses oleh AfxWndProc

WM_SIZEPARENT

Pesan ini dikirim oleh jendela bingkai ke anak-anak langsungnya selama mengubah ukuran (CFrameWnd::OnSize panggilan CFrameWnd::RecalcLayout yang memanggil CWnd::RepositionBars) untuk memposisikan ulang bilah kontrol di sekitar sisi bingkai. Struktur AFX_SIZEPARENTPARAMS berisi persegi panjang klien yang tersedia saat ini dari induk dan HDWP (yang mungkin NULL) untuk memanggil DeferWindowPos untuk meminimalkan pengecatan ulang.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan
lParam Alamat struktur AFX_SIZEPARENTPARAMS
pengembalian Tidak digunakan (0)

Mengabaikan pesan menunjukkan bahwa jendela tidak mengambil bagian dalam tata letak.

WM_SETMESSAGESTRING

Pesan ini dikirim ke jendela bingkai untuk memintanya memperbarui baris pesan di bilah status. ID string atau LPCSTR dapat ditentukan (tetapi tidak keduanya).

Parameter dan nilai pengembalian Deskripsi
wParam ID String (atau nol)
lParam LPCSTR untuk string (atau NULL)
pengembalian Tidak digunakan (0)

WM_IDLEUPDATECMDUI

Pesan ini dikirim dalam waktu diam untuk mengimplementasikan pembaruan idle-time dari handler UI update-command. Jika jendela (biasanya bilah kontrol) menangani pesan, jendela akan membuat CCmdUI objek (atau objek kelas turunan) dan memanggil CCmdUI::DoUpdate setiap "item" di jendela. Ini pada gilirannya akan memeriksa handler ON_UPDATE_COMMAND_UI untuk objek dalam rantai penangan perintah.

Parameter dan nilai pengembalian Deskripsi
wParam BOOL bDisableIfNoHandler
lParam Tidak digunakan (0)
pengembalian Tidak digunakan (0)

bDisableIfNoHandler bukan nol untuk menonaktifkan objek UI jika tidak ada ON_UPDATE_COMMAND_UI atau handler ON_COMMAND.

WM_EXITHELPMODE

Pesan ini diposting ke CFrameWnd mode bantuan sensitif konteks untuk keluar. Tanda terima pesan ini mengakhiri perulangan modal yang dimulai oleh CFrameWnd::OnContextHelp.

Parameter dan nilai yang dikembalikan Deskripsi
wParam Tidak digunakan (0)
lParam Tidak digunakan (0)
pengembalian Tidak digunakan

WM_INITIALUPDATE

Pesan ini dikirim oleh templat dokumen ke semua turunan jendela bingkai ketika aman bagi mereka untuk melakukan pembaruan awal. Ini memetakan ke panggilan ke CView::OnInitialUpdate tetapi dapat digunakan di kelas -turunan lain CWnduntuk pembaruan satu bidikan lainnya.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan (0)
lParam Tidak digunakan (0)
pengembalian Tidak digunakan (0)

WM_RECALCPARENT

Pesan ini dikirim oleh tampilan ke jendela induknya (diperoleh melalui GetParent) untuk memaksa penghitungan ulang tata letak (biasanya, induk akan memanggil RecalcLayout). Ini digunakan dalam aplikasi server OLE di mana diperlukan agar bingkai tumbuh dalam ukuran saat ukuran total tampilan tumbuh.

Jika jendela induk memproses pesan ini, itu harus mengembalikan TRUE dan mengisi RECT yang diteruskan di lParam dengan ukuran baru area klien. Ini digunakan CScrollView untuk menangani bilah gulir dengan benar (tempatkan lalu di bagian luar jendela saat ditambahkan) ketika objek server diaktifkan di tempat.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan (0)
lParam LPRECT rectClient, mungkin NULL
pengembalian TRUE jika persegi panjang klien baru dikembalikan, FALSE jika tidak

WM_SIZECHILD

Pesan ini dikirim oleh COleResizeBar ke jendela pemiliknya (melalui GetOwner) ketika pengguna mengubah ukuran bilah mengubah ukuran dengan handel mengubah ukuran. COleIPFrameWnd merespons pesan ini dengan mencoba memposisikan ulang jendela bingkai seperti yang diminta pengguna.

Persegi panjang baru, yang diberikan dalam koordinat klien relatif terhadap jendela bingkai yang berisi bilah pengubahan ukuran, diarahkan oleh lParam.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan (0)
lParam LPRECT rectNew
pengembalian Tidak digunakan (0)

WM_DISABLEMODAL

Pesan ini dikirim ke semua jendela pop-up yang dimiliki oleh jendela bingkai yang sedang dinonaktifkan. Jendela bingkai menggunakan hasil untuk menentukan apakah jendela pop-up akan dinonaktifkan atau tidak.

Anda dapat menggunakan ini untuk melakukan pemrosesan khusus di jendela pop-up Anda ketika bingkai memasuki status modal atau untuk menjaga jendela pop-up tertentu tidak dinonaktifkan. Tipsalat menggunakan pesan ini untuk menghancurkan diri mereka sendiri ketika jendela bingkai masuk ke status modal, misalnya.

Parameter dan nilai pengembalian Deskripsi
wParam Tidak digunakan (0)
lParam Tidak digunakan (0)
pengembalian Bukan nol untuk TIDAK menonaktifkan jendela, 0 menunjukkan jendela akan dinonaktifkan

WM_FLOATSTATUS

Pesan ini dikirim ke semua jendela pop-up yang dimiliki oleh jendela bingkai ketika bingkai diaktifkan atau dinonaktifkan oleh jendela bingkai tingkat atas lainnya. Ini digunakan oleh implementasi MFS_SYNCACTIVE di CMiniFrameWnd, untuk menjaga aktivasi jendela pop-up ini tetap sinkron dengan aktivasi jendela bingkai tingkat atas.

Parameter Deskripsi
wParam Adalah salah satu nilai berikut:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
lParam Tidak digunakan (0)

Nilai yang dikembalikan harus bukan nol jika FS_SYNCACTIVE diatur dan jendela menyinkronkan aktivasinya dengan bingkai induk. CMiniFrameWnd mengembalikan bukan nol saat gaya diatur ke MFS_SYNCACTIVE.

Untuk informasi selengkapnya, lihat implementasi CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Pesan ini dikirim ke jendela tingkat atas ketika jendela dalam "grup tingkat atas" diaktifkan atau dinonaktifkan. Jendela adalah bagian dari grup tingkat atas jika merupakan jendela tingkat atas (tanpa induk atau pemilik), atau dimiliki oleh jendela tersebut. Pesan ini mirip digunakan untuk WM_ACTIVATEAPP, tetapi berfungsi dalam situasi di mana jendela milik proses yang berbeda dicampur dalam hierarki jendela tunggal (umum dalam aplikasi OLE).

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Pesan ini digunakan dalam implementasi Bantuan peka konteks. Silakan merujuk ke Catatan Teknis 28 untuk informasi lebih lanjut.

Format Sumber Daya Privat MFC

Saat ini, MFC mendefinisikan dua format sumber daya privat: RT_TOOLBAR dan RT_DLGINIT.

Format Sumber Daya RT_TOOLBAR

Toolbar default yang disediakan oleh AppWizard didasarkan pada sumber daya kustom RT_TOOLBAR, yang diperkenalkan di MFC 4.0. Anda dapat mengedit sumber daya ini menggunakan editor Toolbar.

Format Sumber Daya RT_DLGINIT

Satu format sumber daya privat MFC digunakan untuk menyimpan informasi inisialisasi dialog tambahan. Ini termasuk string awal yang disimpan dalam kotak kombo. Format sumber daya ini tidak dirancang untuk diedit secara manual, tetapi ditangani oleh Visual C++.

Visual C++ dan sumber daya RT_DLGINIT ini tidak diperlukan untuk menggunakan fitur terkait MFC karena ada alternatif API untuk menggunakan informasi dalam sumber daya. Menggunakan Visual C++ membuatnya jauh lebih mudah untuk menulis, memelihara, dan menerjemahkan aplikasi Anda dalam jangka panjang.

Struktur dasar sumber daya RT_DLGINIT adalah sebagai berikut:

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

Bagian berulang berisi ID kontrol untuk mengirim pesan, Pesan # untuk mengirim (pesan Windows normal) dan panjang variabel data. Pesan Windows dikirim dalam formulir:

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

Ini adalah format yang sangat umum, memungkinkan pesan Windows dan konten data apa pun. Editor sumber daya Visual C++ dan MFC hanya mendukung subset terbatas pesan Windows: CB_ADDSTRING untuk pilihan daftar awal untuk kotak kombo (data adalah string teks).

Baca juga

Catatan Teknis menurut Angka
Catatan Teknis menurut Kategori