LizDog :
Si on y va par la, il y a pas 36 maniere de coder un kernel Unix !!
Pourtant 
C'est pas comparable. Le notepad est un programme windows, il utilise une api et doit se conformer à des règles de programmation. Le kernel, lui, part de rien ...
Par ailleurs et surtout, il s'agit d'une petite application, et qui consiste essentiellement à des appels windows et à des réponses aux messages windows.
d'ailleurs voici un extrait du code source :
switch (LOWORD (wParam))
{
// Messages du menu Fichier
case IDM_FILE_NEW:
if (bNeedSave && IDCANCEL == AskAboutSave (hwnd, szTitleName))
return 0 ;
SetWindowText (hwndEdit, TEXT ("\0")) ;
szFileName[0] = '\0' ;
szTitleName[0] = '\0' ;
DoCaption (hwnd, szTitleName) ;
bNeedSave = FALSE ;
return 0 ;
case IDM_FILE_OPEN:
if (bNeedSave && IDCANCEL == AskAboutSave (hwnd, szTitleName))
return 0 ;
if (PopFileOpenDlg (hwnd, szFileName, szTitleName))
{
if (!PopFileRead (hwndEdit, szFileName))
{
OkMessage (hwnd, TEXT ("Lecture impossible du fichier %s!"),
szTitleName) ;
szFileName[0] = '\0' ;
szTitleName[0] = '\0' ;
}
}
DoCaption (hwnd, szTitleName) ;
bNeedSave = FALSE ;
return 0 ;
case IDM_FILE_SAVE:
if (szFileName[0])
{
if (PopFileWrite (hwndEdit, szFileName))
{
bNeedSave = FALSE ;
return 1 ;
}
else
{
OkMessage (hwnd, TEXT ("Écriture impossible du fichier %s"),
szTitleName) ;
return 0 ;
}
}
// échoue
case IDM_FILE_SAVE_AS:
if (PopFileSaveDlg (hwnd, szFileName, szTitleName))
{
DoCaption (hwnd, szTitleName) ;
if (PopFileWrite (hwndEdit, szFileName))
{
bNeedSave = FALSE ;
return 1 ;
}
else
{
OkMessage (hwnd, TEXT ("Échec de l'écriture du fichier %s"),
szTitleName) ;
return 0 ;
}
}
return 0 ;
case IDM_FILE_PRINT:
if (!PopPrntPrintFile (hInst, hwnd, hwndEdit, szTitleName))
OkMessage (hwnd, TEXT ("Impossible d'imprimer le fichier %s"),
szTitleName) ;
return 0 ;
case IDM_APP_EXIT:
SendMessage (hwnd, WM_CLOSE, 0, 0) ;
return 0 ;
// Messages du menu Édition
case IDM_EDIT_UNDO:
SendMessage (hwndEdit, WM_UNDO, 0, 0) ;
return 0 ;
case IDM_EDIT_CUT:
SendMessage (hwndEdit, WM_CUT, 0, 0) ;
return 0 ;
case IDM_EDIT_COPY:
SendMessage (hwndEdit, WM_COPY, 0, 0) ;
return 0 ;
case IDM_EDIT_PASTE:
SendMessage (hwndEdit, WM_PASTE, 0, 0) ;
return 0 ;
case IDM_EDIT_CLEAR:
SendMessage (hwndEdit, WM_CLEAR, 0, 0) ;
return 0 ;
case IDM_EDIT_SELECT_ALL:
SendMessage (hwndEdit, EM_SETSEL, 0, -1) ;
return 0 ;
// Messages du menu Rechercher
case IDM_SEARCH_FIND:
SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ;
hDlgModeless = PopFindFindDlg (hwnd) ;
return 0 ;
case IDM_SEARCH_NEXT:
SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ;
if (PopFindValidFind ())
PopFindNextText (hwndEdit, &iOffset) ;
else
hDlgModeless = PopFindFindDlg (hwnd) ;
return 0 ;
case IDM_SEARCH_REPLACE:
SendMessage (hwndEdit, EM_GETSEL, 0, (LPARAM) &iOffset) ;
hDlgModeless = PopFindReplaceDlg (hwnd) ;
return 0 ;
case IDM_FORMAT_FONT:
if (PopFontChooseFont (hwnd))
PopFontSetFont (hwndEdit) ;
return 0 ;
// Messages du menu Aide
case IDM_HELP:
OkMessage (hwnd, TEXT ("L'aide n'est pas encore mise en place !"),
TEXT ("\0")) ;
return 0 ;
case IDM_APP_ABOUT:
DialogBox (hInst, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
return 0 ;
}
break ;
case WM_CLOSE:
if (!bNeedSave || IDCANCEL != AskAboutSave (hwnd, szTitleName))
DestroyWindow (hwnd) ;
return 0 ;
Y'aura tjs des case (ou des if ... else if ...) pour traiter les différents messages, qui seront tjs les mêmes.
Et puis même si ça peut être codé différemment (un peu seulement), c'est qd même très bizarre que dans un cas, on ait env. 800 lignes, et de l'autre, près de 6000 lignes !!!!!!!
Bref, cette histoire des 59XX lignes pour le notepad, c'est du mytho.