Bir pencere uygulamak için CWindowImplbir sınıf türetmek. Türetilmiş sınıf, bir iletiyi göster ve ileti işleyicisi işlevleri bildirir. Şimdi üç farklı yolla sınıf kullanabilirsiniz:
Yeni bir Windows sınıf tabanlı bir pencere oluşturma
CWindowImpl , Windows sınıfı bilgileri bildirmeniz declare_wnd_class makro içerir. Bu makro, yeni bir Windows sınıfı bilgileri tanımlamak için CWndClassInfo kullanır GetWndClassInfo işlevini uygular. CWindowImpl::Create çağrıldığında, bu Windows sınıfı kaydedilir ve yeni bir pencere oluşturulur.
&Notnbsp;CWindowImpl boş declare_wnd_class makro üzerinde atl-ecek oluşturmak Windows sınıf adı anlamına gelir geçer. Kendi adı belirtmek için bir dize içinde senin CWindowImpl declare_wnd_class geçmek-türetilmiş sınıf.
Yeni bir Windows sınıf tabanlı bir pencere uygulayan bir sınıfın örneğini aşağıda verilmiştir:
cMyWindow sınıfı: Genel CWindowImpllt;CMyWindow >,...
{
public:
/ / İsteğe bağlı olarak yeni Windows sınıf adını belirtin
DECLARE_WND_CLASS("MyName") / / Bu makro içinde belirtilmezse,
/ / sınıf, atl bir sınıf adı üretecektir
...
BEGIN_MSG_MAP(CMyWindow)
message_handler (WM_PAINT, OnPaint)
END_MSG_MAP()
lresult OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Yapmak bazı resim kodu
return 0;
}
}
Bir pencere oluşturmak için örneği oluşturma CMyWindow ve Create yöntemini çağırmak.
&Notnbsp; Varsayılan Windows sınıfı bilgileri geçersiz kılmak için GetWndClassInfo yöntemi, türetilmiş bir sınıf içinde CWndClassInfo üyeleri için uygun değerleri ayarlayarak uygulamak.
Superclassing varolan bir Windows sınıfı
declare_wnd_superclass makrosu, superclass varolan bir Windows pencere oluşturmanıza olanak sağlar sınıfı. Bu makro, CWindowImpliçinde belirtin-türetilmiş sınıf. Diğer atl pencere gibi iletileri bir ileti harita ile işlenir.
declare_wnd_superclasskullandığınızda, yeni bir Windows sınıf kayıt olacaksınız. Bu yeni sınıfı belirtin, ancak pencere yordamı ile CWindowImpl::WindowProc (veya bu yöntemi geçersiz kılan işlevinizin) yerini alacak varolan bir sınıfı ile aynı olacaktır.
Aşağıdaki bu superclass standart düzen bir sınıf örneğidir sınıfı:
cMyEdit sınıfı: Genel CWindowImpllt;CMyEdit >,...
{
public:
/ / "Düzenleme" standart Windows sınıfı adı.
/ / "MyEdit" yeni Windows sınıfın adı
/ / Edit sınıfına dayalı.
declare_wnd_superclass ("Düzenle", "MyEdit")
...
BEGIN_MSG_MAP(CMyEdit)
message_handler (wm_char, OnChar)
END_MSG_MAP()
lresult OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / İşleme kodu bazı karakter yapmak
}
}
Superclassed düzenleme pencere oluşturmak için örneği oluşturma CMyEdit ve Create yöntemini çağırmak.
Superclassing hakkında daha fazla bilgi için bkz: Pencere yordamı Superclassing Win32 sdk.
Alt sınıfı varolan penceresini, CWindowImpl bir sınıf türetmek ve iki önceki durumlarda olarak bir ileti göster bildirmek. Ancak, alt sınıf zaten var olan bir pencere olacaktır çünkü, Windows sınıfı bilgileri belirtmezseniz unutmayın.
Createarama, yerine SubclassWindow arayın ve alt sınıfına istediğiniz varolan penceresine ele geçmek. Pencerenin alt sınıfı sonra o CWindowImpl::WindowProc (ya da bu yöntemi geçersiz kılan işlevinizin) doğrudan iletileri için ileti göster kullanır. Nesne subclassed bir pencereden ayırmak için UnsubclassWindowarayın. Pencerenin orijinal pencere yordamı daha sonra geri yüklenir.
Sınıflara hakkında daha fazla bilgi için bkz: Pencere yordamı sınıflara Win32 sdk.