WinAPI: Окно закрывается при активации Edit - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Делаю программу на Pelles с, не могу понять почему окно закрывается пр активации Edit на форме добавления элемента в список.

Решение задачи: «WinAPI: Окно закрывается при активации Edit»

textual
Листинг программы
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <tchar.h>
#include <stdio.h>
#include "main.h"
#include "processing_function_structure.h"
 
/** Prototypes **************************************************************/
 
static INT_PTR CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM);
void Print (SPISOK *spisok);
static LRESULT WINAPI AddDlgProc(HWND, UINT, WPARAM, LPARAM);
 
/** Global variables ********************************************************/
 
static HANDLE ghInstance;
static HWND hListBox;
SPISOK baza;
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    INITCOMMONCONTROLSEX icc;
    WNDCLASSEX wcx;
    ghInstance = hInstance;
    icc.dwSize = sizeof(icc);
    icc.dwICC = ICC_WIN95_CLASSES; 
    InitCommonControlsEx(&icc);
    wcx.cbSize = sizeof(wcx);
    if (!GetClassInfoEx(NULL, MAKEINTRESOURCE(32770), &wcx))
        return 0;
    wcx.hInstance = hInstance;
    wcx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDR_ICO_MAIN));
    wcx.lpszClassName = _T("_5555555Class");
    if (!RegisterClassEx(&wcx))
        return 0;
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)MainDlgProc);
}
 
static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_INITDIALOG:
            hListBox=GetDlgItem(hwndDlg,ID_ListB);
            return TRUE;
 
        case WM_SIZE:
            return TRUE;
 
        case WM_COMMAND:
            switch (GET_WM_COMMAND_ID(wParam, lParam))
            {
                case IDOK:
                    EndDialog(hwndDlg, TRUE);
                    return TRUE;
                case B_Add:
                {
                    if(DialogBox(ghInstance, MAKEINTRESOURCE(F_Add),hwndDlg,(DLGPROC)AddDlgProc))
                    Print(&baza);
                   break;
                }
            }
            break;
        case WM_CLOSE:
            EndDialog(hwndDlg, 0);
            return TRUE;
    }
 
    return FALSE;
}
//********************************************************************************
 
 
void Print (SPISOK *spisok)
 {
    char s[150];
    SendMessage(hListBox,LB_RESETCONTENT,0,0);
    spisok->curr=spisok->head;
    while (spisok->curr)
    {
        sprintf(s,"%32s %12s %7s %7s",
        spisok->curr->firm1.FIO,spisok->curr->firm1.DATE,
        spisok->curr->firm1.TimeOfArrival,spisok->curr->firm1.TimeCare);
        SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)s);
        spisok->curr=spisok->curr->next;
      } 
 }
 
 
///****************************************************************************************************************
static LRESULT CALLBACK AddDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
   Firma tmp;
   char s[30];
   switch (uMsg)
    {
     case WM_INITDIALOG:
    {
        return TRUE;
    }
     case WM_COMMAND:
    {
       switch (GET_WM_COMMAND_ID(wParam, lParam))
        case IDOK:
         {
              GetDlgItemText(hDlg,E_FIO,tmp.FIO,32);
              {//******************Проверка ФИО
                if(strlen(tmp.FIO)>30)
                {
                    MessageBox(hDlg,"А покороче никак?",NULL,MB_OK);
                    return FALSE;
                }
                if(strlen(tmp.FIO)<1)
                {
                    MessageBox(hDlg,"Безымянный?",NULL,MB_OK);
                    return FALSE;
                }
              }//********************Окончание проверки ФИО
              GetDlgItemText(hDlg,E_DATE,s,12);
              {//****************Проверка даты***********************
                int day, month, year; 
                if(s[2]!='.' || s[5]!='.')  // Проверяем корректность формата
                {
                    MessageBox(hDlg,"Неверно введена дата",NULL,MB_OK);
                    return FALSE;
                }   
                // Преобразуем строковые символы в числа
                day = atoi(s);
                month = atoi(s+3);
                year = atoi(s+6); 
                if((month==4 || month==6 || month==9 || month==11) && day>30) // если слишком много дней в коротком месяце
                {
                    MessageBox(hDlg,"Неверно введена дата",NULL,MB_OK);
                    return 0;
                } 
                if(month==2 && day>28)  // отдельно проверяем месяц февраль
                {
                    MessageBox(hDlg,"Неверно введена дата",NULL,MB_OK);
                    return FALSE;
                } 
                if(day>31) // если введен слишком большой день
                {
                    MessageBox(hDlg,"Неверно введена дата",NULL,MB_OK);
                    return FALSE;
                } 
                if(month>12) // если введен слишком большой месяц
                {
                    MessageBox(hDlg,"Неверно введена дата",NULL,MB_OK);
                    return FALSE;
                }
                strcpy(tmp.DATE,s);
              }//****************Окончание проверки даты
              GetDlgItemText(hDlg,E_TimeOfArrival,s,7);
              {//****************Проверка времени прихода
                int minute, hour; 
                if(s[2]!=':')  // Проверяем корректность формата 
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return 0;
                } 
                // Преобразуем строковые символы в числа
                hour = atoi(s);
                minute = atoi(s+3);      
                if(minute>60) // если введен слишком большой день
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return FALSE;
                } 
                if(hour>24) // если введен слишком большой месяц
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return FALSE;
                }
                strcpy(tmp.TimeOfArrival,s);      
              }//****************Окончание проверки времени прихода
              GetDlgItemText(hDlg,E_TimeCare,s,7);
              {//****************Проверка времени ухода
                int minute1, hour1; 
                if(s[2]!=':')  // Проверяем корректность формата
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return 0;
                } 
                // Преобразуем строковые символы в числа
                hour1 = atoi(s);
                minute1 = atoi(s+3);         
                if(minute1>60) // если введен слишком большой день
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return FALSE;
                } 
                if(hour1>24) // если введен слишком большой месяц
                {
                    MessageBox(hDlg,"Неверно введено время",NULL,MB_OK);
                    return FALSE;
                }
                strcpy(tmp.TimeCare,s);
              }//************************Окончание времени ухода  
              if (Add(&baza,tmp))
              {
                 MessageBox(hDlg,"Не удалось добавить элемент",NULL,MB_OK);
                 return FALSE;
              }
              EndDialog(hDlg, 1);
              return TRUE;
         }
         case IDCANCEL:
         {
              EndDialog(hDlg, 1);
              return TRUE;
         }
    }
     break;
     case WM_CLOSE:
          EndDialog(hDlg, 1);
          return TRUE;
    }
  return FALSE;
 }

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы