[vc++/win32] subclassed edit control met numerieke waarden

Pagina: 1
Acties:

  • cenix
  • Registratie: September 2001
  • Laatst online: 17-05 08:56
Ik heb een edit control gesubclassed en nu wil ik zorgen dat ik alleen maar numerieke karakters kan invoeren met daarbij de +, -, e.d.
Nu gebruik ik hiervoor de volgende code in m'n callback handler

code:
1
2
3
if (isdigit(wParam) || VK_SUBTRACT || VK_ADD)
    // do nothing
    break;

echter zodra ik de VK_SUBTRACT en VK_ADD erbij zet accepteert de edit control alle karakters weer 8)7
Verwijder ik deze zodat alleen de isdigit(wParam) overblijft, dan kanik alleen maar numerieke karakters plaatsen.
Doe ik iets verkeerd of wat?

Ik gebruik vc++ (6.0) en plain win32 code (geen MFC)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
Lijkt me een redelijk stomme fout ;)

code:
1
2
3
if (isdigit(wParam) || wParam == VK_SUBTRACT || wParam == VK_ADD)
    // do nothing
    break;


if(VK_SUBTRACT) levert namelijk altijd true op ;)

[ Voor 15% gewijzigd door MisterData op 12-09-2004 19:43 ]


  • cenix
  • Registratie: September 2001
  • Laatst online: 17-05 08:56
Hmm.. dat is inderdaad al een zeer stomme fout :X (ga me ff diep schamen), maar helaar dat lost het probleem niet op, hij accepteert nog steeds alleen maar numerieke karakters, er wordt niet op een VK_ gereageerd

  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
volgens mij was het zo dat de laagste WORD van de wParam (of de hoogste) de keycode was en de andere helft de modifiers. Doe eens LOWORD(wParam)==VK_SUBTRACT oid proberen? Dat zou moeten werken :)

En anders dus HIWORD(wParam) :)

edit:
niet dus...

Kijk maar eens hier op MSDN. Gebruik je TranslateMessage wel enzo?

[ Voor 48% gewijzigd door MisterData op 12-09-2004 20:23 ]


  • cenix
  • Registratie: September 2001
  • Laatst online: 17-05 08:56
Jawel,
code:
1
2
3
4
5
6
7
8
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hWnd, &msg))    
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

ga ik even met wParam aan de slag, morgen.. eerst even eten en daarna weer weg dus beetje weinig tijd nu..

bedankt iig

[ Voor 47% gewijzigd door cenix op 12-09-2004 20:50 ]


  • cenix
  • Registratie: September 2001
  • Laatst online: 17-05 08:56
Gewoon om het compleet te maken, ik heb het momenteel zo opgelost:
(niet de meest nette code, maar goed)

code:
1
2
3
4
5
6
7
8
9
10
11
12
switch(wParam)
{
    case 0x30:  // 0
    case 0x31:
    ..
    case 0x39:  // 9
    case 0x2B:  // +
    case 0x2D:  // -
    case 0x2A:  // *
        // do nothing
        break;
}
Pagina: 1