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::OnContextHelp
baş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 CWnd
tü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 GetParent
elde 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 CMiniFrameWnd
uygulaması 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).