@@ -335,13 +335,38 @@ INT_PTR CALLBACK EditDWORD (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) {
335
335
return 0 ;
336
336
}
337
337
338
- INT_PTR CALLBACK EditBinary (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) {
338
+ static WNDPROC DefPhoneKeyboardProc = NULL ;
339
+ static LRESULT CALLBACK PhoneKeyboardProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
340
+ return CallWindowProc (DefPhoneKeyboardProc, hwnd, msg == WM_LBUTTONDBLCLK ? WM_LBUTTONDOWN : msg, wParam, lParam);
341
+ }
342
+
343
+ INT_PTR CALLBACK EditBinary (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
339
344
val_ed_dialog_data *params;
340
345
TCHAR s[64 ];
346
+ RECT rect;
347
+ TCITEM item;
348
+ UINT value;
349
+ BOOL valid;
341
350
switch (msg) {
351
+ case WM_ACTIVATE:
352
+ if (HWND const hwndPhoneKeyboard = GetDlgItem (hwnd, IDC_PHONEKEYBOARD)) {
353
+ if (wParam)
354
+ DefPhoneKeyboardProc = (WNDPROC)SetWindowLongPtr (hwndPhoneKeyboard, GWLP_WNDPROC, (LONG_PTR)PhoneKeyboardProc);
355
+ else
356
+ SetWindowLongPtr (hwndPhoneKeyboard, GWLP_WNDPROC, (LONG_PTR)DefPhoneKeyboardProc);
357
+ }
358
+ break ;
342
359
case WM_INITDIALOG:
343
360
SetWindowLongPtr (hwnd, DWLP_USER, lParam);
344
361
params = (val_ed_dialog_data*)lParam;
362
+ if (HWND const hwndPhoneKeyboard = GetDlgItem (hwnd, IDC_PHONEKEYBOARD)) {
363
+ GetClientRect (hwndPhoneKeyboard, &rect);
364
+ TabCtrl_SetItemSize (hwndPhoneKeyboard, rect.bottom , rect.bottom );
365
+ item.mask = TCIF_TEXT;
366
+ item.pszText = _T (" *" );
367
+ TabCtrl_InsertItem (hwndPhoneKeyboard, 0 , &item);
368
+ TabCtrl_SetCurSel (hwndPhoneKeyboard, -1 );
369
+ }
345
370
if (params->readonly ) {
346
371
SendDlgItemMessage (hwnd,IDC_HEXEDIT,EM_SETREADONLY,1 ,0 );
347
372
EnableWindow (GetDlgItem (hwnd,IDOK),0 );
@@ -379,6 +404,91 @@ INT_PTR CALLBACK EditBinary (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) {
379
404
break ;
380
405
}
381
406
return 1 ;
407
+ case WM_NOTIFY:
408
+ switch (LPNMHDR (lParam)->code ) {
409
+ case TCN_SELCHANGE:
410
+ switch (UINT const hitcode =
411
+ TabCtrl_GetCurSel (LPNMHDR (lParam)->hwndFrom ) |
412
+ TabCtrl_GetItemCount (LPNMHDR (lParam)->hwndFrom ) << 4 ) {
413
+ case 0x10 : // symbol *
414
+ SetWindowText (LPNMHDR (lParam)->hwndFrom , NULL );
415
+ GetWindowRect (LPNMHDR (lParam)->hwndFrom , &rect);
416
+ MapWindowPoints (NULL , hwnd, LPPOINT (&rect), 2 );
417
+ SetWindowPos (LPNMHDR (lParam)->hwndFrom , NULL ,
418
+ rect.left , rect.top - (rect.bottom - rect.top + 3 ) * 3 ,
419
+ (rect.bottom - rect.top + 3 ) * 3 ,
420
+ (rect.bottom - rect.top + 3 ) * 4 ,
421
+ SWP_NOZORDER);
422
+ item.mask = TCIF_TEXT;
423
+ item.pszText = _T (" #" );
424
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 1 , &item);
425
+ item.pszText = _T (" 0" );
426
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 1 , &item);
427
+ item.pszText = _T (" 9" );
428
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
429
+ item.pszText = _T (" 8" );
430
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
431
+ item.pszText = _T (" 7" );
432
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
433
+ item.pszText = _T (" 6" );
434
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
435
+ item.pszText = _T (" 5" );
436
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
437
+ item.pszText = _T (" 4" );
438
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
439
+ item.pszText = _T (" 3" );
440
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
441
+ item.pszText = _T (" 2" );
442
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
443
+ item.pszText = _T (" 1" );
444
+ TabCtrl_InsertItem (LPNMHDR (lParam)->hwndFrom , 0 , &item);
445
+ break ;
446
+ case 0xCB : // symbol #
447
+ value = GetDlgItemInt (hwnd, LPNMHDR (lParam)->idFrom , &valid, FALSE );
448
+ if (valid)
449
+ SendDlgItemMessage (hwnd, IDC_HEXEDIT, WM_USER + 4 , value, 0 );
450
+ // fall through
451
+ case 0xC9 : // symbol *
452
+ GetWindowRect (LPNMHDR (lParam)->hwndFrom , &rect);
453
+ MapWindowPoints (NULL , hwnd, LPPOINT (&rect), 2 );
454
+ SetWindowPos (LPNMHDR (lParam)->hwndFrom , NULL ,
455
+ rect.left , rect.right - rect.left + rect.top ,
456
+ (rect.bottom - rect.top ) - (rect.right - rect.left ) - 3 ,
457
+ (rect.bottom - rect.top ) - (rect.right - rect.left ) - 3 ,
458
+ SWP_NOZORDER);
459
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
460
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
461
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
462
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
463
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
464
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
465
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
466
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
467
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 0 );
468
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 1 );
469
+ TabCtrl_DeleteItem (LPNMHDR (lParam)->hwndFrom , 1 );
470
+ break ;
471
+ case 0xC0 : // digit 1
472
+ case 0xC1 : // digit 2
473
+ case 0xC2 : // digit 3
474
+ case 0xC3 : // digit 4
475
+ case 0xC4 : // digit 5
476
+ case 0xC5 : // digit 6
477
+ case 0xC6 : // digit 7
478
+ case 0xC7 : // digit 8
479
+ case 0xC8 : // digit 9
480
+ case 0xCA : // digit 0
481
+ value = GetDlgItemInt (hwnd, LPNMHDR (lParam)->idFrom , &valid, FALSE );
482
+ value *= 10 ;
483
+ if (hitcode != 0xCA )
484
+ value += hitcode - 0xBF ;
485
+ SetDlgItemInt (hwnd, LPNMHDR (lParam)->idFrom , value, FALSE );
486
+ break ;
487
+ }
488
+ TabCtrl_SetCurSel (LPNMHDR (lParam)->hwndFrom , -1 );
489
+ break ;
490
+ }
491
+ return 1 ;
382
492
}
383
493
return 0 ;
384
494
}
0 commit comments