PCnet Online forumlarına katılmak için hesap açabilirsiniz.
  • Üye girişi:

PCnet Online forumlarına hoş geldiniz

+ Başlığa Yanıt Yaz
Sayfa 2 / 2 İlkİlk 12
6 sonuçtan 6 - 6 arası sonuçlar

Başlık: TextBox

  1. #6

    Varsayılan

    WinMain Fonksiyonunun Parametreleri

    Bu parametreler işletim sistemi tarafından geçirilir.

    - HINSTANCE hInstance
    Buraya geçirilen değer exe dosyanın çalıştırılma sırasında belleğe yüklenme adresidir. Programın yüklenme adresi aslında PE formatının içerisine yazılmaktadır. Yükleme adresi derleyici seçeneklerinden çeşitli biçimlerde değiştirilebilir. Ancak değiştirilmesi için ciddi bir neden yoktur. Win9x sistemlerinde bu yükleme adresi default olarak 0x400000(4 Mb), WinNT sistemlerinde 0x100000(1Mb) biçimindedir. Yani farklı programların hInstance değerleri farklı olabilir.
    16 bit Windows'da hInstance değeri programın yüklenme adresi değil programın module database adresidir. Yani 16 bit Windows'da her programın hInstance değeri birbirinden farklıdır. hInstance değeri pekçok API fonksiyonuna parametre olarak geçirilmektedir. Örneğin kaynak(resource) üzerinde işlem yapan bir API fonksiyonu bu değeri parametre olarak ister, aslında fonksiyon bu değerden faydalanarak PE formatının yüklenme adresini alır. PE formatı içerisinde kaynak bölümünün nerede başladığı bilgisi vardır. Fonksiyon kaynak bilgilerine bu biçimde erişir. hInstance değeri WinMain içerisinde global bir değişkene atanırsa her fonksiyon içerisinden kullanılabilir.

    - HINSTANCE hPrevInstance
    Bu değer 32 bit Windows sistemlerinde her zaman NULL olarak geçirilir. 16 bit Windows'da hPrevInstance programın kopyası birden fazla çalıştırılıyorsa önceki kopyasının hInstance değeri olarak geçirilir. Tabii program ilk kez çalıştırıldığında hPrevInstance 0 olacaktır. 16 bit Windows'da bir programın birden fazla çalıştırılması istenmiyorsa aşağıdaki gibi bir işlem yapılabilir.

    if (hPrevInstance)
    return 0;

    Bazı işlemlerin yalnızca programın ilk çalıştırılmasında yapılması isteniyorsa:

    if (!hPrevInstance) {
    ...........
    ........
    ........
    ........
    }

    32 bit Windows sistemlerinde hPrevINstance her zaman NULL olduğuna göre programın ilk kez çalıştırılıp çalıştırılmadığı bu yöntemle anlaşılamaz(Bu işlem için mutex nesneleri kullanılmalıdır).

    - LPSTR lpszCmdParam
    Komut satırı argümanlarını gösteren yazının başlangıç adresini belirtir. Komut satırı argümanları tek yazı olarak tutulur.

    - int nCmdShow
    Programın ana penceresinin program çalıştırıldığında hangi büyüklükte ilk kez görüntüleneceğini belirtir. Bu parametre 3 seçenek alabilir. Bunlar:

    SW_MAXIMIZE
    SW_MINIMIZE
    SW_RESTORE

    Bir Windows programı hiçbir pencere olmadan da çalışabilir. Ancak tabi istenen bu değildir.

    Programın Ana Penceresinin Yaratılması

    Programa ilişkin bütün pencerelerin yaratılması CreateWindow API fonksiyonu ile yapılmaktadır. Bu fonksiyonun birinci parametresi WNDCLASS türünden bir yapı değişkeninin adresini alır. Bu durumda önce WNDCLASS türünden bir yapı değişkeni tanımlanıp içinin doldurulması gerekir. CreateWindow bu yapının içerisindeki bilgileri kullanmaktadır.

    WNDCLASS Yapısı

    WNDCLASS yapısı bir pencerenin temel özelliklerini barındıran bir yapıdır.

    WNDCLASS Yapsının Elemanları

    - UINT style
    Pencerenin genel türüyle ilgili bilgileri içerir. Bu eleman aslında her biti bir özellik olarak ele alınacak biçimde düşünülmüştür. Bu elemana genellikle CS_HREDRAW | CS_VREDAW değeri girilir(Windows.h içerisinde birçok sembolik sabit vardır. Bu sembolik sabitlerin hangi amaçla kullanıldığının kolay anlaşılabilmesi için isimlendirilmeleri de okunabilir bir biçimde yapılmıştır. Bir sembolik sabitin isimlendirilmesi genel olarak XX_ISIM biçimindedir. Burada XX sembolik sabitin hangi konuyla ilgili olduğunu anlatan bir ön ektir).

    - WNDPROC lpfnWndProc
    Pencere fonksiyonunun başlangıç adresini tutan göstericidir.

    - int cbClsExtra
    int cbWndExtra
    Pencere biçimine ilişkin yapı için ayrılacak ekstra alanların byte cinsinden değeridir. Ekstra alana nadiren gereksinim duyulur, genelde değeri sıfırdır.

    - HANDLE hInstance
    Bu elemana WinMain fonksiyonuna geçirilen hInstance değeri geçirilmelidir.


    - HICON hIcon
    Program minimize edildiğinde gösterilecek icon görüntüsünü belirlemek için kullanılır. Genellikle bu elemana Windows'un önceden tanımlanmış standart icon'larından biri yerleştirilir. İskelet programda bu elemana LoadIcon API fonksiyonu çağırılarak değer atanmıştır.
    LoadIcon(NULL, IDI_QUESTION);

    - HCURSOR hCursor
    Windows programlamasında cursor mouse'un hareket ettirildiğindeki gösterici şekili olarak kullanılır. Mouse oku bir pencerenin sınırları içerisinde gezdirildiğinde istenilen bir şekle dönüştürülebilir. Bu eleman bu şeklin belirlenmesinde kullanılır. İskelet Windows programında bu elemana LoadCursor API fonksiyonunun geri dönüş değeri atanmıştır.
    LoadCursor(NULL, IDC_ARROW);
    Burada belirlenen mouse şekli ok biçimindedir.

    - HBRUSH hbrBackground
    Bu eleman pencerenin zemin rengini belirlemekte kullanılır. Bu elemana iskelet Windows programında GetStockObject fonksiyonuyla elde edilen değer atanmıştır.
    GetStockObject(WHITE_BRUSH);

    - LPCTSTR lpszMenuName
    Program menuye sahip olabilir ya da olmayabilir. Eğer olacaksa buraya menu kaynağının ismi girilmelidir.

    - LPCTSTR lpszClassName
    Her WNDCLASS yapısının bir ismi vardır. Bu isim CreateWindows fonksiyonuna parametre olarak geçirilir. Yani aslında CreateWindow fonksiyonu bu isimden hareketle bu yapının içerisindeki bilgileri elde eder.
    WNDCLASS yapısının içi doldurulduktan sonra bu yapının sisteme tanıtılması gerekir. Bu tanıtma işlemi RegisterClass API fonksiyonu ile yapılır. Bu API fonksiyonu WNDCLASS türünden bir yapı değişkeninin adresini parametre olarak alır. WNDCLASS yapısının sisteme tanıtılması işlemi 32 bit Windows sistemlerinde programın her kopyası için yapılmak zorundadır. Ancak 16 bit Windows sistemlerinde bu işlem yalnızca ilk kopya için yapılmalıdır. Bunu yapan kod 16 bit Windows sistemleriyle uyumu korumak için if (!hPrevInstance) { }kod bloğunun içinde yapılır. RegisterClass fonksiyonu WNDCLASS yapısına ilişkin bu bilgileri sistem bölgesine kopyalar. Herhangi bir API fonksiyonu isterse bu bilgilere ulaşabilir(Win32'de program sonlandırıldığında o programın sisteme tanıttığı bütün WNDCLASS bilgileri sistemden boşaltılır).










    Programın Ana Penceresinin Yaratılması

    Pencerenin yaratılması CreateWindow API fonksiyonu ile yapılır.

    CreateWindow Fonksiyonunun Parametreleri

    - LPCTSTR lpszClassName
    Bu parametre daha önce sisteme tanıtılmış olan WNDCLASS yapısının ismini verir. Bu ismi alan CreateWindow sistem alanına ulaşarak sisteme tanıtılmış olan bütün yapılar arasından uygun olanı alır.

    - LPCTSTR lpszWindowName
    Pencerenin başlık yazısını belirlemek için kullanılır.

    - DWORD dwStyle
    Pencerenin görüntü biçimini belirlemekte kullanılır. Bu değişken 32 bitten oluşmaktadır. Her bit bir özelliğin olduğunu ya da olmadığını belirlemekte kullanılır. Pencere biçimlerine ilişkin windows.h içerisinde tanımlanmış WS_ ile başlayan bir grup sembolik sabit vardır. Bu sembolik sabitlerin yalnızca bir biti 1 diğer bitleri 0'dır. Bu sembolik sabitler bir OR işlemine sokularak çeşitli özelliklerin birlikte sağlanması için kullanılabilirler.

    Başlıca Pencere Biçimleri

    - WS_VISIBLE
    Yaratılır yaratılmaz pencerenenin görüntülenmesini sağlar.
    - WS_BORDER
    Penerenin sınır çizgilerinin görünmesini sağlar.
    - WS_CAPTION
    Başlık kısmının olmasını sağlar.
    - WS_SYSMENU
    Sistem menüsünün görüntülenmesini sağlar.
    - WS_OVERLAPPED
    Pencerenin başlık kısmı ve sınır çizgilerinin olmasını sağlar.
    - WS_OVERLAPPEDWINDOW
    Windows.h içerisindeki bir sembolik sabit biçimindedir. WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX.
    İskelet programda pencere biçimi olarak WS_OVERLAPPEDWINDOW olarak seçilmiştir. En sık kullanılan pencere biçimi budur.

    - int x
    int y
    int nWidth
    int nHeight
    Pencerenin ekrandaki ilk araboyut(restore) koordinatlarıdır. x, y sol üst köşenin koordinatlarıdır. nWidth, nHeight yatay ve düşey uzunluklarıdır. İskelet programda bu değerler,
    CW_USEDEFAULT
    0
    CW_USEDEFAULT
    0
    olarak girilmiştir. Pencerenin ilk görüntüsü masaüstünü ortalayacak biçimde yerleştirilir.

    - HWND hWndParent
    Pencereler üst pencere(parent window) ve alt pencere(child window) olmak üzere iki kısma ayrılır. Üst pencereler masa üstünde herhangi bir yere hareket ettirilebilirler. Oysa alt pencereler üst pencerelerin sınırları dışarısına çıkartılamaz. Alt pencerenin de alt penceresi olabilir(Aslında üst pencere masa üstünün alt penceresiymiş gibi de düşünülebilir). Aslında Windows'un push button, radio button, check box gibi görsel elemanları birer alt pencerdir. Bu tür özel alt pencerelere control denir. CreateWindow fonksiyonunun geri dönüş değeri HWND türündendir. Bu değere pencerenin handle değeri denir. Bir pencere yaratıldığında pencerenin bütün bilgileri sistem içerisinde gizli bir bölgeye aktarılır. Fonksiyon aslında bu bilginin aktarıldığı bölgenin başlangıç adresini verir. Pencereyle ilgili işlem yapan bütün API fonksiyonları bu handle değerini parametre olarak alırlar. Handle değerini alan API fonksiyonları ilgili pencerenin bütün bilgilerine erişebilir. Yani handle değeri hangi pencereyle ilgili işlem yapılacağını belirlemekte kullanılır. CreateWindow fonksiyonu hem üst pencere hem de alt pencere yaratılmasında kullanılmaktadır. Eğer üst pencere yaratılacaksa hWndParent parametresi NULL olarak, alt pencere yaratılacaksa hangi üst pencerenin alt penceresi olduğunu belirtmek için üst pencerenin handle değeri olarak girilmesi gerekir. İskelet programda üst pencere yaratılması söz konusu olduğu için NULL değeri girilmiştir.

    - HMENU hMenu
    Pencere menüye sahip olabilir. Eğer bu menü WNDCLASS yapısı içerisinde belirlenmemişse burada belirlenebilir. İskelet programda menü olmadığı için bu parametre NULL olarak girilmiştir.

    - HANDLE hInstance
    WinMain fonksiyonundan alınan hInstance değeri bu parametreye girilmelidir.

    - LPVOID lpParam
    Pencere yaratıldığında ek bir veri alanı oluşturmak istenebilir. Bu parametre bu alanın başlangıç adresini tutar. İskelet programda NULL olarak girilmiştir. Bu değer böyle bir alanın kullanılmayacağını belirtir.

    CreateWindow Fonksiyonunun Geri Dönüş Değeri

    Fonksiyonun geri dönüş değeri pencere başarılı bir biçimde yaratılmışsa pencerenin handle değeridir, başarısızlık durumunda fonksiyon NULL değeri ile geri döner. İskelet programda yaratılma işleminin başarısı kontrol edilmemiştir. Aslında bu işlemin başarısının kontrol edilmesi tavsiye edilir. Pencerenin yaratıldığında görüntülenip görüntülenmeyeceği pencere biçimindeki WS_VISIBLE parametresine bağlıdır. İskelet programda yaratılır yaratılmaz görüntülenmemektedir.




    Yaratılmış Pencerenin Görüntülenmesi

    Bir pencere WS_VISIBLE pencere biçimiyle yaratılmışsa yaratılır yaratılmaz zaten görüntülenir. Ancak değilse ShowWindow API fonksiyonu ile görüntülenir.

    BOOL ShowWindow(HWND hWnd, int nExitCode);

    Fonksiyonun birinci parametresi görüntülenecek pencerenin handle değeri, ikinci parametresi ise görüntülenme biçimidir. Görüntülenme biçimi SW_MAXIMIZE, SW_MINIMIZE, SW_RESTORE olabilir.
    (Bir fonksiyonun geri dönüş değeri BOOL ise başarı bilgisinin verildiği anlaşılır. BOOL değer mantıksal olarak 0 ya da 0 dışı bir değer olarak değerlendirilir. Örneğin ShowWindow başarılı ise 1'e değil 0 dışı herhangi bir değere geri dönmektedir.)
    Ana pencere yaratıldıktan sonra içsel görüntünün güncelleştirilmesi için WM_PAINT mesajı gerekebilir. Bunu sağlamak için UpdateWindow API fonksiyonu çağırılır.


    bu yazılar bir e-book'tan alıntıdır. telif hakları olmadığı için kitabı söylemiyorum.


 

Benzer Başlıklar

  1. textbox renkleri
    Rapid tarafından Web ve Grafik Tasarımı forumunda
    Yanıt: 1
    Son Mesaj: 12.08.2005, 22:03
  2. vb de textbox ?
    allthein tarafından Programlama Dilleri forumunda
    Yanıt: 2
    Son Mesaj: 02.08.2004, 20:55
  3. Textbox
    mevural tarafından Programlama Dilleri forumunda
    Yanıt: 3
    Son Mesaj: 20.03.2003, 08:57