WindowProc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
WindowProc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23 Kasım 2020 Pazartesi

WindowProc CallBack

Giriş
Gelen mesajları işleyen koddur. Bu kodda kendi swith/case kodumuzdan sonra en altta return DefWindowProc() çağrısı yapmak gerekir.

Örnek - WM_CREATE
Şöyle yaparız. Bir EditBox ve bir Button yaratır. Düğmeye tıklanınca MessageBox gösterir.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  int wmId, wmEvent;
  PAINTSTRUCT ps;
  HDC hdc;
  TCHAR heading[] = _T("CD ROM READER");
  TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
  TCHAR CSCI_NO[60];
  switch (message)
  {
    case WM_CREATE:
    {
      TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
        WS_VISIBLE | WS_CHILD | WS_BORDER,
        150, 140, 250, 25,
        hWnd, NULL, NULL, NULL);

      HWND hwndButton_Enter = CreateWindow(
        L"BUTTON", L"ENTER",
        WS_VISIBLE | WS_CHILD | WS_BORDER,  //Styles
        405, 140, 70, 25,
        hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
      return 0;
    }

    case WM_COMMAND:
    {
      switch (LOWORD(wParam))
      {
        case ENTER_BUTTON:
          int gwtstat = 0;
          TCHAR title[] = _T("CSCI_NO");
          gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);

          TCHAR buff[100] = L"";
          TCHAR name[] = _T("CSCI_NO");
          wsprintf(buff, L"The CSCI No you entered is: %s", CSCI_NO);
          MessageBox(hWnd, buff, title, MB_OK);
          break;
      }
      return 0;
    }
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    }
  return DefWindowProc(hWnd, message, wParam, lParam);
}
Örnek - WM_DESTROY
Şöyle yaparız
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM  lParam)
{
  switch (uMsg)
  {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
    {
      PAINTSTRUCT ps;
      HDC hdc = BeginPaint(hwnd, &ps);

      FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW + 1));

      EndPaint(hwnd, &ps);
    }
      return 0;
  }
  return DefWindowProc(hwnd,uMsg,wParam,lParam);
}