MyDesign | Kod Arşivi - Anasayfaya Dön   No banner in farm
Anasayfa Araştır Forum Gelişmiş Arama Siteniz İçin En Hit İçerikler RSS İçerik Ekle Scriptler Destekleyenler Kadromuz Reklam İletişim Giriş Sayfası Yap  Sık Kullanılanlara Ekle
Bu Kategorinin En Yeni Kodları:


Bu Kategorinin En Çok Görüntülenen Kodları:






Arama:
Gelişmiş Arama


No banner in farm



En Çok Görüntülenen Kodlar:


Üye Girişi:
 Üye Ol



Anasayfa > C - C++ > Kodlar

Windows Pencere İskeleti + Açıklamalar

Olabildiğince bol acıklamalı temel win32 penceresi kodu. Sadece pencere kapama işlemini işler. Windows grafik programlarınızda baslangıc şablonu olarak kullanabilirsiniz.

windows  programlama  pencere  şablon  iskelet 

Kategori : C - C++
Gönderen : muratselim
Telif : public
Tarih : 22 Haziran 2007
Örnek Dosya : Bulunmamakta
Okunma Sayısı : 11699
Puan
: 8,9 / 10 (8 Oy)
Puan Verin :
Google Bookmarks  del.icio.us  Digg  Yahoo! MyWeb  Windows Live  Furl
 
 
/*

###############makefile.mak dosyası olarak kaydet#################
Pencere.exe : pencere_iskeleti.obj
    ilink32 -aa -V4.0 -c -x -Gn pencere_iskeleti.obj c0w32.obj,Pencere.exe,,import32.lib cw32.lib,,

pencere_iskeleti.obj : pencere_iskeleti.cpp
    bcc32 -c -tWM- -w -w-par -w-inl -W -a1 -Od pencere_iskeleti.cpp
################################################

Rem---------------------------derle.bat olarak kaydet-------
make
  del *.obj *.res *.tds *.map
pause
Rem-----------------------------------------------------------------------------------------

   *Yukarıda isimleri belirtilen iki dosyayi ve kodu pencere_iskeleti.cpp ismi ile ayni dizine kaydedin. Borland c++ 5.5 derleyiciniz
   dogru kurulmus olmalı. Dizinde derle.bat dosyasını calistirin ve pencere.exe yi calıstırın....

//-------------------------------------pencere_iskeleti.cpp------------------------------------------------------------
*/


#include <windows.h> //windowsa özel degisken,sabit ve yapıların tanımlandıgı baslık dosyası

const char g_szClassName[] = "Pencere_sınıfının_ismi_icin";

/* Pencere Fonksiyonu
Windows Programlamada tüm CALLBACK fonksiyonlar biraz garip olabilir ama windows tarafından isletir. Yani siz bu tür
kod bloklarına windows icin yazarsınız bu kodu cagırmamalısınız.  Eger coklu islem (Multi proccessing) ortamında 
windows sizin programınıza firsat vermek isterse bu örnege ele alırsak WndProc isletir ve eger siz 
islem kuyruguna pencere kapatmayı attıysanız (pencerenin X ine bastıysanız) o islem olur.
Belki basınıza gelmistir. Sistem zorlandıgında mouse hareketlerini duymaz 
bazende cözülür ve hepsini birden ardı ardına yapar iste bunun arkasında fırsat olmadıgı icin CALLBACK lerin isletilmemesi vardır
*/
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:// mesaj kapama ise
            DestroyWindow(hwnd);//pencereyi yok et
        break;
        case WM_DESTROY://pencere yıkımında
            PostQuitMessage(0);//garip ama kendi mesaj kuyrugunuza kapatma mesajı gönderiyosunuz. Win32'de islemleri windowsa bırakmak en saglıklı yoldur:)
        break;
        default:// buraya kadar beklenen mesajları case le yazıyoruz eger yorumlamamak istemedigimiz mesajlar varsa
            return DefWindowProc(hwnd, msg, wParam, lParam);// bunları windowsun varsayılan kuralları isletsin diyoruz
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;//WNDCLASSEX->pencere sınıfı icin windows.h dosyasinda önceden tanımlanmıs yapi 
                   //aslında bunu hex rakamlarlada yapmak mümkün ama böyle olması okunurluluk ve kolaylıktır.
    HWND hwnd;  //HWND->pencere kaydinda dönen isaretci icin
    MSG Msg;      // MSG-> windowsa özel mesajlajma icin kullanılan yapi degiskeni
                    //windowsun sistem/program uyumluluk adına elindeki en büyük silah
                    //sistem icinde dönen bu mesajlardır. cünkü bunlar donanıma ve programların hangi derleyiciyle derlendigine göre değişmez.
                 // tabi gelismis PE formatınında büyük rolü var (diger adıyla exe formatı)

    //Pencere sınıfını kaydetme
    wc.cbSize        = sizeof(WNDCLASSEX);//yapının boyutu
    wc.style         = 0;//bu genellikle sıfır ama Pencere cesitleriyle alakalı degil
    wc.lpfnWndProc   = WndProc;//pencere sınıfının fonksiyonu
    wc.cbClsExtra    = 0;//  windowsta hemen hemen bircok kontrolde yani dügmelerde
    wc.cbWndExtra    = 0;//metin kutularında ... böyle extra bilgi icin degiskenler tanımlanmıstır.
    wc.hInstance     = hInstance;//programın calısan kopyasının degiskeni (bellekteki pozisyonu gibi bisey)
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);//[Alt]+ [Tab] bastıgınızda görecginiz 32*32 ikon
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);//mouse bicimi
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//Formumuzun arka plan rengi
    wc.lpszMenuName  = NULL;// sabit Windows menunuz varsa burdan ekliyoruz.  (File/....Edit/...)
    wc.lpszClassName = g_szClassName;//sınıfımızın ismi
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);//asagıda penceremixin bandında görünen 16*16 ikon

    if(!RegisterClassEx(&wc))//sınıf kaydı
    {
        MessageBox(NULL, "Kayıt işlemi yapılamadı!", "Hata!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Pencere oluşturuluyor
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,//genisletilmis pencere stili degiskeni ->iceriye dogru giren kenarlar
        g_szClassName,//ismi
        "Pencerem",//pencerenin baslıgı
        WS_OVERLAPPEDWINDOW,//windows stili cesitler icin win32 API reference ına bakın.
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,//pencerenin koordinat ve büyüklük rakamlar büyüklük varsayıla degerler masa üstünde posizyonu
    
    
        NULL, NULL, hInstance, NULL);//ana (üst) pencerinin isaretcisi, menü isaretcisi, programımızın isaretcisi, pencere tanımlama yapısına isaretci 
    /*
Windowsta tüm gördügünüz pencereler ve üzerindeki kontroller dikey olarak birbirlerine 
baglanır. Eger pencerinin üstünde dügme varsa o ana pencerinin altındadır ve dugme
ana (üst) pencerinin isaretcisi (dügmede bu deger null olmaz) ile baglanır. Aslında kontrollerde (liste,dügme...)
farklı görünüs ve islevleri olan pencerelerdir. örnegimizde deger null dur. cünkü bu bizim ana 
penceremizdir . Menumuz olmadıgı icin oda null dur. son isaretcide pencere yaratılırken winmaine gönderilen ek bilgiler
icin kullanılır ama cogunlukla gereksizdir. aynı isi program icindende farklı sekilde yapabilirsiniz.    
    */

    if(hwnd == NULL)// dönen null'sa problemimiz var.
    {
        MessageBox(NULL, "Pencere oluşturma başarasız!", "Hata!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);//pencere sahnede
    UpdateWindow(hwnd);//emin olmak icin bir kere tazeleme

    // Mesaj döngüsü
    while(GetMessage(&Msg, NULL, 0, 0) > 0)//artık program ekranda biyerlerde ve eger belirtiyseniz 
         //formun üstüne yada dügmelere tıklanmayı beklemek icin mesaj döngüsüne giriyor. burda WndProc cagrılmadıgına dikkat edin
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}
 
 

Windows Pencere İskeleti + Açıklamalar için yazılan yorumlar

blackjaser   { 07 Temmuz 2008 }
sade ve net. guzel aciklamissin .tesekkurler

Yorum ekleyin

Anasayfa > C - C++ > Kodlar > Windows Pencere İskeleti + Açıklamalar
Kategoriler:


Forum:



Bağlantılar:


En Son Yorumlanan İçerikler:


Murat Yavuz | Site Haritası | Gizlilik Bildirimi | 54.92.163.188 | 0,12 Saniye
© Copyright 2004-2018 MyDesign | Kod Arşivi. Tüm Hakları Saklıdır.
MyDesign | Kod Arşivi, en iyi görünüm için, 1024x768 ve üzeri çözünürlük tavsiye eder.