程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用C++ Builder創建組合框

用C++ Builder創建組合框

編輯:C++入門知識

  本文介紹了在Win 98環境下,如何利用C++ Builder和Windows的Api函數創建滿足用戶特定需求的Combo框,並且通過Api函數擴充了C++ Builer標准組件的功能。

  在C++ Builder 下,其所帶的Combo控件當內容發生變化時將調用OnChange的Combo1Change事件句柄。這時事件句柄將向系統發送一條基於Combo的CB_FINDSTRING消息,在消息中傳遞編輯字符串內容。該消息的SendMessage返回值是下拉框中第一個匹配條目的Index值,如果在下拉列表框中找到相匹配的條目,Comobo1Change句柄將發送一條基於Combo的CB_SETEDITSEL消息,該消息的參數確定從插入點到字符串結尾的部分將被選擇。結果是被選中的部分是作為消息搜索結果顯示在Combo的Text值中。

  具體實現:

  1、在進入C++ Builder 4.0以後,在窗體上畫一個CmoboBox1,在Items中輸入anlantic faloncs、China、Japanese、Amercia等字符串。

  2、創建ComboBox1的OnChange句柄,並填入如下代碼:

  

  void _fastcall TForm1::ComboBox1Change(TObject *Sender)
   {
    String value = ComboBox1->Text ;
    if (lastkey == '\b' || lastkey == VK_DELETE)// 如果用戶輸入的是Delete鍵或是Tab鍵,搜索不進行//
     {
      lastkey = 0 ;
     return ;
     }
    lastkey = 0 ;
    if (ComboBox1->SelStart != value.Length ())//如果用戶的光標在輸入字符串的中間,搜索不進行//
      return ;
    int index = SendMessage (ComboBox1->Handle, CB_FINDSTRING, -1, (LPARAM) value.c_str ()) ;
    //在下來列表框尋找與用戶輸入字符串相匹配的字符串的索引值//
    if (index >= 0)//如果索引值>0//
     {
     ComboBox1->ItemIndex = index ;
     SendMessage (ComboBox1->Handle, CB_SETEDITSEL, 0, MAKELPARAM (value.Length (), -1)) ;//發送CB_SETEDITSEL消息//
     }
    }

  3、創建ComboBox1的KeyDown句柄,並填入如下代碼:

  

   void _fastcall TForm1::ComboBox1KeyDown(TObject *Sender, WORD &Key,TShiftState Shift)
   {
   lastkey = Key ;//保存最後的鍵//
   }

  4、在頭文件中增加如下變量:

  Private:WORD LastKey;

  5、編譯運行。當用戶輸入在輸入框中輸入Chi時,便出現China整個字符串。

  以上方法在Pwin 98和C++Builder 4.0 Enterprise版中實現。

  有時想讓控件實現一些不大可能的功能,試試Windows的Api 函數,或許它可以讓你夢想成真。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved