Edit

► Kontroller

Edit kontrolü, kullanıcının klavyeyi yoluyla bir metin girmesini ve düzenlemesini sağlayan dikdörtgen şeklinde bir kontroldür. Program, Edit kontrolü yoluyla kullanıcı tarafından girilen karakter dizi veya dizilerine işlem yapar. Sistem, kullanıcı tarafından girilen metinlere otomatik olarak işlem yapar ve işlem tamamlandığında uygulamaya bildirim yapar.

Edit kontrol, CreateWindowEx() fonksiyonunun lpClassName parametresi içinde EDIT veya WC_EDIT değeri ile tanımlanan bir kontroldür.

EDIT değerini kullanırsanız programın başında windows.h başlık dosyasını dahil etmeniz yeterlidir, ancak WC_EDIT değerini kullanırsanız commctrl.h başlık dosyasını dahil etmeniz gerekir.

Şimdi, programımıza bir EDIT kontrol eklemeye çalışalım.

Aşağıdaki 2 kod satırı programın başına global değerler olarak eklenir:

#define IDC_EDIT 201 /* Edit kontrolü için tanımlayıcı makro bildirimi */
HWND hwndEdit01;     /* Edit kontrolü pencere Handle değeri bildirimi */

WinMain() fonksiyonu içinde yer alan aşağıdaki kod satırı, ana pencere ile STATIC değer arka planını aynı renge ayarlamak üzere değiştirilir:

wincl.hbrBackground = GetSysColorBrush(COLOR_3DFACE);

WindowProcedure() fonksiyonu içinde renkli olarak gösterilen satırlar ile bir EDIT kontrolü oluşturulur:

LRESULT CALLBACK WindowProcedure (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  { 
    case WM_CREATE:
         hwndStatic01 = CreateWindowEx(0, "STATIC", "Statik kontrol",
                             WS_CHILD | WS_VISIBLE | SS_LEFT, 20, 20, 500, 20,
                             hwnd, (HMENU) IDC_STATIC, NULL, NULL);
         hwndEdit01 = CreateWindowEx(0, "EDIT", "Edit kontrolü",
                             WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 70, 300, 20,
                             hwnd, (HMENU) IDC_EDIT, NULL, NULL);
         break;		 
		 
    case WM_DESTROY:
         PostQuitMessage (0);
         break;
		 
    default:                 
         return DefWindowProc (hwnd, message, wParam, lParam);
  }

  return 0;
}

Edit kontrol penceresi oluşturulurken, CreateWindowEx() fonksiyonunun lpClassName parametresi için sistemdeki ön tanımlı değerlerden biri olan EDIT değeri kullanılır.

Program çalıştığında:

  • Program penceresi oluşturulur oluşturulmaz WM_CREATE mesajı mesaj işlem fonksiyonuna gönderilir. switch yapısının bu seçeneği altında CreateWindowEx() fonksiyonu ile bir Edit kontrolü oluşturulur.

Programın çalışan en son hali aşağıdadır:

#include <windows.h>

#define IDC_STATIC 101
#define IDC_EDIT 201

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WinAPIWindowsApp";
HINSTANCE ghInst;
HWND hwndStatic01;
HWND hwndEdit01;

int WINAPI WinMain (HINSTANCE hThisInstance, 
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nCmdShow)
{
  HWND hwndMain;         
  MSG messages;      
  WNDCLASSEX wincl;

  ghInst = hThisInstance;

  wincl.hInstance = hThisInstance;
  wincl.lpszClassName = szClassName;
  wincl.lpfnWndProc = WindowProcedure;
  wincl.style = CS_DBLCLKS;           
  wincl.cbSize = sizeof (WNDCLASSEX);

  wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  wincl.lpszMenuName = NULL; 
  wincl.cbClsExtra = 0; 
  wincl.cbWndExtra = 0; 
  wincl.hbrBackground = GetSysColorBrush(COLOR_3DFACE);

  if (!RegisterClassEx (&wincl)) return 0;

  hwndMain = CreateWindowEx (0, szClassName, "WinAPI Temel Program", WS_OVERLAPPEDWINDOW, 
                         CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, 
                         hThisInstance, NULL);

  if (!hwndMain) return 0;
						 
  ShowWindow (hwndMain, nCmdShow);
  UpdateWindow(hwndMain);

  while (GetMessage (&messages, NULL, 0, 0) > 0) {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
  }	
	
  return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  { 
    case WM_CREATE:
         hwndStatic01 = CreateWindowEx(0, "STATIC", "Statik kontrol",
                             WS_CHILD | WS_VISIBLE | SS_LEFT, 20, 20, 500, 20,
                             hwnd, (HMENU) IDC_STATIC, NULL, NULL);
         hwndEdit01 = CreateWindowEx(0, "EDIT", "Edit kontrolü",
                             WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 70, 300, 20,
                             hwnd, (HMENU) IDC_EDIT, NULL, NULL);
         break;		 
		 
    case WM_DESTROY:
         PostQuitMessage (0);
         break;
		 
    default:                 
         return DefWindowProc (hwnd, message, wParam, lParam);
  }

  return 0;
}

Program çalıştığında karşınıza gelecek ekran görüntüsü aşağıdadır: