Aracılığıyla paylaş


Aç ve Farklı Kaydet iletişim kutuları

Not

GetOpenFileName işlevi, Dosyası kullanımda örnekiçinde gösterilmiştir.

[Windows Vista'dan başlayarak, ve Farklı Kaydet ortak iletişim kutuları, Ortak Öğe İletişim Kutusutarafından değiştirildi. Ortak İletişim Kutusu Kitaplığı'ndan bu iletişim kutuları yerine Ortak Öğe İletişim Kutusu API'sini kullanmanızı öneririz.]

iletişim kutusu, kullanıcının açılacak dosya veya dosya kümesinin sürücüsünü, dizinini ve adını belirtmesine olanak tanır. OPENFILENAME yapısını başlatıp yapıyı GetOpenFileName işlevine geçirerek Aç iletişim kutusu oluşturup görüntüleyebilirsiniz.

Farklı Kaydet iletişim kutusu, kullanıcının kaydedilecek dosyanın sürücüsünü, dizinini ve adını belirtmesine olanak tanır. bir OPENFILENAME yapısı başlatıp yapıyı GetSaveFileNameişlevine geçirerekFarklı Kaydet iletişim kutusu oluşturup görüntüleyebilirsiniz.

Gezgin stili Aç ve Farklı Kaydet iletişim kutuları, Windows Gezgini'ne benzer kullanıcı arabirimi özellikleri sağlar. Ancak sistem, eski stil kullanıcı arabirimiyle tutarlı olması gereken uygulamalar için Aç ve Farklı Kaydet iletişim kutuları eski stildeki desteklemeye devam eder.

Görünümdeki farka ek olarak, Gezgin stili ve eski stil iletişim kutuları, iletişim kutularını özelleştirmek için özel şablonlar ve kanca yordamları kullanmalarında farklılık gösterir. Ancak, Gezgin stili ve eski stil iletişim kutuları, dosya adı filtresi belirtme, kullanıcının girişini doğrulama ve kullanıcı tarafından belirtilen dosya adını alma gibi temel işlemlerin çoğunda aynı davranışa sahiptir. Gezgin stili ve eski stil iletişim kutuları hakkında daha fazla bilgi için bkz. Aç ve Farklı Kaydet İletişim Kutusu Özelleştirme.

Aşağıdaki çizimde, Aç iletişim kutusu tipik bir Gezgin stili gösterilmektedir.

Dosya aç iletişim kutusunu

Aşağıdaki çizimde tipik bir Gezgin stili Farklı Kaydet iletişim kutusu gösterilmektedir.

Dosyayı kaydet iletişim kutusu

Kullanıcı bir dosya adı belirtir ve Tamam düğmesine tıklarsa GetOpenFileNameveya GetSaveFileName TRUE döndürür. OPENFILENAME yapısının lpstrFile üyesi tarafından işaret edilen arabellek, kullanıcı tarafından belirtilen tam yolu ve dosya adını içerir.

Kullanıcı veya Farklı Kaydet iletişim kutusunu iptal ederse veya bir hata oluşursa, işlev FALSE döndürür. Hatanın nedenini belirlemek için CommDlgExtendedError işlevini çağırarak genişletilmiş hata değerini alın. lpstrFile arabelleği tam adı alamayacak kadar küçükse, CommDlgExtendedError FNERR_BUFFERTOOSMALL döndürür ve lpstrFile üyesi tarafından işaret edilen arabelleğin ilk 2 bayt değeri, tam adı almak için gereken boyutu belirten bir tamsayı değerine ayarlanır.

Bu bölümde aşağıdaki konular ele alınıyor.

Dosya Adları ve Dizinler

Bu bölümdeki bilgiler Hem Gezgin stili hem de eski stil aç ve farklı kaydet iletişim kutuları için geçerlidir.

GetOpenFileNameveya GetSaveFileNameişlevleriniçağırmadan önce, OPENFILENAME yapısının lpstrFile üyesi dosya adını almak için arabelleğe işaret etmelidir. nMaxFile üyesi, lpstrFile arabelleğinin boyutunu karakter olarak belirtmelidir. ANSI işlevi için bu bayt sayısıdır, ancak Unicode işlevi için bu karakter sayısıdır.

Kullanıcı bir dosya adı belirtir ve Tamam düğmesine tıklarsa, iletişim kutusu seçili sürücüyü, dizini ve dosya adını lpstrFile arabelleğine kopyalar. İşlev ayrıca nFileOffset ve nFileExtension üyelerini, arabelleğin başlangıcından dosya adına ve dosya adı uzantısına sırasıyla karakter olarak uzaklıklara ayarlar.

Yalnızca dosya adını ve uzantısını almak için lpstrFileTitle üyesini bir arabelleğe işaret etmek üzere ayarlayın ve nMaxFileTitle üyesini arabelleğin karakter cinsinden boyutuna ayarlayın. Alternatif olarak, seçilen dosyanın görünen adını almak için lpstrFile arabelleği GetFileTitle işlevine geçirebilirsiniz. Bununla birlikte, GetFileTitle dosya adının yalnızca kullanıcının dosya adlarını görüntüleme tercihi olması durumunda bir uzantı içerdiğini unutmayın.

İletişim kutusu, arama işlemi için geçerli dizini, dosya ve dizinlerin görüntüleneceği ilk dizin olarak kullanır. bir işlemin geçerli dizinini almak ve değiştirmek için GetCurrentDirectoryve SetCurrentDirectory işlevlerini kullanın. Geçerli dizininizi değiştirmeden farklı bir başlangıç dizini belirtmek için lpstrInitialDir üyesini kullanarak dizinin adını belirtin. kullanıcı farklı bir sürücü veya dizin seçtiğinde iletişim kutusu geçerli dizininizi otomatik olarak değiştirir. İletişim kutusunun geçerli dizininizi değiştirmesini önlemek için OFN_NOCHANGEDIR bayrağını ayarlayın. Bu bayrak, kullanıcının dosyayı bulmak için dizinleri değiştirmesini engellemez.

Varsayılan dosya adı uzantısını belirtmek için lpstrDefExt üyesini kullanın. Kullanıcı uzantısı olmayan bir dosya adı belirtirse, iletişim kutusu varsayılan uzantınızı ekler. Varsayılan bir uzantı belirtirseniz ve kullanıcı farklı bir uzantıya sahip bir dosya adı belirtirse, iletişim kutusu OFN_EXTENSIONDIFFERENT bayrağını ayarlar.

Kullanıcının bir dizinden birden fazla dosya seçmesine izin vermek için OFN_ALLOWMULTISELECT bayrağını ayarlayın. Eski uygulamalarla uyumluluk için, varsayılan çoklu seçim iletişim kutusu eski stil kullanıcı arabirimini kullanır. Gezgin stilinde birden çok seçim iletişim kutusunu görüntülemek için OFN_EXPLORER bayrağını da ayarlamanız gerekir.

Kullanıcı birden fazla dosya seçerse, lpstrFile üyesi tarafından işaret edilen arabellek, geçerli dizinin yolunu ve ardından seçili dosyaların dosya adlarını döndürür. nFileOffset üyesi ilk dosya adına uzaklıktır ve nFileExtension üyesi kullanılmaz. Aşağıdaki tabloda, birden çok dosya adı döndürülerek Gezgin stiliyle eski stil iletişim kutuları arasındaki fark açıklanmaktadır.

İletişim kutusu stili Açıklama
Gezgin stili iletişim kutuları Dizin ve dosya adı dizeleri null ayrılmıştır ve son dosya adından sonra ek NULL karakter içerir. Bu biçim, Gezgin stili iletişim kutularının boşluk içeren uzun dosya adları döndürmesini sağlar.
Eski stil iletişim kutuları Dizin ve dosya adı dizeleri boşluklarla ayrılır. Boşluklu dosya adları için işlev kısa dosya adlarını kullanır.

 

Uzun ve kısa dosya adları arasında dönüştürme yapmak için FindFirstFile işlevini kullanabilirsiniz.

OFN_ALLOWMULTISELECT belirtirseniz ve kullanıcı yalnızca bir dosya seçerse, lpstrFile dizesinin yol ve dosya adı arasında bir ayırıcısı yoktur.

Filtre

Bu bölümdeki bilgiler Hem Gezgin stili hem de eski stil ve farklı kaydet iletişim kutuları için geçerlidir.

Kullanıcının iletişim kutusunun görüntülediği dosya adlarını sınırlamasına yardımcı olmak için dosya adı filtreleri sağlayabilirsiniz. Dosya adı filtresi, null olarak sonlandırılan bir dize çifti, bir açıklama ve bir desenden oluşur ve biri diğerini birleştirir. İletişim kutusunda, kullanıcının kullanılacak filtreyi seçmesine izin vermek için açıklama görüntülenir; ve görüntülenecek dosyaları seçmek için deseni kullanır.

Filtreleri belirtmek için, OPENFILENAME yapısının lpstrFilter üyesini filtre dizesi çiftleri dizisi içeren bir arabelleğe işaret etmek üzere ayarlayın. Dizideki son dizenin ardından fazladan null karakter eklenmelidir.

Desen dizesi, geçerli dosya adı karakterleri ve yıldız işareti (*) birleşimi olabilir. Yıldız işareti, geçerli dosya adı karakterlerinin herhangi bir bileşimini temsil eden bir joker karakterdir. İletişim kutusu yalnızca desenle eşleşen dosyaları görüntüler. Aynı açıklama için birden çok desen belirtmek için, desenleri ayırmak için noktalı virgül (;)) kullanmanız gerekir. Desen dizesindeki boşluk karakterlerinin beklenmeyen sonuçlara neden olabileceğini unutmayın.

Aşağıdaki kod parçası iki filtre belirtir. "Kaynak" açıklamasına sahip filtrenin iki deseni vardır. Kullanıcı bu filtreyi seçerse, iletişim kutusunda yalnızca içeren dosyalar görüntülenir. C ve . CXX uzantıları. C programlama dilinde çift tırnak içine alınmış bir dizenin null olarak sonlandırıldığını unutmayın.

OPENFILENAME ofn;       // common dialog box structure

ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;

OPENFILENAME yapısının nFilterIndex üyesi, iletişim kutusunun başlangıçta hangi filtreyi kullandığını gösteren bir dizin belirtir. Arabellekteki ilk filtrede dizin 1, ikinci 2 vb. vardır. Kullanıcı iletişim kutusunu kullanırken filtreyi değiştirirse, nFilterIndex üyesi, döndürülen seçili filtrenin dizinine ayarlanır.

lpstrCustomFilter üyesini tek filtre içeren bir arabelleğin adresine ayarlayarak ve nMaxCustFilter üyesini arabellek boyutuna karakter veya bayt cinsinden ayarlayarak özel bir filtre oluşturabilirsiniz. İletişim kutusu her zaman özel filtreyi filtre listesinin başına yerleştirir ve geri döndüğünde, filtrenin desen bölümünü her zaman kullanıcı tarafından seçilen filtreden gelen desenle güncelleştirir.

Gezgin stili iletişim kutuları için, kullanıcı farklı bir filtre seçerse varsayılan uzantı değişebilir. Kullanıcı ilk deseni * biçiminde olan bir filtre seçerse.xxx (yani, uzantı joker karakter içermez), iletişim kutusunda varsayılan uzantı olarak xxx kullanılır. Bu, yalnızca OPENFILENAME yapısının lpstrDefExt üyesinde varsayılan bir uzantı belirttiğinizde oluşur. Örneğin, kullanıcı "Kaynak\0* öğesini seçerse. C;*. CXX\0" filtresi, varsayılan uzantı "C" olarak değişir. Ancak, filtreyi "Kaynak\0* olarak tanımladıysanız. C*\0", uzantı joker karakter içerdiğinden varsayılan uzantı değişmez.

CDN_INCLUDEITEM bildirim iletisi, iletişim kutusunun görüntülediği adları filtrelemek için başka bir yol sağlar. Bu iletiyi kullanmak için bir OFNHookProc kanca yordamı sağlayın ve iletişim kutusunu oluştururken OPENFILENAME yapısında OFN_ENABLEINCLUDENOTIFY bayrağını belirtin. Kullanıcı her klasör açtığında, iletişim kutusu yeni açılan klasördeki her öğe için kanca yordamınıza bir CDN_INCLUDEITEM bildirimi gönderir. Kanca yordamının dönüş değeri, iletişim kutusunun öğenin klasörün öğe listesinde görüntülenip görüntülenmeyeceğini gösterir.

Dosya ve Dizin Doğrulama

Belirtilenler dışında, bu bölümdeki bilgiler Hem Gezgin stilinde hem de eski stilde ve Farklı Kaydet iletişim kutuları için geçerlidir.

İletişim kutusu, adların yalnızca geçerli karakterler içerdiğinden emin olmak için kullanıcı tarafından yazılan dosya adlarını otomatik olarak doğrular. Dosya adı karakter doğrulamasını geçersiz kılmak için OFN_NOVALIDATE bayrağını ayarlayın.

İletişim kutusunu kullanıcının var olan bir dosyanın adını belirttiğini doğrulamaya zorlamak için OFN_FILEMUSTEXIST bayrağını ayarlayın. Belirtilen yolun var olduğunu doğrulamaya zorlamak için OFN_PATHMUSTEXIST bayrağını ayarlayın. OFN_CREATEPROMPT bayrağını ayarlarsanız, iletişim kutusu kullanıcıdan var olmayan bir dosya oluşturma izni ister. Bu bayrak ayarlanırsa ve kullanıcı yeni bir dosya oluşturmayı seçerse, iletişim kutusu kapatılır ve işlev belirtilen adı döndürür. Aksi takdirde, iletişim kutusu açık kalır.

Farklı Kaydet iletişim kutusunu kullanırken, OFN_OVERWRITEPROMPT bayrağını ayarlayarak kullanıcıdan var olan bir dosyanın üzerine yazma izni istemesini isteyebilirsiniz.

varsayılan olarak, iletişim kutusu seçili dizinde yeni bir dosya oluşturulup oluşturulamayacağını belirlemek için sıfır uzunluklu bir test dosyası oluşturur. Bu test dosyasının oluşturulmasını önlemek için OFN_NOTESTFILECREATE bayrağını ayarlayın.

Bir kanca yordamını etkinleştirirseniz, kullanıcı tarafından belirtilen dosya adı için ağ paylaşımı ihlali oluştuğunda iletişim kutusu kanca yordamınızı bildirir. OFN_EXPLORER bayrağını ayarlarsanız, iletişim kutusu CDN_SHAREVIOLATION iletisini kanca yordamına gönderir. OFN_EXPLORERayarlamazsanız, iletişim kutusu SHAREVISTRING kayıtlı iletiyi kanca yordamına gönderir. İletişim kutusunun paylaşım ihlallerine yönelik bildirim göndermesini önlemek için OFN_SHAREAWARE bayrağını ayarlayın.

Kullanıcı salt okunur onay kutusunu seçerse, iletişim kutusu dönüşte OFN_READONLY bayrağını ayarlar. Salt Okunur Olarak Aç onay kutusunu gizlemek için OFN_HIDEREADONLY bayrağını ayarlayın. İletişim kutusunun salt okunur özniteliğine sahip mevcut dosyaların adlarını döndürmesini önlemek için OFN_NOREADONLYRETURN bayrağını ayarlayın.

İletişim kutusunun bağlantı dosyalarının başvurularını kaldırmasını önlemek için OFN_NODEREFERENCELINKS değerini ayarlayın. Bu durumda, iletişim kutusu bağlantı dosyası tarafından başvuruda bulunılan dosyanın adı yerine bağlantı dosyasının adını döndürür.

Aç ve Farklı Kaydet İletişim Kutusu Özelleştirmesi

Bir kanca yordamı, özel şablon veya her ikisini birden sağlayarak Aç'ı veya Farklı Kaydet iletişim kutusunu özelleştirebilirsiniz. Ancak, iletişim kutularının Gezgin stili ve eski stil sürümleri, özel şablonların ve kanca yordamlarının kullanımında farklılık gösterir.

Gezgin stilinde bir iletişim kutusunu özelleştirme hakkında bilgi için bkz. Explorer-Style Kanca Yordamları, Explorer-Style Özel Şablonlarve Explorer-Style Denetim Tanımlayıcıları. Eski stilde bir iletişim kutusunu özelleştirme hakkında bilgi için bkz. Old-Style İletişim Kutularını Özelleştirme.

Aşağıdaki tabloda iki stil arasındaki farklar özetlemektedir.

Özelleştirme Açıklama
Gezgin stili Kanca yordamı Kanca yordamı, ortak iletişim kutusundan gönderilen bildirim iletilerini ve bir alt iletişim kutusu şablonu belirterek tanımladığınız ek denetimlerin iletilerini alır. Kanca yordamı, varsayılan iletişim kutusunun standart denetimleri için iletiler almaz.
Gezgin stili Özel şablon Sistem, bir alt iletişim kutusu oluşturmak için özel şablonu kullanır. Şablon ek denetimler tanımlayabilir ve standart denetimler kümesinin konumunu belirtebilir. Özel şablon varsayılan şablonun yerini almaz.
Eski stil Kanca yordamı Kanca yordamı, standart denetimler ve özel denetimler için iletiler de dahil olmak üzere iletişim kutusuna gönderilen tüm iletileri alır. Kanca yordamı, ortak iletişim kutusundan gönderilen kayıtlı iletileri de alır.
Eski stil Özel şablon Özel şablon varsayılan şablonun yerini alır. Fileopen.dlg dosyasında belirtilen varsayılan şablonu değiştirerek özel şablonu oluşturun.

 

Hem Gezgin stili hem de eski stil iletişim kutuları için varsayılan başlık "Aç " veya "Farklı Kaydet." şeklindedir. Başlığı değiştirmek için, OPENFILENAME yapısının lpstrTitle üyesinde yeni başlığı belirtin.

Bir kullanıcının HKEY_CURRENT_USER kayıt defteri kovanı, Gezgin stilinde aç ve Farklı Kaydet iletişim kutularının içeriğini özelleştiren değerler içerebilir. Bu kayıt defteri girdileri yalnızca kayıt defteri kovanı ile ilişkilendirilmiş kullanıcı için görüntülenen iletişim kutularını etkiler.

Gezgin stili Open ve Farklı Kaydet iletişim kutularının özelliklerini gizlemek için, yönetici bu alt anahtarın altındaki aşağıdaki tabloda yer alan değerleri ayarlayabilir:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Comdlg32
Değer adı Değer Anlam
NoPlacesBar 1 Yerler çubuğunu gizler.
NoFileMRU 1 En Son Kullanılan (MRU) listesini gizler.
NoBackButton 1 Geri düğmesini gizler.

 

Yerler çubuğunun içeriği aşağıdaki alt anahtarın içeriğine göre belirlenir:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Comdlg32
                     Placesbar

Şu anda bu anahtarın altında yalnızca beş girdi olabilir ve değer/ad dizini sıfır tabanlıdır. Girdilerin adları Yer0, Yer1, Yer2,Yer3 ve Yer4 olmalıdır. Girdilerin değerleri REG_DWORD, REG_SZveya yerler çubuğuna eklenecek konumları tanımlayan REG_EXPAND_SZ değerler olabilir.

Değer türü Anlam
REG_DWORD Bir klasörü tanımlayan CSIDL değeri. CSIDL değerlerinin listesi için bkz.CSIDL değerlerini.
REG_SZ veya REG_EXPAND_SZ Geçerli bir yol belirten null olarak sonlandırılan dize.

 

Explorer-Style Kanca Yordamları

Explorer stilinde bir Aç'ı veya bir kanca yordamı, özel şablon veya her ikisini birden sağlayarak Farklı Kaydet iletişim kutusunu özelleştirebilirsiniz. Gezgin stili iletişim kutusu için bir kanca yordamı sağlarsanız, sistem varsayılan iletişim kutusunun alt öğesi olan bir iletişim kutusu oluşturur. Kanca yordamı, alt iletişim kutusu için iletişim kutusu olarak görev yapar. Bu alt iletişim kutusu özel şablonu temel alır veya sağlanmayan varsayılan bir şablonu temel alır. Daha fazla bilgi için bkz. Explorer-Style Özel Şablonlar.

Gezgin stilinde bir Aç veya Farklı Kaydet iletişim kutusu için bir kanca yordamını etkinleştirmek için, iletişim kutusunu oluştururken OPENFILENAMEyapısınıkullanın. Bayrakları üyesinde OFN_ENABLEHOOK ve OFN_EXPLORER bayraklarını ayarlayın ve lpfnHook üyesinde OFNHookProc kanca yordamının adresini belirtin. Bir kanca yordamı sağlar ve OFN_EXPLORER bayrağını atlarsanız, OFNHookProcOldStyle kanca yordamı kullanmanız gerekir ve eski stil kullanıcı arabirimini alırsınız. Daha fazla bilgi için bkz. Old-Style İletişim Kutularını Özelleştirme.

Gezgin stili bir kanca yordamı, iletişim kutusu açıkken çeşitli iletiler alır. Bunlar şunları içerir:

  • WM_INITDIALOG iletisi ve WM_CTLCOLORDLG denetimi renk iletisi gibi diğer standart iletişim kutusu iletileri.
  • Kullanıcı veya diğer iletişim kutusu olayları tarafından yapılan eylemleri gösteren WM_NOTIFY bildirim iletileri kümesi.
  • Alt iletişim kutusu şablonu belirterek tanımladığınız ek denetimler için iletiler.

Ayrıca, bilgi almak veya iletişim kutusunun davranışını ve görünümünü denetlemek için Gezgin stili iletişim kutusuna gönderebileceğiniz bir dizi ileti vardır.

Gezgin stili iletişim kutusu için bir kanca yordamı sağlarsanız, varsayılan iletişim kutusu yordamı, varsayılan iletişim kutusu WM_INITDIALOG iletisini işlerken bir alt iletişim kutusu oluşturur. Kanca yordamı, alt iletişim kutusu için iletişim kutusu olarak görev yapar. Şu anda kanca yordamı, iletişim kutusunu başlatmak için kullanılan OPENFILENAME yapısının adresine ayarlanmış lParam parametresiyle kendi WM_INITDIALOG iletisini alır. Alt iletişim kutusu kendi WM_INITDIALOG iletisini işlemeyi tamamladıktan sonra, varsayılan iletişim kutusu gerekirse alt iletişim kutusunun ek denetimlerine yer açmak için standart denetimleri taşır. Varsayılan iletişim kutusu yordamı daha sonra CDN_INITDONE bildirim iletisini kanca yordamına gönderir.

Kanca yordamı, iletişim kutusunda kullanıcı tarafından yapılan eylemleri gösteren WM_NOTIFY bildirim iletileri alır. İletişim kutusunun davranışını denetlemek için bu iletilerden bazılarını kullanabilirsiniz. Örneğin, kullanıcı bir dosya adı seçtiğinde kanca yordamı CDN_FILEOK iletisini alır ve Tamam düğmesine tıklar. Bu iletiye yanıt olarak, kanca yordamı seçilen adı reddetmek ve iletişim kutusunu açık kalmaya zorlamak için SetWindowLongişlevini kullanabilir.

Her WM_NOTIFY iletisi için lParam parametresi, eylemi tanımlayan OFNOTIFY veya OFNOTIFYEX yapısına yönelik bir işaretçidir. Bu yapının üst bilgisindeki kodu üyesi aşağıdaki bildirim iletilerinden birini içerir.

İleti Anlam
CDN_FILEOK Kullanıcı Tamam düğmesine tıkladı; iletişim kutusu kapanmak üzere.
CDN_FOLDERCHANGE Kullanıcı yeni bir klasör veya dizin açtı.
CDN_HELP Kullanıcı Yardım düğmesine tıkladı.
CDN_INCLUDEITEM Bir öğenin görüntülenip görüntülenmeyeceğini belirler. Kullanıcı yeni bir klasör veya dizin açtığında, sistem klasör veya dizindeki her öğe için bu bildirimi gönderir. Sistem bu bildirimi yalnızca OFN_ENABLEINCLUDENOTIFY bayrağı ayarlanmışsa gönderir.
CDN_INITDONE Sistem iletişim kutusunu başlatmayı tamamladı ve iletişim kutusu WM_INITDIALOG iletisini işlemeyi tamamladı. Ayrıca sistem, alt iletişim kutusunun (varsa) denetimlerine yer açmak için ortak iletişim kutusunda denetimleri düzenlemeyi tamamlamıştır.
CDN_SELCHANGE Kullanıcı, dosya listesinden yeni bir dosya veya klasör seçti.
CDN_SHAREVIOLATION Ortak iletişim kutusu, döndürülmek üzere olan dosyada paylaşım ihlaliyle karşılaştı.
CDN_TYPECHANGE Kullanıcı, dosya türleri listesinden yeni bir dosya türü seçti.

 

Bu WM_NOTIFY iletileri, FILEOKSTRING, LBSELCHSTRING, SHAREVISTRINGve HELPMSGSTRINGve Farklı Kaydet iletişim kutularının önceki sürümleri tarafından kullanılan kayıtlı iletilerin yerini alır. Ancak, WM_NOTIFY işleme sıfır olmayan bir DWL_MSGRESULT değeri ayarlamak için SetWindowLongkullanmıyorsa, kanca yordamı WM_NOTIFY iletiden sonra değiştirilen iletiyi de alır.

İletişim kutusunun durumu hakkında bilgi almak veya iletişim kutusunun davranışını ve görünümünü denetlemek için, kanca yordamı iletişim kutusuna aşağıdaki iletileri gönderebilir.

İleti Anlam
CDM_GETFILEPATH Seçili dosyanın yolunu ve dosya adını alır.
CDM_GETFOLDERIDLIST İletişim kutusunun açık olduğu geçerli klasöre karşılık gelen öğe tanımlayıcı listesini alır. Öğe tanımlayıcı listeleri hakkında daha fazla bilgi için bkz. Kabuk Ad Alanına Giriş.
CDM_GETFOLDERPATH İletişim kutusu için geçerli klasörün veya dizinin yolunu alır.
CDM_GETSPEC İletişim kutusunda seçili durumda olan dosyanın adını (yolu dahil değil) alır.
CDM_HIDECONTROL Belirtilen denetimi gizler.
CDM_SETCONTROLTEXT Belirtilen denetimdeki metni ayarlar.
CDM_SETDEFEXT İletişim kutusu için varsayılan dosya adı uzantısını ayarlar.

 

Özel Şablonları Explorer-Style

Gezgin stilindeki bir veya Farklı Kaydet iletişim kutusu için ek denetimler tanımlamak için, OPENFILENAME yapısını kullanarak ek denetimleri içeren bir alt iletişim kutusu için şablon belirtin. Alt iletişim kutusu şablonunuz bir uygulama veya dinamik bağlantı kitaplığındaki bir kaynaksa, Bayraklar üyesinde OFN_ENABLETEMPLATE bayrağını ayarlayın ve modülü ve kaynak adını tanımlamak için hInstance ve lpTemplateName yapı üyelerini kullanın. Şablon zaten bellekteyse, OFN_ENABLETEMPLATEHANDLE bayrağını ayarlayın ve şablonu içeren bellek nesnesini tanımlamak için hInstance üyesini kullanın. Gezgin stili bir iletişim kutusu için alt iletişim kutusu şablonu sağlarken, OFN_EXPLORER bayrağını da ayarlamanız gerekir; aksi takdirde, sistem eski stildeki bir iletişim kutusu için yeni bir şablon sağladığınızı varsayar. Genellikle, ek denetimler sağlarsanız, yeni denetimlerin iletilerini işlemek için Explorer stili bir kanca yordamı da sağlamanız gerekir.

WS_CHILD ve WS_CLIPSIBLINGS stillerini belirtmeniz ve DS_3DLOOK ve DS_CONTROL stillerini belirtmeniz gerekmesi dışında, alt iletişim kutusu şablonunuzu başka herhangi bir şablonda olduğu gibi oluşturabilirsiniz. Şablonunuz varsayılan Aç veya Farklı Kaydet iletişim kutusunun alt iletişim kutusunu tanımladığından sistem WS_CHILD stili gerektirir. WS_CLIPSIBLINGS stili, alt iletişim kutusunun varsayılan iletişim kutusundaki denetimlerin üzerine boyanmamasını sağlar. DS_3DLOOK stili, alt iletişim kutusundaki denetimlerin görünümünün varsayılan iletişim kutusundaki denetimlerle tutarlı olmasını sağlar. DS_CONTROL stili, kullanıcının özelleştirilmiş iletişim kutusundaki varsayılan veya özel tüm denetimler arasında gezinmek için SEKME ve diğer gezinti tuşlarını kullanabilmesini sağlar.

Yeni denetimlere yer açmak için sistem, varsayılan iletişim kutusunu özel iletişim kutusunun genişliğine ve yüksekliğine göre genişletir. Varsayılan olarak, özel iletişim kutusundaki tüm denetimler varsayılan iletişim kutusundaki denetimlerin altına yerleştirilir. Ancak, özel iletişim kutusu şablonunuzda statik bir metin denetimi ekleyerek ve stc32denetim tanımlayıcısı değerini atayarak bu varsayılan konumlandırmayı geçersiz kılabilirsiniz. (Bu değer Dlgs.h üst bilgi dosyasında tanımlanır.) Bu durumda sistem, yeni denetimlerin nereye yerleştirileceğine karar vermek için başvuru noktası olarak denetimi kullanır. stc32 denetiminin üstündeki ve solundaki tüm yeni denetimler, varsayılan iletişim kutusundaki denetimlerin üzerinde ve solunda aynı miktarda konumlandırılır. stc32 denetiminin altında ve sağındaki yeni denetimler, varsayılan denetimlerin altına ve sağındaki konuma yerleştirilir. Genel olarak, her yeni denetim, varsayılan denetimlere göre stc32 denetimine göre aynı konuma sahip olacak şekilde konumlandırılır. Bu yeni denetimlere yer açmak için sistem, gerektiğinde varsayılan iletişim kutusunun soluna, sağ, alt kısmına ve üstüne alan ekler.

Sistem, özel iletişim kutusu için amaçlanan tüm iletileri işlemek için kanca yordamı gerektirir ve bu nedenle kanca yordamına diğer iletişim kutusu yordamlarıyla aynı pencere iletilerini gönderir. Örneğin, kullanıcı özel iletişim kutusundaki düğme denetimlerine tıkladığında kanca yordamı WM_COMMAND iletileri alır. Kanca yordamı, iletişim kutusu kapatıldığında bu denetimleri başlatmaktan ve denetimlerden değerleri almaktan sorumludur. Kanca yordamı WM_INITDIALOG iletisini aldığında sistemin denetimleri henüz son konumlarına taşımadığını unutmayın.

Varsayılan iletişim kutusu yordamı, varsayılan iletişim kutusundaki tüm denetimlerin iletilerini işler, ancak kanca yordamı Explorer-Style Kanca Yordamları'nde açıklandığı gibi bu denetimlerdeki kullanıcı eylemlerine yönelik bildirim iletilerini alır.

Denetim Tanımlayıcılarını Explorer-Style

Windows Yazılım Geliştirme Seti (SDK), eski stil iletişim kutuları için varsayılan iletişim kutusu şablonunu sağlar, ancak Gezgin stili iletişim kutuları için varsayılan şablonu içermez. Bunun nedeni, Gezgin stili iletişim kutularının kendi denetimlerinizi eklemenize olanak sağlamasıdır, ancak standart denetimler için şablonu değiştirmeyi desteklemez. Ancak bazı durumlarda, varsayılan şablonlarda kullanılan denetim tanımlayıcılarını bilmeniz gerekebilir. Örneğin, CDM_HIDECONTROL ve CDM_SETCONTROLTEXT iletileri bir denetim tanımlayıcısı gerektirir.

Aşağıdaki tabloda, Gezgin stilindeki aç ve Farklı Kaydet iletişim kutularında standart denetimlerin tanımlayıcıları gösterilmektedir. Tanımlayıcılar, Dlgs.h ve Winuser.h içinde tanımlanan sabitlerdir.

Denetim tanımlayıcısı Denetim açıklaması
chx1 Salt okunur onay kutusu
cmb1 Dosya türü filtrelerinin listesini görüntüleyen açılan birleşik giriş kutusu
stc2 cmb1 birleşik giriş kutusu etiketi
cmb2 Geçerli sürücüyü veya klasörü görüntüleyen ve kullanıcının açmak üzere bir sürücü veya klasör seçmesine olanak tanıyan açılan birleşik giriş kutusu
stc4 cmb2 birleşik giriş kutusu etiketi
cmb13 Geçerli dosyanın adını görüntüleyen açılan birleşik giriş kutusu, kullanıcının açılacak dosyanın adını yazmasına ve yakın zamanda açılmış veya kaydedilmiş bir dosyayı seçmesine olanak tanır. Bu, kanca veya iletişim kutusu şablonu olmayan önceki Explorer uyumlu uygulamalar içindir. edt1ile karşılaştırın.
edt1 Geçerli dosyanın adını görüntüleyen veya kullanıcının açılacak dosyanın adını yazmasına izin veren denetimi düzenleyin. cmb13ile karşılaştırın.
stc3 cmb13 birleşik giriş kutusu ve edt1 düzenleme denetimi için etiket
lst1 Geçerli sürücü veya klasörün içeriğini görüntüleyen liste kutusu
stc1 lst1 liste kutusu etiketi
IDOK Tamam komut düğmesi (basma düğmesi)
IDCANCEL İptal komut düğmesi (basma düğmesi)
pshHelp Yardım komut düğmesi (basma düğmesi)

 

Old-Style İletişim Kutularını Özelleştirme

Varsayılan iletişim kutusu yordamına yönelik iletileri veya bildirimleri alan OFNHookProcOldStyle kanca yordamı sağlayarak, eski stildeki bir veya Farklı Kaydet iletişim kutusunu özelleştirebilirsiniz. Varsayılan şablon yerine kullanmak üzere özel bir şablon da sağlayabilirsiniz. Eski stil iletişim kutularıyla kullanılan kanca yordamları ve şablonları, diğer ortak iletişim kutularında kullanılanlara benzer. Daha fazla bilgi için bkz. Kanca Yordamları ve Özel Şablonlar.

Aç veya Farklı Kaydet eski stildeki bir kanca yordamını etkinleştirmek için, iletişim kutusunu oluştururken OPENFILENAMEyapısınıkullanın. Bayrakları üyesinde OFN_ENABLEHOOK bayrağını ayarlayın ve OFNHookProcOldStyle kanca yordamının adresini lpfnHook üyesinde belirtin. İletişim kutusu yordamı, Param parametresi iletişim kutusunu başlatmak için kullanılan OPENFILENAME yapısının adresine ayarlanmış bir WM_INITDIALOG iletisi gönderir.

OPENFILENAME yapısını kullanarak veya Varsayılan şablon yerine kullanılacak Farklı Kaydet iletişim kutusu için özel bir şablon belirtebilirsiniz. Özel şablonunuz bir uygulama veya dinamik bağlantı kitaplığındaki bir kaynaksa, Bayraklar üyesinde OFN_ENABLETEMPLATE bayrağını ayarlayın ve modülü ve kaynak adını tanımlamak için hInstance ve lpTemplateName yapı üyelerini kullanın. Özel şablonunuz zaten bellekteyse, OFN_ENABLETEMPLATEHANDLE bayrağını ayarlayın ve şablonu içeren bellek nesnesini tanımlamak için hInstance üyesini kullanın. Fileopen.dlg dosyasında belirtilen varsayılan şablonu değiştirerek özel şablonu oluşturun. Varsayılan Bul ve Değiştir iletişim kutusu şablonlarında kullanılan denetim tanımlayıcıları Dlgs.h dosyasında tanımlanır.

Varsayılan olarak, GetOpenFileNameve GetSaveFileName işlevleriGezgin stili iletişim kutularını görüntüler. Eski stilde bir iletişim kutusu görüntülemek istiyorsanız, BIR OFNHookProcOldStyle kanca yordamı sağlamanız ve OFN_EXPLORER bayrağının OPENFILENAME yapısının Bayraklar üyesinde ayarlanmadığından emin olmanız gerekir.

OFN_EXPLORER bayrağını ayarlarsanız, sistem bir kanca yordamını veya özel şablonu Gezgin stili özelleştirme olarak ele alır. Gezgin stili bir iletişim kutusunu özelleştirme hakkında bilgi için bkz. Explorer-Style Özel Şablonlar.

Ayrıca bkz.