バグらしきものを見つけました。
GetDlgItemTextでsizeof(変数)-1という使い方を要所要所で
しています。
文字列の終端分を確保する目的のようですが、実際に文字列
を取得するとさらに1文字削られてしまいます。
たとえば、
IDC_EDIT_ABC 10文字項目
char abc[10+1];
GetDlgItemText(... abc, sizeof(abc) - 1, ...);
のときに、
"1234567890"と入力して項目を取得すると、
"123456789"までしか入りません。