Aracılığıyla paylaş


TN024: MFC Tanımlı İletiler ve Kaynaklar

Dekont

Aşağıdaki teknik not, çevrimiçi belgelere ilk kez eklendiğinden beri güncelleştirilmemiştir. Sonuç olarak, bazı yordamlar ve konular güncel olmayabilir veya yanlış olabilir. En son bilgiler için, çevrimiçi belge dizininde ilgilendiğiniz konuyu aramanız önerilir.

Bu not, MFC tarafından kullanılan iç Windows iletilerini ve kaynak biçimlerini açıklar. Bu bilgiler çerçevenin uygulanmasını açıklar ve uygulamanızda hata ayıklamada size yardımcı olur. Maceracı için, tüm bu bilgiler resmi olarak desteklenmese de, gelişmiş uygulamalar için bu bilgilerin bazılarını kullanabilirsiniz.

Bu not MFC özel uygulama ayrıntılarını içerir; tüm içerikler gelecekte değiştirilebilir. MFC özel Windows iletileri yalnızca bir uygulama kapsamında anlam taşır, ancak gelecekte sistem genelinde iletileri içerecek şekilde değişir.

MFC özel Windows iletileri ve kaynak türleri aralığı, Microsoft Windows tarafından ayrılan ayrılmış "sistem" aralığındadır. Şu anda aralıklardaki tüm sayılar kullanılmaz ve gelecekte aralıktaki yeni sayılar kullanılabilir. Şu anda kullanılan sayılar değiştirilebilir.

MFC özel Windows iletileri 0x360-0x37F> aralığındadır.

MFC özel kaynak türleri 0xF0-0xFF> aralığındadır.

MFC Özel Windows İletileri

Bu Windows iletileri, pencere nesneleri arasında görece gevşek bağlantının gerekli olduğu ve C++ sanal işlevinin uygun olmadığı C++ sanal işlevlerinin yerine kullanılır.

Bu özel Windows iletileri ve ilişkili parametre yapıları' AFXPRIV MFC özel üst bilgisinde bildirilir. H'. Bu üst bilgiyi içeren herhangi bir kodunuzun belgelenmemiş davranışa bağlı olabileceği ve MFC'nin gelecekteki sürümlerinde büyük olasılıkla bozulacağı konusunda uyarılmalıdır.

Bu iletilerden birini işlemeniz gerektiğinde, ON_MESSAGE ileti eşleme makrosunu kullanmanız ve iletiyi genel LRESULT/WPARAM/LPARAM biçiminde işlemeniz gerekir.

WM_QUERYAFXWNDPROC

Bu ileti, oluşturulan bir pencereye gönderilir. Bu, oluşturma işleminin çok erken bir aşamasında WndProc'un AfxWndProc olup olmadığını belirleme yöntemi olarak gönderilir. AfxWndProc , 1 döndürür.

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor
Lparam Kullanılmıyor
dizisi AfxWndProc tarafından işlenirse 1

WM_SIZEPARENT

Bu ileti, çerçevenin yan tarafındaki denetim çubuklarını yeniden konumlandırmak için yeniden boyutlandırma sırasında (CFrameWnd::OnSize çağıran çağrılar CFrameWnd::RecalcLayout CWnd::RepositionBars) anlık alt öğelerine bir çerçeve penceresi tarafından gönderilir. AFX_SIZEPARENTPARAMS yapısı, yeniden boyamayı en aza indirmek için çağrılabilecek DeferWindowPos geçerli istemci dikdörtgenini ve bir HDWP 'yi (NULL olabilir) içerir.

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor
Lparam AFX_SIZEPARENTPARAMS yapısının adresi
dizisi Kullanılmıyor (0)

İletinin yoksayılması, pencerenin düzende yer almadığını gösterir.

WM_SETMESSAGESTRING

Bu ileti, durum çubuğundaki ileti satırını güncelleştirmesini istemek için bir çerçeve penceresine gönderilir. Dize kimliği veya LPCSTR belirtilebilir (ancak ikisini birden belirtemez).

Parametreler ve dönüş değeri Tanım
Wparam Dize Kimliği (veya sıfır)
Lparam Dize için LPCSTR (veya NULL)
dizisi Kullanılmıyor (0)

WM_IDLEUPDATECMDUI

Bu ileti, update-command kullanıcı arabirimi işleyicilerinin boşta kalma süresi güncelleştirmesini uygulamak için boşta kalma süresi içinde gönderilir. Pencere (genellikle bir denetim çubuğu) iletiyi işlerse, bir CCmdUI nesne (veya türetilmiş bir sınıfın nesnesi) oluşturur ve penceredeki "öğelerin" her biri için çağrır CCmdUI::DoUpdate . Bu, komut işleyicisi zincirindeki nesneler için bir ON_UPDATE_COMMAND_UI işleyicisi olup olmadığını denetler.

Parametreler ve dönüş değeri Tanım
Wparam BOOL bDisableIfNoHandler
Lparam Kullanılmıyor (0)
dizisi Kullanılmıyor (0)

bDisableIfNoHandler , ON_UPDATE_COMMAND_UI veya ON_COMMAND işleyicisi yoksa UI nesnesini devre dışı bırakmak için sıfır değildir.

WM_EXITHELPMODE

Bu ileti, bağlama duyarlı yardım modundan çıkmak için bir CFrameWnd iletiye gönderiliyor. Bu iletinin alınması tarafından CFrameWnd::OnContextHelpbaşlatılan kalıcı döngünün sonlandırılmasını sağlar.

Parametre ve dönüş değeri Tanım
Wparam Kullanılmıyor (0)
Lparam Kullanılmıyor (0)
dizisi Kullanılmıyor

WM_INITIALUPDATE

Bu ileti, belge şablonu tarafından ilk güncelleştirmelerini yapmaları güvenli olduğunda çerçeve penceresinin tüm alt öğelerine gönderilir. Çağrısına CView::OnInitialUpdate eşler, ancak diğer tek seferlik güncelleştirme için diğer CWndtüretilmiş sınıflarda kullanılabilir.

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor (0)
Lparam Kullanılmıyor (0)
dizisi Kullanılmıyor (0)

WM_RECALCPARENT

Bu ileti, bir düzen yeniden hesaplamasını zorlamak için bir görünüm tarafından üst penceresine (aracılığıyla GetParentelde edilir) gönderilir (genellikle üst öğe çağırır RecalcLayout). Bu, görünümün toplam boyutu büyüdükçe çerçevenin boyutunun büyümesi gereken OLE sunucusu uygulamalarında kullanılır.

Üst pencere bu iletiyi işlerse TRUE döndürmelidir ve lParam'da geçirilen RECT'yi istemci alanının yeni boyutuyla doldurmalıdır. Bu, bir sunucu nesnesi yerinde etkinleştirildiğinde kaydırma çubuklarını (eklendiklerinde pencerenin dışına yerleştirin) düzgün şekilde işlemek için içinde kullanılır CScrollView .

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor (0)
Lparam LPRECT rectClient, NULL olabilir
dizisi Yeni istemci dikdörtgeni döndürülürse TRUE, aksi takdirde YANLIŞ

WM_SIZECHILD

Kullanıcı yeniden boyutlandırma tutamaçlarıyla yeniden boyutlandırma çubuğunu yeniden boyutlandırdığında, bu ileti tarafından COleResizeBar sahip penceresine (aracılığıyla GetOwner) gönderilir. COleIPFrameWnd kullanıcının istediği gibi çerçeve penceresini yeniden konumlandırmayı deneyerek bu iletiyi yanıtlar.

Yeniden boyutlandırma çubuğunu içeren çerçeve penceresine göre istemci koordinatlarında verilen yeni dikdörtgen, lParam tarafından işaret edilir.

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor (0)
Lparam LPRECT rectNew
dizisi Kullanılmıyor (0)

WM_DISABLEMODAL

Bu ileti, devre dışı bırakılan bir çerçeve penceresine ait tüm açılır pencerelere gönderilir. Çerçeve penceresi, açılan pencerenin devre dışı bırakılıp bırakılmayacağını belirlemek için sonucu kullanır.

Çerçeve kalıcı bir duruma girdiğinde açılır pencerenizde özel işlem gerçekleştirmek veya bazı açılır pencerelerin devre dışı kalmasını sağlamak için bunu kullanabilirsiniz. Araç ipuçları, örneğin çerçeve penceresi kalıcı bir duruma geçtiğinde kendilerini yok etmek için bu iletiyi kullanır.

Parametreler ve dönüş değeri Tanım
Wparam Kullanılmıyor (0)
Lparam Kullanılmıyor (0)
dizisi Pencereyi devre dışı bırakmamak için sıfır olmayan 0, pencerenin devre dışı bırakılacağını gösterir

WM_FLOATSTATUS

Bu ileti, çerçeve başka bir üst düzey çerçeve penceresi tarafından etkinleştirildiğinde veya devre dışı bırakıldığında bir çerçeve penceresine ait tüm açılır pencerelere gönderilir. Bu, bu açılır pencerelerin etkinleştirilmesini en üst düzey çerçeve penceresinin etkinleştirilmesiyle eşitlenmiş durumda tutmak için içinde MFS_SYNCACTIVE CMiniFrameWnduygulaması tarafından kullanılır.

Parametreler Tanım
Wparam Aşağıdaki değerlerden biridir:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
Lparam Kullanılmıyor (0)

FS_SYNCACTIVE ayarlanırsa ve pencere etkinleştirmeyi üst çerçeveyle eşitlerse dönüş değeri sıfır olmayan olmalıdır. CMiniFrameWnd stil MFS_SYNCACTIVE olarak ayarlandığında sıfır olmayan bir değer döndürür.

Daha fazla bilgi için bkz. uygulaması.CMiniFrameWnd

WM_ACTIVATETOPLEVEL

Bu ileti, "en üst düzey grubundaki" bir pencere etkinleştirildiğinde veya devre dışı bırakıldığında en üst düzey pencereye gönderilir. Bir pencere, üst düzey bir pencereyse (üst veya sahip yok) veya böyle bir pencereye sahipse, en üst düzey grubun bir parçasıdır. Bu ileti kullanımda WM_ACTIVATEAPP benzerdir, ancak farklı işlemlere ait pencerelerin tek bir pencere hiyerarşisinde (OLE uygulamalarında ortak) karıştırıldığı durumlarda çalışır.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Bu iletiler, bağlama duyarlı Yardım'ın uygulanmasında kullanılır. Daha fazla bilgi için lütfen Teknik Not 28'e bakın.

MFC Özel Kaynak Biçimleri

MFC şu anda iki özel kaynak biçimi tanımlar: RT_TOOLBAR ve RT_DLGINIT.

RT_TOOLBAR Kaynak Biçimi

AppWizard tarafından sağlanan varsayılan araç çubuğu, MFC 4.0'da kullanıma sunulan RT_TOOLBAR özel bir kaynağı temel alır. Araç Çubuğu düzenleyicisini kullanarak bu kaynağı düzenleyebilirsiniz.

RT_DLGINIT Kaynak Biçimi

Ek iletişim kutusu başlatma bilgilerini depolamak için bir MFC özel kaynak biçimi kullanılır. Bu, birleşik giriş kutusunda depolanan ilk dizeleri içerir. Bu kaynağın biçimi el ile düzenlenecek şekilde tasarlanmamıştır, ancak Visual C++ tarafından işlenir.

Visual C++ ve bu RT_DLGINIT kaynağının, kaynaktaki bilgileri kullanmaya alternatif API'si olduğundan MFC'nin ilgili özelliklerini kullanması gerekmez. Visual C++ kullanmak, uygulamanızı uzun vadede yazmanızı, korumanızı ve çevirmenizi çok daha kolay hale getirir.

RT_DLGINIT kaynağının temel yapısı aşağıdaki gibidir:

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

Yinelenen bölüm, iletinin gönderilip gönderilmeyecek denetim kimliğini, gönderilecek İleti # değerini (normal bir Windows iletisi) ve değişken bir veri uzunluğunu içerir. Windows iletisi bir formda gönderilir:

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

Bu, Windows iletilerine ve veri içeriğine izin veren çok genel bir biçimdir. Visual C++ kaynak düzenleyicisi ve MFC yalnızca sınırlı bir Windows iletileri alt kümesini destekler: birleşik giriş kutuları için ilk liste seçenekleri için CB_ADDSTRING (veriler bir metin dizesidir).

Ayrıca bkz.

Sayıya Göre Teknik Notlar
Kategoriye Göre Teknik Notlar