Changeset 3584 for trunk/src/user32/edit.cpp
- Timestamp:
- May 22, 2000, 7:21:11 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/edit.cpp
r3153 r3584 1 /* $Id: edit.cpp,v 1.3 8 2000-03-18 16:13:26cbratschi Exp $ */1 /* $Id: edit.cpp,v 1.39 2000-05-22 17:21:07 cbratschi Exp $ */ 2 2 /* 3 3 * Edit control … … 9 9 * Copyright 1999 Christoph Bratschi 10 10 * 11 * Corel version: 20000 31711 * Corel version: 20000513 12 12 * (WINE version: 991212) 13 13 * … … 109 109 BOOL bCaptureState; /* flag indicating whether mouse was captured */ 110 110 BOOL bEnableState; /* flag keeping the enable state */ 111 HWND hwndListBox; /* handle of ComboBox's listbox or NULL */ 111 112 /* 112 113 * only for multi line controls … … 590 591 case WM_GETDLGCODE: 591 592 //DPRINTF_EDIT_MSG32("WM_GETDLGCODE"); 592 result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS; 593 if (es->style & ES_WANTRETURN) 593 result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS; 594 595 if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN)) 594 596 { 595 LPMSG msg = (LPMSG)lParam; 596 if (msg && (msg->message == WM_KEYDOWN) && (msg->wParam == VK_RETURN)) 597 int vk = (int)((LPMSG)lParam)->wParam; 598 599 if ((GetWindowLongA(hwnd,GWL_STYLE) & ES_WANTRETURN) && vk == VK_RETURN) 600 { 597 601 result |= DLGC_WANTMESSAGE; 602 } 603 else if (es->hwndListBox && (vk == VK_RETURN || vk == VK_ESCAPE)) 604 { 605 if (SendMessageA(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0)) 606 result |= DLGC_WANTMESSAGE; 607 } 598 608 } 599 609 break; … … 601 611 case WM_CHAR: 602 612 //DPRINTF_EDIT_MSG32("WM_CHAR"); 613 if (((CHAR)wParam == VK_RETURN || (CHAR)wParam == VK_ESCAPE) && es->hwndListBox) 614 { 615 HWND hwndParent = GetParent(hwnd); 616 617 if (SendMessageA(hwndParent, CB_GETDROPPEDSTATE, 0, 0)) 618 SendMessageA(hwndParent, WM_KEYDOWN, wParam, 0); 619 break; 620 } 603 621 EDIT_WM_Char(hwnd, es, (CHAR)wParam, (DWORD)lParam); 604 622 break; … … 3369 3387 * 3370 3388 */ 3371 static BOOL EDIT_CheckCombo(HWND hwnd, UINT msg, INT key, DWORD key_data) 3372 { 3373 HWND hLBox; 3374 3375 /******************************************************************** 3376 * This if statement used to check to see if the parent of the 3377 * edit control was a 'combobox' by comparing the ATOM of the parent 3378 * to a table of internal window control ATOMs. However, this check 3379 * would fail if the parent was a superclassed combobox (Although 3380 * having the same basic functionality of a combobox, it has a 3381 * different name and ATOM, thus defeating this check.) 3382 * 3383 * The safe way to determine if the parent is a combobox is to send it 3384 * a message only a combo box would understand. I send it a message 3385 * CB_GETCOUNT, if I get 0 then the parent is not a combobox - 3386 * return FALSE. If I get > 0, then the parent IS a combobox 3387 * (or sub/super classed derrivative thereof) 3388 ********************************************************************/ 3389 #if 0 //CB: our code 3390 if (GetClassWord(GetParent(hwnd),GCW_ATOM) == GlobalFindAtomA(COMBOBOXCLASSNAME) && 3391 (hLBox = COMBO_GetLBWindow(GetParent(hwnd)))) 3392 #else 3393 if ( 3394 ((SendMessageA(GetParent(hwnd), CB_GETCOUNT, 0, 0)) > 0) && 3395 (hLBox = COMBO_GetLBWindow(GetParent(hwnd))) 3396 ) 3397 #endif 3398 { 3399 HWND hCombo = GetParent(hwnd); 3400 BOOL bUIFlip = TRUE; 3401 3402 //TRACE_(combo)("[%04x]: handling msg %04x (%04x)\n", 3403 // wnd->hwndSelf, (UINT16)msg, (UINT16)key); 3404 3405 switch (msg) { 3406 case WM_KEYDOWN: /* Handle F4 and arrow keys */ 3407 if (key != VK_F4) { 3408 bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0); 3409 if (SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0)) 3410 bUIFlip = FALSE; 3411 } 3412 if (!bUIFlip) 3413 SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)key, 0); 3414 else { 3415 /* make sure ComboLBox pops up */ 3416 SendMessageA(hCombo, CB_SETEXTENDEDUI, 0, 0); 3417 SendMessageA(hLBox, WM_KEYDOWN, VK_F4, 0); 3418 SendMessageA(hCombo, CB_SETEXTENDEDUI, 1, 0); 3419 } 3420 break; 3421 case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */ 3422 bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0); 3423 if (bUIFlip) { 3424 bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0); 3425 SendMessageA(hCombo, CB_SHOWDROPDOWN, (bUIFlip) ? FALSE : TRUE, 0); 3426 } else 3427 SendMessageA(hLBox, WM_KEYDOWN, VK_F4, 0); 3428 break; 3429 } 3430 return TRUE; 3431 } 3432 return FALSE; 3433 } 3434 3389 static BOOL EDIT_CheckCombo(HWND hwnd, EDITSTATE *es, UINT msg, INT key, DWORD key_data) 3390 { 3391 HWND hLBox = es->hwndListBox; 3392 HWND hCombo; 3393 BOOL bDropped; 3394 int nEUI; 3395 3396 if (!hLBox) 3397 return FALSE; 3398 3399 hCombo = GetParent(hwnd); 3400 bDropped = TRUE; 3401 nEUI = 0; 3402 3403 //TRACE_(combo)("[%04x]: handling msg %04x (%04x)\n", 3404 // wnd->hwndSelf, (UINT16)msg, (UINT16)key); 3405 3406 if (key == VK_UP || key == VK_DOWN) 3407 { 3408 if (SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0)) 3409 nEUI = 1; 3410 3411 if (msg == WM_KEYDOWN || nEUI) 3412 bDropped = (BOOL)SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0); 3413 } 3414 3415 switch (msg) 3416 { 3417 case WM_KEYDOWN: 3418 if (!bDropped && nEUI && (key == VK_UP || key == VK_DOWN)) 3419 { 3420 /* make sure ComboLBox pops up */ 3421 SendMessageA(hCombo, CB_SETEXTENDEDUI, FALSE, 0); 3422 key = VK_F4; 3423 nEUI = 2; 3424 } 3425 3426 SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)key, 0); 3427 break; 3428 3429 case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */ 3430 if (nEUI) 3431 SendMessageA(hCombo, CB_SHOWDROPDOWN, bDropped ? FALSE : TRUE, 0); 3432 else 3433 SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)VK_F4, 0); 3434 break; 3435 } 3436 3437 if(nEUI == 2) 3438 SendMessageA(hCombo, CB_SETEXTENDEDUI, TRUE, 0); 3439 3440 return TRUE; 3441 } 3435 3442 3436 3443 /********************************************************************* … … 3456 3463 case VK_F4: 3457 3464 case VK_UP: 3458 if (EDIT_CheckCombo(hwnd, WM_KEYDOWN, key, key_data)) 3459 break; 3460 if (key == VK_F4) 3465 if (EDIT_CheckCombo(hwnd,es, WM_KEYDOWN, key, key_data) || key == VK_F4) 3461 3466 break; 3462 3467 /* fall through */ … … 3471 3476 break; 3472 3477 case VK_DOWN: 3473 if (EDIT_CheckCombo(hwnd, WM_KEYDOWN, key, key_data))3478 if (EDIT_CheckCombo(hwnd,es, WM_KEYDOWN, key, key_data)) 3474 3479 break; 3475 3480 /* fall through */ … … 3491 3496 if (es->style & ES_MULTILINE) 3492 3497 EDIT_MovePageUp_ML(hwnd, es, shift); 3498 else 3499 EDIT_CheckCombo(hwnd, es, WM_KEYDOWN, key, key_data); 3493 3500 break; 3494 3501 case VK_NEXT: 3495 3502 if (es->style & ES_MULTILINE) 3496 3503 EDIT_MovePageDown_ML(hwnd, es, shift); 3504 else 3505 EDIT_CheckCombo(hwnd, es, WM_KEYDOWN, key, key_data); 3497 3506 break; 3498 3507 case VK_DELETE: … … 3709 3718 } 3710 3719 3720 if (es->style & ES_COMBO) 3721 es->hwndListBox = GetDlgItem(cs->hwndParent, ID_CB_LISTBOX); 3722 3711 3723 if (es->style & ES_MULTILINE) { 3712 3724 es->buffer_size = BUFSTART_MULTI; … … 4076 4088 return 0; 4077 4089 } else if ((key == VK_UP) || (key == VK_DOWN)) 4078 if (EDIT_CheckCombo(hwnd, WM_SYSKEYDOWN, key, key_data)) 4090 { 4091 if (EDIT_CheckCombo(hwnd,es, WM_SYSKEYDOWN, key, key_data)) 4079 4092 return 0; 4093 } 4080 4094 return DefWindowProcA(hwnd, WM_SYSKEYDOWN, (WPARAM)key, (LPARAM)key_data); 4081 4095 }
Note:
See TracChangeset
for help on using the changeset viewer.