C++ COMBOBOX EVENT

Dev C++ ve Visual Studio ile combobox veya Dropdownlist kontrolüne SelectedIndexChanged event olayı atama. Combobox ta seçilen satır değiştikçe otomatik işlem yaptırma.


Merhaba;

Bu yazıda combobox kontrolüne event olayı atamayı işleyeceğiz.

Bilindiği gibi combobox’lar 1’den fazla kullanıldığında genellikle 1. Combobox’tan seçilen veriye göre 2. combobox doldurulur. Baen de farklı işlemler yapılabilir. 



İşte bu nedenle combobox kontrolünün event olayını yönetebilmek önem kazanıyor. Kaldı ki kim combobox kullanıpta event olaylarını öğrenmek istemez ki.

İşte bu yazıda combobox kontrolünün event olayının nasıl oluşturulduğunu gösterirken aynı zamanda diğer kontrollerin event olaylarının nasıl oluşturulduğuna dair bir fikir vermiş olacağım. Temelde hepsi aynı mantık üzerine kuruludur. Birini öğrendiğiniz zaman gerisi kolaydır.

Daha önceki yazıda combobox’a nasıl veri yüklendiğini görmüştük. En altta yer alan örnekte hem veri yükleme hem evet olayı çalışmaktadır.

C++ da evet tanımlamak için “CASE WM_COMMAND” ifadesinden sonra aşağıdaki satırları eklemek yeterlidir.

   if(LOWORD(wParam)==301)
   {
    switch(HIWORD(wParam))
    {
     case CBN_SELCHANGE:
     CmbxIndex_Changed();
     break;
    } 
   }

   


Burada 301 ilgili combobox’un id’sidir.

Combobox programın üst kısmında;

#define CMBXN1 301
#define CMBXN2 302
HWND CmbBX1;
HWND CmbBX2;


Şeklinde tanımlanmakta;

Control Load (WinMain) kısmında;

 CmbBX1 = CreateWindow(TEXT("Combobox"),"", CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | LBS_STANDARD | WS_VISIBLE, 200, 250, 280, 300,
    hwnd,HMENU(CMBXN1), hInstance, NULL);
    CmbBX2 = CreateWindow(TEXT("Combobox"),"", CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | LBS_STANDARD | WS_VISIBLE, 500, 250, 280, 300,
    hwnd,HMENU(CMBXN2), hInstance, NULL);
şeklinde forma eklenmekte;
 switch(Message) 
 {
  
  case WM_DESTROY: 
  {
   PostQuitMessage(0);
   break;
  }

   case WM_COMMAND:
   if(LOWORD(wParam)==301)
   {
    switch(HIWORD(wParam))
    {
     case CBN_SELCHANGE:
     CmbxIndex_Changed();
     break;
    } 
   }
   
   
    
  switch(wParam)
  {
   case Button1:
    ButtonClick();
   break;
   
  }
   
  default:
   return DefWindowProc(hwnd, Message, wParam, lParam);
 }


Şeklinde event olayı oluşturulmaktadır.

Combobox’un indexi değiştiğinde ilgili indeksi aşağıdaki kod ile alıyoruz.

int inds = SendMessage(CmbBX1, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);

Yukarıdaki satır combobox’un seçili indexini int değişkene aktarıyor.

2. combobox’a yeni veriler yüklerken içeriğini temizlememeiz gerekli. Aşağıdaki kod combobox’un içeriğini temizliyor.

SendMessage(CmbBX2, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);

Aşağıdaki örnek uygulama 2 adet combobox, 1 adet button oluşturuyor. Program çalışınca ilk olarak otomatik combobox1 i dolduruyor. Kullanıcı combobox1 den seçim yapınca, bu seçime göre 2. Combobox dolduruluyor. Buttona tıklayınca 2. Combobox’ta seçili olan veri mesaj penceresi ile gösteriliyor.

Kolay Gelsin.


#include <windows.h>
#include <iostream>


#define Button1 21
#define CMBXN1 301
#define CMBXN2 302

HWND BtnX1;
HWND CmbBX1;
HWND CmbBX2;
void AddComboBox();
void ButtonClick();
void CmbxIndex_Changed();


using namespace std;
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
 switch(Message) 
 {
  
  case WM_DESTROY: 
  {
   PostQuitMessage(0);
   break;
  }

   case WM_COMMAND:
   if(LOWORD(wParam)==301)
   {
    switch(HIWORD(wParam))
    {
     case CBN_SELCHANGE:
     CmbxIndex_Changed();
     break;
    } 
   }
   
   
    
  switch(wParam)
  {
   case Button1:
    ButtonClick();
   break;
   
   
  }
   
  default:
   return DefWindowProc(hwnd, Message, wParam, lParam);
 }
 return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
 WNDCLASSEX wc; 
 HWND hwnd; 
 MSG msg; 
 memset(&wc,0,sizeof(wc));
 wc.cbSize = sizeof(WNDCLASSEX);
 wc.lpfnWndProc = WndProc; 
 wc.hInstance = hInstance;
 wc.hCursor = LoadCursor(NULL, IDC_ARROW);

 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wc.lpszClassName = "WindowClass";
 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
 wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
 if(!RegisterClassEx(&wc)) {
  MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
  return 0;
 }
 hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT, 
  CW_USEDEFAULT,
  1020, 
  680, 
  NULL,NULL,hInstance,NULL);
   
   CmbBX1 = CreateWindow(TEXT("Combobox"),"", CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | LBS_STANDARD | WS_VISIBLE, 200, 250, 280, 300,
    hwnd,HMENU(CMBXN1), hInstance, NULL);
    CmbBX2 = CreateWindow(TEXT("Combobox"),"", CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | LBS_STANDARD | WS_VISIBLE, 500, 250, 280, 300,
    hwnd,HMENU(CMBXN2), hInstance, NULL);
    
    
   BtnX1 = CreateWindow("button", "GOSTER", WS_VISIBLE | WS_CHILD, 60, 450, 150, 25, hwnd, HMENU(Button1), NULL, NULL);
  
   AddComboBox();
 if(hwnd == NULL) {
  MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
  return 0;
 }


   
 while(GetMessage(&msg, NULL, 0, 0) > 0) { 
  TranslateMessage(&msg); 
  DispatchMessage(&msg); 
 }
 return msg.wParam;
}
void AddComboBox()
{
 string dizi[]={"Matematik","Fizik","Kimya","Biyoloji","Bilgisayar"};

 const char *comboadd="";
 for(int x =0; x<5;x++)
 {
  comboadd=dizi[x].c_str();
   SendMessage(CmbBX1, CB_ADDSTRING, 0, (LPARAM)comboadd);
 }


 SendMessage(CmbBX1, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);

}
void ButtonClick()
{
  int len=1;
  char data[1024];
  len=GetWindowTextLength(CmbBX2) + 1;
  GetWindowText(CmbBX2,data,len);
  
  MessageBox(NULL, data,"COMBOBOX",MB_ICONEXCLAMATION|MB_OK);
}
void CmbxIndex_Changed()
{
 int len=1;
  char data[1024];
  len=GetWindowTextLength(CmbBX1) + 1;
  GetWindowText(CmbBX1,data,len);
  string Mdizi[]={"Denklemler","Logaritma","Turev","Fonksiyonlar","Integral"};
  string Fdizi[]={"Kuvvet","Hareket","Elektrostatik","Denge","Optik"};
  string Kdizi[]={"Atomlar","Periyodik Cetvel","Bileşikler","Karışımlar","Gazlar"};
  string Bdizi[]={"Hücre","Doku","Organ","Sistem","Canlı"};
  string B2dizi[]={"C ++ ","Win Form","Sınıflar","Fonksiyonlar","Kütüphaneler"};
  const char *comboadd="";
  
  
  SendMessage(CmbBX2, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
  
  int inds = SendMessage(CmbBX1, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
  if(inds ==1)
  {
    
   for(int x =0; x<5;x++)
   {
    comboadd=Fdizi[x].c_str();
    SendMessage(CmbBX2, CB_ADDSTRING, 0, (LPARAM)comboadd);
   }

  }
  if(inds==0)
  {
    for(int x =0; x<5;x++)
   {
    comboadd=Mdizi[x].c_str();
    SendMessage(CmbBX2, CB_ADDSTRING, 0, (LPARAM)comboadd);
   }

  }
  if(inds==2)
  {
    for(int x =0; x<5;x++)
   {
    comboadd=Kdizi[x].c_str();
    SendMessage(CmbBX2, CB_ADDSTRING, 0, (LPARAM)comboadd);
   }

  }
  if(inds==3)
  {
    for(int x =0; x<5;x++)
   {
    comboadd=Bdizi[x].c_str();
    SendMessage(CmbBX2, CB_ADDSTRING, 0, (LPARAM)comboadd);
   }

  }
  if(inds==4)
  {
    for(int x =0; x<5;x++)
   {
    comboadd=B2dizi[x].c_str();
    SendMessage(CmbBX2, CB_ADDSTRING, 0, (LPARAM)comboadd);
   }

  }
  
  
  
  SendMessage(CmbBX2, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
}


C++ TextChanged Event Olayı




SANATSAL BİLGİ

04/02/2017


  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM


  • BİLGİSAYAR - ELEKTRİK
  • YGS - LYS KONULARI
  • 8. SINIF
  • 7. SINIF
  • 6. SINIF
  • GENEL MATEMATİK
  • BİRİM ÇEVİRİCİLER
COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI