CDialog Sınıfı
Ekranda iletişim kutularını görüntülemek için kullanılan temel sınıf.
Sözdizimi
class CDialog : public CWnd
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CDialog::CDialog | Bir CDialog nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CDialog::Create | Nesnesini başlatır CDialog . Modsuz bir iletişim kutusu oluşturur ve bunu nesneye CDialog ekler. |
CDialog::CreateIndirect | Bellekteki bir iletişim kutusu şablonundan (kaynak tabanlı değil) modsuz bir iletişim kutusu oluşturur. |
CDialog::D oModal | Kalıcı bir iletişim kutusunu çağırır ve bittiğinde döndürür. |
CDialog::EndDialog | Kalıcı iletişim kutusunu kapatır. |
CDialog::GetDefID | İletişim kutusu için varsayılan basma düğmesi denetiminin kimliğini alır. |
CDialog::GotoDlgCtrl | Odağı iletişim kutusunda belirtilen bir iletişim kutusu denetimine taşır. |
CDialog::InitModalIndirect | Bellekteki bir iletişim kutusu şablonundan kalıcı bir iletişim kutusu oluşturur (kaynak tabanlı değil). İşlev çağrılana DoModal kadar parametreler depolanır. |
CDialog::MapDialogRect | Dikdörtgenin iletişim kutusu birimlerini ekran birimlerine dönüştürür. |
CDialog::NextDlgCtrl | Odağı iletişim kutusundaki sonraki iletişim kutusu denetimine taşır. |
CDialog::OnInitDialog | İletişim kutusu başlatmayı artırmak için geçersiz kıl. |
CDialog::OnSetFont | Bir iletişim kutusu denetiminin metin çizerken kullanacağını yazı tipini belirtmek için geçersiz kılın. |
CDialog::P revDlgCtrl | Odağı iletişim kutusundaki önceki iletişim kutusu denetimine taşır. |
CDialog::SetDefID | İletişim kutusunun varsayılan basma düğmesi denetimini belirtilen bir düğmeyle değiştirir. |
CDialog::SetHelpID | İletişim kutusu için bağlama duyarlı bir yardım kimliği ayarlar. |
Korumalı Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CDialog::OnCancel | İptal düğmesini veya ESC tuşu eylemini gerçekleştirmek için geçersiz kılın. Varsayılan, iletişim kutusunu kapatır ve DoModal IDCANCEL döndürür. |
CDialog::OnOK | Kalıcı iletişim kutusunda Tamam düğmesi eylemini gerçekleştirmek için geçersiz kılın. Varsayılan, iletişim kutusunu kapatır ve DoModal IDOK döndürür. |
Açıklamalar
İletişim kutuları iki türdedir: kalıcı ve modsuz. Uygulama devam etmeden önce kalıcı bir iletişim kutusunun kullanıcı tarafından kapatılması gerekir. Modsuz iletişim kutusu, kullanıcının iletişim kutusunu iptal etmeden veya kaldırmadan iletişim kutusunu görüntülemesine ve başka bir göreve geri dönmesine olanak tanır.
CDialog
Nesne, bir iletişim kutusu şablonu ile türetilmiş bir sınıfın birleşimidirCDialog
. İletişim kutusu şablonunu oluşturmak ve bir kaynakta depolamak için iletişim kutusu düzenleyicisini kullanın, ardından öğesinden türetilen bir sınıf oluşturmak için Sınıf Ekle sihirbazını CDialog
kullanın.
Diğer pencerelerde olduğu gibi bir iletişim kutusu da Windows'tan ileti alır. Bir iletişim kutusunda, özellikle iletişim kutusunun denetimlerinden gelen bildirim iletilerini işlemekle ilgilenirsiniz çünkü kullanıcı iletişim kutunuzla bu şekilde etkileşim kurar. Hangi iletileri işlemek istediğinizi seçmek için Sınıf Sihirbazı'nı kullanın; sizin için sınıfa uygun ileti eşleme girdilerini ve ileti işleyicisi üye işlevlerini ekler. Yalnızca işleyici üye işlevlerinde uygulamaya özgü kod yazmanız gerekir.
İsterseniz, her zaman ileti eşlemesi girdilerini ve üye işlevlerini el ile yazabilirsiniz.
En önemsiz iletişim kutusunda, kullanıcı tarafından iletişim kutusunun denetimlerine girilen verileri depolamak veya kullanıcının verilerini görüntülemek için türetilmiş iletişim kutusu sınıfınıza üye değişkenleri eklersiniz. Üye değişkenleri oluşturmak ve bunları denetimlerle ilişkilendirmek için Değişken Ekle sihirbazını kullanabilirsiniz. Aynı zamanda, her değişken için bir değişken türü ve izin verilen değer aralığı seçersiniz. Kod sihirbazı, üye değişkenlerini türetilmiş iletişim kutusu sınıfınıza ekler.
Üye değişkenleri ve iletişim kutusunun denetimleri arasındaki veri alışverişini otomatik olarak işlemek için bir veri eşlemesi oluşturulur. Veri eşlemesi, iletişim kutusundaki denetimleri uygun değerlerle başlatan, verileri alan ve verileri doğrulayan işlevler sağlar.
Kalıcı iletişim kutusu oluşturmak için, türetilmiş iletişim kutusu sınıfınızın oluşturucusunu kullanarak yığında bir nesne oluşturun ve ardından iletişim kutusu penceresini ve denetimlerini oluşturmak için çağrısı DoModal
yapın. Modsuz bir iletişim kutusu oluşturmak istiyorsanız, iletişim kutusu sınıfınızın oluşturucusunda öğesini çağırın Create
.
Ayrıca, Windows SDK'da açıklandığı gibi bir DLGTEMPLATE veri yapısı kullanarak bellekte bir şablon da oluşturabilirsiniz. Nesne CDialog
oluşturduktan sonra, model bir iletişim kutusu oluşturmak için CreateIndirect'i veya kalıcı bir iletişim kutusu oluşturmak için InitModalIndirect ve DoModal'ı çağırın.
Değişim ve doğrulama veri eşlemesi, yeni iletişim kutusu sınıfınıza eklenen bir geçersiz kılmayla CWnd::DoDataExchange
yazılır. Değişim ve doğrulama işlevselliği hakkında daha fazla bilgi için içindeki DoDataExchange üye işlevine CWnd
bakın.
Hem programcı hem de çerçeve, CWnd::UpdateData çağrısı aracılığıyla dolaylı olarak çağrır DoDataExchange
.
Kullanıcı bir kalıcı iletişim kutusunu kapatmak için Tamam düğmesine tıkladığında çerçeve çağrılır UpdateData
. (İptal düğmesine tıklandığında veriler alınmaz.) OnInitDialog'un varsayılan uygulaması, denetimlerin ilk değerlerini ayarlamak için de çağrı UpdateData
yapar. Denetimleri daha fazla başlatmak için genellikle geçersiz kılarsınız OnInitDialog
. OnInitDialog
, tüm iletişim kutusu denetimleri oluşturulduktan sonra ve iletişim kutusu görüntülenmeden hemen önce çağrılır.
Kalıcı veya modsuz iletişim kutusunun yürütülmesi sırasında istediğiniz zaman arayabilirsiniz CWnd::UpdateData
.
El ile bir iletişim kutusu geliştirirseniz, türetilmiş iletişim kutusu sınıfına gerekli üye değişkenlerini kendiniz eklersiniz ve bu değerleri ayarlamak veya almak için üye işlevleri eklersiniz.
Kullanıcı Tamam veya İptal düğmelerine bastığında veya kodunuz üye işlevini çağırdığında EndDialog
kalıcı bir iletişim kutusu otomatik olarak kapanır.
Modsuz bir iletişim kutusu uyguladığınızda, her zaman üye işlevini geçersiz kılın OnCancel
ve içinden çağrısı DestroyWindow
yapın. temel sınıfını CDialog::OnCancel
çağırmayın, çünkü iletişim kutusunu görünmez hale getirecek ancak yok etmeyeceği için öğesini çağırır EndDialog
. Modeless iletişim kutuları genellikle ile new
ayrıldığından, öğesini silmek this
için modeless iletişim kutularını da geçersiz kılmalısınızPostNcDestroy
. Kalıcı iletişim kutuları genellikle çerçeve üzerinde oluşturulur ve temizlemeye gerek PostNcDestroy
yoktur.
hakkında CDialog
daha fazla bilgi için bkz. İletişim Kutuları.
Devralma Hiyerarşisi
CDialog
Gereksinimler
Üst bilgi: afxwin.h
CDialog::CDialog
Kaynak tabanlı kalıcı bir iletişim kutusu oluşturmak için oluşturucunun ortak biçimlerinden birini çağırın.
explicit CDialog(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
explicit CDialog(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
CDialog();
Parametreler
lpszTemplateName
bir iletişim kutusu şablon kaynağının adı olan null olarak sonlandırılan bir dize içerir.
nIDTemplate
İletişim kutusu şablonu kaynağının kimlik numarasını içerir.
pParentWnd
İletişim kutusu nesnesinin ait olduğu üst veya sahip pencere nesnesine (CWnd türünde) işaret eder. NULL ise, iletişim kutusu nesnesinin üst penceresi ana uygulama penceresine ayarlanır.
Açıklamalar
Oluşturucunun bir biçimi, şablon adına göre iletişim kutusu kaynağına erişim sağlar. Diğer oluşturucu genellikle IDD_ ön ekiyle (örneğin, IDD_DIALOG1 ) şablon kimlik numarasına göre erişim sağlar.
Bellekteki bir şablondan kalıcı bir iletişim kutusu oluşturmak için, önce parametresiz, korumalı oluşturucuyu çağırın ve ardından öğesini çağırın InitModalIndirect
.
Yukarıdaki yöntemlerden biriyle kalıcı bir iletişim kutusu oluşturdıktan sonra çağrısı yapın DoModal
.
Modsuz bir iletişim kutusu oluşturmak için oluşturucunun korumalı biçimini CDialog
kullanın. Oluşturucu korunur çünkü modsuz bir iletişim kutusu uygulamak için kendi iletişim kutusu sınıfınızı türetmelisiniz. Modsuz iletişim kutusunun oluşturulması iki adımlı bir işlemdir. Önce oluşturucuyu çağırın; ardından üye işlevini çağırarak Create
kaynak tabanlı bir iletişim kutusu oluşturun veya bellekteki bir şablondan iletişim kutusu oluşturmak için öğesini çağırın CreateIndirect
.
CDialog::Create
Kaynaktan bir iletişim kutusu şablonu kullanarak modsuz iletişim kutusu oluşturmak için çağrısı Create
yapın.
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
virtual BOOL Create(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
Parametreler
lpszTemplateName
bir iletişim kutusu şablon kaynağının adı olan null olarak sonlandırılan bir dize içerir.
pParentWnd
İletişim kutusu nesnesinin ait olduğu üst pencere nesnesine (CWnd türünde) işaret eder. NULL ise, iletişim kutusu nesnesinin üst penceresi ana uygulama penceresine ayarlanır.
nIDTemplate
İletişim kutusu şablonu kaynağının kimlik numarasını içerir.
Dönüş Değeri
İletişim kutusu oluşturma ve başlatma başarılı olursa her iki form da sıfırdan farklı döndürür; aksi takdirde 0.
Açıklamalar
çağrısı oluşturucunun Create
içine yerleştirebilir veya oluşturucu çağrıldıktan sonra çağırabilirsiniz.
İletişim kutusu şablonu kaynağına erişmek için şablon adı veya şablon kimliği numarasıyla (örneğin, IDD_DIALOG1) üye işlevinin iki biçimi Create
sağlanır.
Her iki form için de üst pencere nesnesine bir işaretçi geçirin. pParentWnd NULL ise, iletişim kutusu ana uygulama penceresine ayarlanmış üst veya sahip penceresiyle oluşturulur.
Create
Üye işlevi, iletişim kutusunu oluşturduğundan hemen sonra döndürür.
Üst pencere oluşturulduğunda iletişim kutusunun görünmesi gerekiyorsa, iletişim kutusu şablonundaki WS_VISIBLE stilini kullanın. Aksi takdirde, öğesini çağırmalısınız ShowWindow
. Diğer iletişim kutusu stilleri ve uygulamaları için Windows SDK'sında DLGTEMPLATE yapısına ve MFC Başvurusu'nda Pencere Stilleri'ne bakın.
CWnd::DestroyWindow
İşlev tarafından Create
oluşturulan bir iletişim kutusunu yok etmek için işlevini kullanın.
Örnek
void CMyDialog::OnMenuShowSimpleDialog()
{
//m_pSimpleDialog initialized to NULL in the constructor of CMyDialog class
m_pSimpleDlg = new CSimpleDlg();
//Check if new succeeded and we got a valid pointer to a dialog object
if (m_pSimpleDlg != NULL)
{
BOOL ret = m_pSimpleDlg->Create(IDD_SIMPLEDIALOG, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pSimpleDlg->ShowWindow(SW_SHOW);
}
else
{
AfxMessageBox(_T("Error Creating Dialog Object"));
}
}
CDialog::CreateIndirect
Bellekteki bir iletişim kutusu şablonundan modsuz bir iletişim kutusu oluşturmak için bu üye işlevini çağır.
virtual BOOL CreateIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
virtual BOOL CreateIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
Parametreler
lpDialogTemplate
İletişim kutusunu oluşturmak için kullanılan bir iletişim kutusu şablonu içeren belleğe işaret edin. Bu şablon, Windows SDK'da açıklandığı gibi DLGTEMPLATE yapısı ve denetim bilgileri biçimindedir.
pParentWnd
İletişim kutusu nesnesinin üst pencere nesnesini (CWnd türünde ) gösterir. NULL ise, iletişim kutusu nesnesinin üst penceresi ana uygulama penceresine ayarlanır.
lpDialogInit
DLGINIT kaynağını gösterir.
hDialogTemplate
İletişim kutusu şablonu içeren genel belleğe yönelik bir tanıtıcı içerir. Bu şablon, iletişim kutusundaki her denetim için bir DLGTEMPLATE
yapı ve veri biçimindedir.
Dönüş Değeri
İletişim kutusu başarıyla oluşturulduysa ve başlatıldıysa sıfır olmayan; aksi takdirde 0.
Açıklamalar
CreateIndirect
Üye işlevi, iletişim kutusunu oluşturduğundan hemen sonra döndürür.
Üst pencere oluşturulduğunda iletişim kutusunun görünmesi gerekiyorsa, iletişim kutusu şablonundaki WS_VISIBLE stilini kullanın. Aksi takdirde, görünmesine neden olmak için aramanız ShowWindow
gerekir. Şablonda diğer iletişim kutusu stillerini nasıl belirtebileceğiniz hakkında daha fazla bilgi için bkz . Windows SDK'sında DLGTEMPLATE yapısı.
CWnd::DestroyWindow
İşlev tarafından CreateIndirect
oluşturulan bir iletişim kutusunu yok etmek için işlevini kullanın.
ActiveX denetimleri içeren iletişim kutuları, DLGINIT kaynağında ek bilgi sağlanmasını gerektirir.
CDialog::D oModal
Kalıcı iletişim kutusunu çağırmak ve bittiğinde iletişim kutusu sonucunu döndürmek için bu üye işlevini çağırın.
virtual INT_PTR DoModal();
Dönüş Değeri
int
İletişim kutusunu kapatmak için kullanılan CDialog::EndDialog üye işlevine geçirilen nResult parametresinin değerini belirten değer. İşlev iletişim kutusunu oluşturamadıysa -1, başka bir hata oluştuysa IDABORT, bu durumda çıkış penceresi GetLastError hata bilgilerini içerir.
Açıklamalar
bu üye işlevi, iletişim kutusu etkinken kullanıcıyla tüm etkileşimi işler. İletişim kutusunu kalıcı yapan budur; diğer bir deyişle, iletişim kutusu kapatılana kadar kullanıcı diğer pencerelerle etkileşim kuramaz.
Kullanıcı, iletişim kutusundaki Tamam veya İptal gibi düğmelerden birine tıklarsa, iletişim kutusunu kapatmaya çalışmak için OnOK veya OnCancel gibi bir ileti işleyicisi üye işlevi çağrılır. Varsayılan OnOK
üye işlevi, iletişim kutusu verilerini doğrular ve güncelleştirir ve sonuç IDOK'si ile iletişim kutusunu kapatır ve varsayılan OnCancel
üye işlevi, iletişim kutusu verilerini doğrulamadan veya güncelleştirmeden sonuç IDCANCEL'i içeren iletişim kutusunu kapatır. Davranışlarını değiştirmek için bu ileti işleyici işlevlerini geçersiz kılabilirsiniz.
Not
PreTranslateMessage
artık kalıcı iletişim kutusu ileti işleme için çağrılır.
Örnek
void CMyDialog::OnMenuShowAboutDialog()
{
// Construct the dialog box passing the
// ID of the dialog template resource
CDialog aboutDlg(IDD_ABOUTBOX);
// Create and show the dialog box
INT_PTR nRet = -1;
nRet = aboutDlg.DoModal();
// Handle the return value from DoModal
switch (nRet)
{
case -1:
AfxMessageBox(_T("Dialog box could not be created!"));
break;
case IDABORT:
// Do something
break;
case IDOK:
// Do something
break;
case IDCANCEL:
// Do something
break;
default:
// Do something
break;
};
}
CDialog::EndDialog
Kalıcı bir iletişim kutusunu sonlandırmak için bu üye işlevini çağır.
void EndDialog(int nResult);
Parametreler
nResult
İletişim kutusundan çağırana DoModal
döndürülecek değeri içerir.
Açıklamalar
Bu üye işlevi, dönüş değeri DoModal
olarak nResult döndürür. Kalıcı bir iletişim kutusu oluşturulduğunda işlemeyi EndDialog
tamamlamak için işlevini kullanmanız gerekir.
OnInitDialog'da bile istediğiniz zaman çağrı EndDialog
yapabilirsiniz. Bu durumda, iletişim kutusunu gösterilmeden veya giriş odağı ayarlanmadan önce kapatmanız gerekir.
EndDialog
iletişim kutusunu hemen kapatmaz. Bunun yerine, geçerli ileti işleyicisi döner dönmez iletişim kutusunu kapanmaya yönlendiren bir bayrak ayarlar.
Örnek
void CMyDialog::OnMenuShowSimpleModal()
{
CSimpleDlg myDlg;
INT_PTR nRet = myDlg.DoModal();
if (nRet == IDOK || nRet == 5)
{
AfxMessageBox(_T("Dialog closed successfully"));
}
}
void CSimpleDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
// Do something
int nRet = point.x; // Just any value would do!
EndDialog(nRet); // This value is returned by DoModal!
// Do something
return; // Dialog closed and DoModal returns only here!
}
CDialog::GetDefID
GetDefID
Bir iletişim kutusunun varsayılan basma düğmesi denetiminin kimliğini almak için üye işlevini çağırın.
DWORD GetDefID() const;
Dönüş Değeri
32 bit değer ( DWORD
). Varsayılan basma düğmesinin kimlik değeri varsa, yüksek sıralı sözcük DC_HASDEFID ve düşük sıralı sözcük kimlik değerini içerir. Varsayılan basma düğmesinin kimlik değeri yoksa, dönüş değeri 0'dır.
Açıklamalar
Bu genellikle Tamam düğmesidir.
CDialog::GotoDlgCtrl
Odağı iletişim kutusunda belirtilen denetime taşır.
void GotoDlgCtrl(CWnd* pWndCtrl);
Parametreler
pWndCtrl
Odağı alacak pencereyi (denetimi) tanımlar.
Açıklamalar
pWndCtrl olarak geçirmek üzere denetime (alt pencere) bir işaretçi almak için, bir CWnd nesnesine işaretçi döndüren üye işlevini çağırınCWnd::GetDlgItem
.
Örnek
CWnd::GetDlgItem örneğine bakın.
CDialog::InitModalIndirect
Bellekte oluşturduğunuz bir iletişim kutusu şablonu kullanarak kalıcı bir iletişim kutusu nesnesi başlatmak için bu üye işlevini çağırabilirsiniz.
BOOL InitModalIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL InitModalIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
Parametreler
lpDialogTemplate
İletişim kutusunu oluşturmak için kullanılan bir iletişim kutusu şablonu içeren belleğe işaret edin. Bu şablon, Windows SDK'da açıklandığı gibi DLGTEMPLATE yapısı ve denetim bilgileri biçimindedir.
hDialogTemplate
İletişim kutusu şablonu içeren genel belleğe yönelik bir tanıtıcı içerir. Bu şablon, iletişim kutusundaki her denetim için bir DLGTEMPLATE
yapı ve veri biçimindedir.
pParentWnd
İletişim kutusu nesnesinin ait olduğu üst veya sahip pencere nesnesine (CWnd türünde) işaret eder. NULL ise, iletişim kutusu nesnesinin üst penceresi ana uygulama penceresine ayarlanır.
lpDialogInit
DLGINIT kaynağını gösterir.
Dönüş Değeri
İletişim kutusu nesnesi başarıyla oluşturulduysa ve başlatıldıysa sıfır olmayan; aksi takdirde 0.
Açıklamalar
Dolaylı olarak kalıcı bir iletişim kutusu oluşturmak için, önce genel bir bellek bloğu ayırın ve bunu iletişim kutusu şablonuyla doldurun. Ardından, iletişim kutusu nesnesini oluşturmak için boş CDialog
oluşturucuyu çağırın. Ardından, tanıtıcınızı bellek içi iletişim kutusu şablonuna depolamak için çağrısı InitModalIndirect
yapın. DoModal üye işlevi çağrıldığında Windows iletişim kutusu oluşturulur ve daha sonra görüntülenir.
ActiveX denetimleri içeren iletişim kutuları, DLGINIT kaynağında ek bilgi sağlanmasını gerektirir.
CDialog::MapDialogRect
Bir dikdörtgenin iletişim kutusu birimlerini ekran birimlerine dönüştürmek için çağrısı yapın.
void MapDialogRect(LPRECT lpRect) const;
Parametreler
lpRect
Dönüştürülecek iletişim kutusu koordinatlarını içeren bir RECT yapısına veya CRect nesnesine işaret eder.
Açıklamalar
İletişim kutusu birimleri, iletişim kutusu metni için kullanılan yazı tipindeki karakterlerin ortalama genişliği ve yüksekliğinden türetilen geçerli iletişim kutusu temel birimi açısından belirtilir. Yatay birimlerden biri iletişim kutusu taban genişlik biriminin dörtte biri, dikey birim ise iletişim kutusu taban yükseklik biriminin sekizde biridir.
GetDialogBaseUnits
Windows işlevi sistem yazı tipi için boyut bilgilerini döndürür, ancak kaynak tanımı dosyasında DS_SETFONT stilini kullanırsanız her iletişim kutusu için farklı bir yazı tipi belirtebilirsiniz. MapDialogRect
Windows işlevi bu iletişim kutusu için uygun yazı tipini kullanır.
MapDialogRect
Üye işlevi, lpRect içindeki iletişim kutusu birimlerini ekran birimleriyle (piksel) değiştirir, böylece dikdörtgen bir iletişim kutusu oluşturmak veya bir denetimi bir kutunun içine yerleştirmek için kullanılabilir.
CDialog::NextDlgCtrl
Odağı iletişim kutusunda bir sonraki denetime taşır.
void NextDlgCtrl() const;
Açıklamalar
Odak iletişim kutusundaki son denetimdeyse, ilk denetime geçer.
CDialog::OnCancel
Kullanıcı İptal'e tıkladığında veya kalıcı veya modsuz iletişim kutusunda ESC tuşuna bastığında çerçeve bu yöntemi çağırır.
virtual void OnCancel();
Açıklamalar
Kullanıcı İptal'e tıklayarak veya ESC tuşuna basarak iletişim kutusunu kapattığında eylemleri (eski verileri geri yükleme gibi) gerçekleştirmek için bu yöntemi geçersiz kılın. Varsayılan olarak EndDialog çağrısı yaparak ve DoModal'ın IDCANCEL döndürmesine neden olarak kalıcı bir iletişim kutusu kapatılır.
modeless iletişim kutusunda İptal düğmesini uygularsanız, yöntemini geçersiz kılmanız OnCancel
ve içinde DestroyWindow'u çağırmanız gerekir. base-class yöntemini çağırmayın, çünkü iletişim kutusunu görünmez hale getirecek ancak yok etmeyeceği için öğesini çağırır EndDialog
.
Not
Windows XP altında derlenmiş bir programda nesne CFileDialog
kullandığınızda bu yöntemi geçersiz kılamazsınız. hakkında CFileDialog
daha fazla bilgi için bkz . CFileDialog Sınıfı.
Örnek
void CSimpleDlg::OnCancel()
{
// TODO: Add extra cleanup here
// Ensure that you reset all the values back to the
// ones before modification. This handler is called
// when the user doesn't want to save the changes.
if (AfxMessageBox(_T("Are you sure you want to abort the changes?"),
MB_YESNO) == IDNO)
{
// Give the user a chance if he has unknowingly hit the
// Cancel button. If he says No, return. Don't reset. If
// Yes, go ahead and reset the values and close the dialog.
return;
}
m_nMyValue = m_nPrevValue;
m_pMyString = NULL;
CDialog::OnCancel();
}
CDialog::OnInitDialog
Bu yöntem, iletiye yanıt olarak çağrılır WM_INITDIALOG
.
virtual BOOL OnInitDialog();
Dönüş Değeri
Uygulamanın giriş odağını iletişim kutusundaki denetimlerden birine ayarlayıp ayarlamadığını belirtir. Sıfır olmayan bir değer döndürürse OnInitDialog
, Windows giriş odağını iletişim kutusundaki ilk denetim olan varsayılan konuma ayarlar. Uygulama yalnızca giriş odağını iletişim kutusundaki denetimlerden birine açıkça ayarlamışsa 0 döndürebilir.
Açıklamalar
Windows, iletişim kutusu görüntülenmeden hemen önce gerçekleşen Create, CreateIndirect veya DoModal çağrıları sırasında iletiyi iletişim kutusuna gönderir WM_INITDIALOG
.
İletişim kutusu başlatıldığında özel işlem gerçekleştirmek istiyorsanız bu yöntemi geçersiz kılın. Geçersiz kılınan sürümde, önce temel sınıfı OnInitDialog
çağırın, ancak dönüş değerini yoksayın. Genellikle geçersiz kılınan yönteminizden dönersiniz TRUE
.
Windows, tüm Microsoft Foundation Sınıf Kitaplığı iletişim kutularında ortak olan standart genel iletişim kutusu yordamını kullanarak işlevi çağırır OnInitDialog
. bu işlevi ileti eşlemeniz aracılığıyla çağırmaz ve bu nedenle bu yöntem için bir ileti eşlemesi girdisine ihtiyacınız yoktur.
Not
Windows Vista veya sonraki işletim sistemleri altında derlenmiş bir programda nesne kullandığınızda CFileDialog
bu yöntemi geçersiz kılamazsınız. Windows Vista ve sonraki sürümlerde CFileDialog
yapılan değişiklikler hakkında daha fazla bilgi için bkz . CFileDialog Sınıfı.
Örnek
BOOL CSimpleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_cMyEdit.SetWindowText(_T("My Name")); // Initialize control values
m_cMyList.ShowWindow(SW_HIDE); // Show or hide a control, etc.
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
CDialog::OnOK
Kullanıcı Tamam düğmesine (IDOK kimliğine sahip düğme) tıkladığında çağrılır.
virtual void OnOK();
Açıklamalar
Tamam düğmesi etkinleştirildiğinde eylemleri gerçekleştirmek için bu yöntemi geçersiz kılın. İletişim kutusu otomatik veri doğrulama ve değişim içeriyorsa, bu yöntemin varsayılan uygulaması iletişim kutusu verilerini doğrular ve uygulamanızdaki uygun değişkenleri güncelleştirir.
Tamam düğmesini modsuz bir iletişim kutusunda uygularsanız, yöntemini geçersiz kılmanız OnOK
ve içinde DestroyWindow'u çağırmanız gerekir. İletişim kutusunu görünmez yapan ancak yok etmez EndDialog çağırdığı için base-class yöntemini çağırmayın.
Not
Windows XP altında derlenmiş bir programda nesne CFileDialog
kullandığınızda bu yöntemi geçersiz kılamazsınız. hakkında CFileDialog
daha fazla bilgi için bkz . CFileDialog Sınıfı.
Örnek
void CSimpleDlg::OnOK()
{
// TODO: Add extra validation here
// Ensure that your UI got the necessary input
// from the user before closing the dialog. The
// default OnOK will close this.
if (m_nMyValue == 0) // Is a particular field still empty?
{
// Inform the user that he can't close the dialog without
// entering the necessary values and don't close the
// dialog.
AfxMessageBox(_T("Please enter a value for MyValue"));
return;
}
CDialog::OnOK(); // This will close the dialog and DoModal will return.
}
CDialog::OnSetFont
Metin çizerken bir iletişim kutusu denetiminin kullanacağı yazı tipini belirtir.
Virtual void OnSetFont(CFont* pFont);
Parametreler
pFont
[in] Bu iletişim kutusundaki tüm denetimler için varsayılan yazı tipi olarak kullanılacak yazı tipi işaretçisini belirtir.
Açıklamalar
İletişim kutusu, tüm denetimleri için varsayılan olarak belirtilen yazı tipini kullanır.
İletişim kutusu düzenleyicisi genellikle iletişim kutusu şablon kaynağının bir parçası olarak iletişim kutusu yazı tipini ayarlar.
Not
Windows Vista veya sonraki işletim sistemleri altında derlenmiş bir programda nesne kullandığınızda CFileDialog
bu yöntemi geçersiz kılamazsınız. Windows Vista ve sonraki sürümlerde CFileDialog
yapılan değişiklikler hakkında daha fazla bilgi için bkz . CFileDialog Sınıfı.
CDialog::P revDlgCtrl
Odağı iletişim kutusundaki önceki denetime ayarlar.
void PrevDlgCtrl() const;
Açıklamalar
Odak iletişim kutusundaki ilk denetimdeyse, kutudaki son denetime geçer.
CDialog::SetDefID
İletişim kutusunun varsayılan basma düğmesi denetimini değiştirir.
void SetDefID(UINT nID);
Parametreler
Nıd
Varsayılan olacak düğme denetiminin kimliğini belirtir.
CDialog::SetHelpID
İletişim kutusu için bağlama duyarlı bir yardım kimliği ayarlar.
void SetHelpID(UINT nIDR);
Parametreler
nIDR
Bağlama duyarlı yardım kimliğini belirtir.
Ayrıca bkz.
MFC Örnek DLGCBR32
MFC Örneği DLGTEMPL
CWnd Sınıfı
Hiyerarşi Grafiği