Réponse acceptée !
J'ai fait un petit truc à la va vite, semble aller.
Me suis contenté de l'event killfocus, tu adapteras.
Une dialog avec 2 EDIT en ES_NUMBER :
WNDPROC OldProcEdNum;
void FrmtEditNbr(HWND hed)
{
char buf[20], res[20], *c, *d, a;
DWORD len;
len = GetWindowText(hed, buf, 19);
if(0 >= (long) len) return;
c = buf;
d = buf;
while(a = *c) {
c++;
if(a != 32) *d++ = a;
}
*d = 0;
len = d - buf;
c = buf;
d = res;
if(len < 4) {
while(*d = *c) {c++; d++;}
goto dispRES;
}
len %= 3;
if(len) {
do {
*d++ = *c++;
} while(--len);
*d++ = 32;
}
while(*d++ = *c++) {
if(++len == 3) {
*d++ = 32;
len = 0;
}
}
*(d - 2) = 0;
dispRES: SetWindowText(hed, res);
}
LRESULT CALLBACK EdProcNbr(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
if(mssg == WM_PASTE) return 0;
if(mssg == WM_KILLFOCUS) FrmtEditNbr(hwnd);
return CallWindowProc(OldProcEdNum, hwnd, mssg, wParam, lParam);
}
void onInitDlg(HWND hdlg)
{
HWND hctrl;
SetClassLongPtr(hdlg, GCLP_HICON, (long)LoadIcon(0, IDI_APPLICATION));
hctrl = GetDlgItem(hdlg, IDED_NBR1);
SendMessage(hctrl, EM_LIMITTEXT, 13, 0);
OldProcEdNum = (WNDPROC) SetWindowLong(hctrl, GWL_WNDPROC, (long) EdProcNbr);
hctrl = GetDlgItem(hdlg, IDED_NBR2);
SendMessage(hctrl, EM_LIMITTEXT, 13, 0);
SetWindowLong(hctrl, GWL_WNDPROC, (long) EdProcNbr);
}
ciao...
BruNews, MVP VC++