CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks
          可編輯列表控件

          要實(shí)現(xiàn)ListCtrl編輯功能,其實(shí)也簡單,只需要在響應(yīng)一個(gè)開始編輯的消息時(shí)(比如:鼠標(biāo)左鍵雙擊控件時(shí))獲取當(dāng)前點(diǎn)擊的Item和SubItem的序號,獲得它的位置,然后在這個(gè)位置顯示一個(gè)CEdit控件就可以實(shí)現(xiàn)編輯功能。以下詳細(xì)介紹實(shí)現(xiàn):

          //響應(yīng)鼠標(biāo)雙擊

          void   CEditListCtrl::OnLButtonDblClk(UINT   nFlags,   CPoint   point)  

                CRect   rcCtrl; 
                LVHITTESTINFO   lvhti; 
                lvhti.pt   =   point; 
                int   nItem   =   CListCtrl::SubItemHitTest(&lvhti);//   測試鼠標(biāo)當(dāng)前選中的ITEM和SUBITEM 
                if(nItem   ==   -1) 
                    return; 
                int   nSubItem   =   lvhti.iSubItem; 
                CListCtrl::GetSubItemRect(nItem,nSubItem,LVIR_LABEL,rcCtrl);//獲取選中位置的區(qū)域   

                //顯示EDIT 

                ShowEdit(TRUE,nItem,nSubItem,rcCtrl); 

                CListCtrl::OnLButtonDblClk(nFlags,   point);
          }

          //顯示EDIT

          void   CEditListCtrl::ShowEdit(BOOL   bShow,int   nItem,int   nIndex,CRect   rcCtrl)
          {

          //只需要?jiǎng)?chuàng)建一次EDIT控件,如果控件沒有創(chuàng)建,就創(chuàng)建EDIT.如果控件已經(jīng)創(chuàng)建了,就控制是顯示還是隱藏
              if(m_edit.m_hWnd   ==   NULL)
              {
                m_edit.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(0,0,0,0),this,IDC_EDIT);
                m_edit.ShowWindow(SW_HIDE);
                CFont   tpFont;
                tpFont.CreateStockObject(DEFAULT_GUI_FONT);
                m_edit.SetFont(&tpFont);
                tpFont.DeleteObject();
              }
              if(bShow   ==   TRUE)
            {
                  CString   strItem   =   CListCtrl::GetItemText(nItem,nIndex);
                  m_edit.MoveWindow(rcCtrl);
                  m_edit.ShowWindow(SW_SHOW);
                  m_edit.SetWindowText(strItem);
                  ::SetFocus(m_edit.GetSafeHwnd());
                  m_edit.SetSel(-1);  
                  m_edit.SetCtrlData(MAKEWPARAM(nIndex,nItem));  
                }
                    else
                          m_edit.ShowWindow(SW_HIDE);
            }



          //編輯停止的時(shí)候

          /*

          本例在實(shí)現(xiàn)的時(shí)候,子類化了一個(gè)EDIT類CListCtrlEdit。

          當(dāng)EDIT控件失去焦點(diǎn)的時(shí)候,將發(fā)送一個(gè)WM_USER_EDIT_END消息到ListCtrl

          ListCtrl的響應(yīng)函數(shù)如下

          */

          void   CEditListCtrl::OnEditEnd(WPARAM   wParam,LPARAM   lParam)
          {
          if(wParam   ==   TRUE)
          {
          CString   strText(_T( " "));
          m_edit.GetWindowText(strText);
          DWORD   dwData   =   m_edit.GetCtrlData();
          int   nItem=   dwData> > 16;
          int   nIndex   =   dwData&0x0000ffff;
          CListCtrl::SetItemText(nItem,nIndex,strText);
          }
          else
          {

          }

          if(lParam   ==   FALSE)
          m_edit.ShowWindow(SW_HIDE);

          posted on 2008-06-20 23:15 CONAN 閱讀(231) 評論(0)  編輯  收藏 所屬分類: Linux/Unix
          主站蜘蛛池模板: 凤台县| 葵青区| 葫芦岛市| 祁连县| 织金县| 神农架林区| 东城区| 蚌埠市| 平阳县| 桦甸市| 克山县| 霸州市| 馆陶县| 昌江| 久治县| 志丹县| 始兴县| 滨海县| 馆陶县| 信宜市| 邹平县| 台中县| 富顺县| 铜山县| 永德县| 集贤县| 凤凰县| 赤峰市| 郧西县| 雅安市| 鄂托克前旗| 天祝| 连江县| 桐柏县| 施秉县| 西乡县| 基隆市| 甘谷县| 开远市| 饶平县| 东阿县|