// 设置控件的焦点 BOOL CDuiEdit::SetControlFocus(BOOL bFocus) { __super::SetControlFocus(bFocus); enumButtonState buttonState = m_buttonState; enumButtonState editState = m_EditState; if(!bFocus) { m_bDown = false; m_buttonState = enBSNormal; m_EditState = enBSNormal; HideEdit(); }else { m_bDown = true; m_buttonState = enBSDown; m_EditState = enBSDown; ShowEdit(); } bool bIsDraw = buttonState != m_buttonState || editState != m_EditState; if(bIsDraw) { ::InvalidateRect(m_hWnd, &m_rc, true); } return bIsDraw; }
BOOL CDuiEdit::OnControlLButtonDown(UINT nFlags, CPoint point) { enumButtonState buttonState = m_buttonState; enumButtonState editState = m_EditState; if(!m_bIsDisable) { if(m_rc.PtInRect(point)) { CRect rc; rc.left = m_rc.right - m_sizeSmallImage.cx - 2; rc.top = m_rc.top + (m_rc.Height() - m_sizeSmallImage.cy) / 2; rc.right = rc.left + m_sizeSmallImage.cx; rc.bottom = rc.top + m_sizeSmallImage.cy; if(rc.PtInRect(point)) // 点击的是编辑框右部的小按钮图片 { if(m_bIsSmallButton) // 小图片作为按钮才进行处理 { m_bDown = !m_bDown; m_bDownTemp = true; if(m_bDown) { m_buttonState = enBSDown; } else { m_buttonState = enBSHover; } SendMessage(m_uID, CONTROL_BUTTON, MSG_BUTTON_DOWN); HideEdit(); } } else { if(m_bDown) { m_bDown = false; m_buttonState = enBSHover; } ShowEdit(); SendMessage(m_uID, CONTROL_EDIT, MSG_BUTTON_DOWN); } } else { m_buttonState = enBSNormal; m_EditState = enBSNormal; } } if(buttonState != m_buttonState || editState != m_EditState) { UpdateControl(); } return buttonState != m_buttonState || editState != m_EditState; }
void CEditListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { CRect rcCtrl; LVHITTESTINFO lvhti; lvhti.pt = point; int nItem = CListCtrl::SubItemHitTest(&lvhti); if(nItem == -1) return; int nSubItem = lvhti.iSubItem; CListCtrl::GetSubItemRect(nItem,nSubItem,LVIR_LABEL,rcCtrl); ShowEdit(TRUE,nItem,nSubItem,rcCtrl); CListCtrl::OnLButtonDblClk(nFlags, point); }
BOOL CListCtrlEditBase::PreTranslateMessageEx(MSG* pMsg) { CWnd *pWnd; if(m_pInEdit == NULL) return false; if(!m_pParentList) return false; switch (pMsg->message) { case WM_USER_SHOW_EDIT: ShowEdit((int)pMsg->wParam, (int)pMsg->lParam); return true; case WM_KEYDOWN: if(( pMsg->wParam == VK_RETURN || pMsg->wParam == VK_TAB) && m_pInEdit->m_hWnd!= NULL && m_pParentList != NULL) { DWORD dwStyle = m_pInEdit->GetStyle(); if((dwStyle&WS_VISIBLE) == WS_VISIBLE) { OnEditEnd(); CRect rcCtrl; int nItem; int nSub; if(FALSE == Key_Ctrl(nItem,nSub)) Key_Shift(nItem,nSub); m_pParentList->GetSubItemRect(nItem,nSub,LVIR_LABEL,rcCtrl); CPoint pt(rcCtrl.left+1,rcCtrl.top+1); //ShowEdit(nItem, nSub); /*POSITION pos = m_pParentList->GetFirstSelectedItemPosition(); if (pos == NULL) { } else { while (pos) { int ntpItem = m_pParentList->GetNextSelectedItem(pos); m_pParentList->SetItemState(ntpItem,0,LVIS_SELECTED); } } //m_pParentList->SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED); */ SetSelectPos(); return TRUE; } } else if(pMsg->wParam == VK_UP) { if (m_nCurrentItem > 0) m_nCurrentItem--; pWnd = m_CtrlMap.GetSubWnd(m_pParentList, m_nCurrentSubItem); if (pWnd ) { pWnd->PostMessage(WM_USER_SHOW_EDIT, m_nCurrentItem, m_nCurrentSubItem); SetSelectPos(); } return TRUE; } else if(pMsg->wParam == VK_DOWN) { if (m_nCurrentItem < m_pParentList->GetItemCount() - 1) m_nCurrentItem++; pWnd = m_CtrlMap.GetSubWnd(m_pParentList, m_nCurrentSubItem); if (pWnd ) { pWnd->PostMessage(WM_USER_SHOW_EDIT, m_nCurrentItem, m_nCurrentSubItem); SetSelectPos(); } return TRUE; } else if(pMsg->wParam == VK_RETURN) { CWnd* pParent = m_pInEdit->GetParent(); m_bExchange = TRUE; //::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,m_bExchange,0); OnEditEnd(); m_pInEdit->ShowWindow(SW_HIDE); return true; } else if(pMsg->wParam == VK_ESCAPE) { CWnd* pParent = m_pInEdit->GetParent(); m_bExchange = FALSE; m_pInEdit->ShowWindow(SW_HIDE); return true; //::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,m_bExchange,0); } }//end switch return false; }
BOOL CListCtrlComboBox::PreTranslateMessageEx(MSG* pMsg) { if(m_pInEdit == NULL) return false; if(!m_pParentList) return false; if (pMsg->message == WM_USER_SHOW_EDIT) { ShowEdit((int)pMsg->wParam, (int)pMsg->lParam); return true; } if(pMsg->message == WM_KEYDOWN) { if((pMsg->wParam == VK_RETURN ||pMsg->wParam == VK_TAB) && pMsg->hwnd != NULL && m_pParentList != NULL) { DWORD dwStyle = GetStyle(); if((dwStyle&WS_VISIBLE) == WS_VISIBLE) { OnEditEnd(); CRect rcCtrl; int nItem; int nSub; if(FALSE == Key_Ctrl(nItem,nSub)) Key_Shift(nItem,nSub); m_pParentList->GetSubItemRect(nItem,nSub,LVIR_LABEL,rcCtrl); CPoint pt(rcCtrl.left+1,rcCtrl.top+1); //ShowEdit(nItem, nSub); POSITION pos = m_pParentList->GetFirstSelectedItemPosition(); if (pos == NULL) { } else { while (pos) { int ntpItem = m_pParentList->GetNextSelectedItem(pos); m_pParentList->SetItemState(ntpItem,0,LVIS_SELECTED); } } // m_pParentList->SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED); return TRUE; } } /* else if(pMsg->wParam == VK_RETURN) { CWnd* pParent = this->GetParent(); m_bExchange = TRUE; //::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,m_bExchange,0); OnEditEnd(); ShowWindow(SW_HIDE); } */ else if(pMsg->wParam == VK_UP) { int i = GetCurSel(); if (i > 0) SetCurSel(i - 1); return TRUE; } else if(pMsg->wParam == VK_DOWN) { int i = GetCurSel(); if (i < GetCount() - 1) SetCurSel(i + 1); return TRUE; } else if(pMsg->wParam == VK_ESCAPE) { CWnd* pParent = this->GetParent(); m_bExchange = FALSE; ShowWindow(SW_HIDE); return TRUE; //::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,m_bExchange,0); } } return FALSE; }