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; }