CComboBox使用技巧:

一 :MFC中操作如下:

1. CComboBox風格

  1. CBS_AUTOHSCROLL //自動水平滾動條
  2. CBS_DISABLENOSCROLL //選中時始終顯示滾動條
  3. CBS_DROPDOWN //下拉式
  4. CBS_DROPDOWNLIST //下拉列表
  5. CBS_HASSTRINGS //爲字符串提供GetText()函數
  6. CBS_LOWERCASE //轉換爲小寫
  7. CBS_NOINTEGRALHEIGHT //指定組合框由應用程序來指定大小的
  8. CBS_OEMCONVERT //OEM字符集轉換
  9. CBS_OWNERDRAWFIXED //所有項目的高度是一樣的
  10. CBS_OWNERDRAWVARIABLE //指定單一項目的高度
  11. CBS_SIMPLE //簡單風格
  12. CBS_SORT //排序
  13. CBS_UPPERCASE //轉換爲大寫
  1. CBS_AUTOHSCROLL           //自動水平滾動條  
  2. CBS_DISABLENOSCROLL   //選中時始終顯示滾動條  
  3. CBS_DROPDOWN              //下拉式  
  4. CBS_DROPDOWNLIST       //下拉列表  
  5. CBS_HASSTRINGS             //爲字符串提供GetText()函數  
  6. CBS_LOWERCASE             //轉換爲小寫  
  7. CBS_NOINTEGRALHEIGHT //指定組合框由應用程序來指定大小的  
  8. CBS_OEMCONVERT           //OEM字符集轉換  
  9. CBS_OWNERDRAWFIXED  //所有項目的高度是一樣的  
  10. CBS_OWNERDRAWVARIABLE //指定單一項目的高度  
  11. CBS_SIMPLE                     //簡單風格  
  12. CBS_SORT                        //排序  
  13. CBS_UPPERCASE              //轉換爲大寫  

2. 初始化數據

1).在Combo Box控件屬性的Data標籤裏面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。

2).在程序初始化時動態添加

  1. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp爲CString
  1. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp爲CString  

3. 刪除指定行

  1. DeleteString( UINT nIndex )//刪除指定行
  1. DeleteString( UINT nIndex ) //刪除指定行  

4.插入指定位置

  1. InsertString( int nIndex,LPCTSTR lpszItem )//將行插入到指定位置
  1. InsertString( int nIndex, LPCTSTR lpszItem ) //將行插入到指定位置  

5.刪除所有項

  1. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除ID爲IDC_COMBO_CF現有所有內容
  1. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent(); //消除ID爲IDC_COMBO_CF現有所有內容  

6.查找指定字符串

  1. FindString( int nStartAfter,LPCTSTR lpszItem )//可以在當前所有行中查找指定的字符串的位置,nStartAfter指明從那一行開始進行查找。
  2. SelectString( int nStartAfter, LPCTSTR lpszItem ) //可以選中包含指定字符串的行
  1. FindString( int nStartAfter, LPCTSTR lpszItem ) //可以在當前所有行中查找指定的字符串的位置,nStartAfter指明從那一行開始進行查找。  
  2. SelectString( int nStartAfter, LPCTSTR lpszItem ) //可以選中包含指定字符串的行  

7.選擇其中某行

  1. //(1)選中:
  2. int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//當前選中的行。
  3. //(2)設置
  4. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //設置第n行內容爲顯示的內容。
  1. //(1)選中:  
  2. int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel(); //當前選中的行。  
  3. //(2)設置  
  4. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //設置第n行內容爲顯示的內容。  

8.獲取總行數

  1. int GetCount()//得到當前列表框中行的數量
  1. int GetCount()//得到當前列表框中行的數量  

9.取得Combo Box框內容

  1. /*(1)取當前內容*/
  2. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp); //將獲取的值存放到CString類型變量strTemp中。

  3. //如果定義了關聯的變量,例如m_combo,可以直接獲取:m_combo->GetWindowText(strTemp);
  4. /*(2)取其他行內容*/
  5. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp); //其中n爲從0開始的索引值
  1. /*(1)取當前內容*/  
  2. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp); //將獲取的值存放到CString類型變量strTemp中。  
  3.   
  4. //如果定義了關聯的變量,例如m_combo,可以直接獲取:m_combo->GetWindowText(strTemp);  
  5. /*(2)取其他行內容*/  
  6. ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);  //其中n爲從0開始的索引值   

10.獲得焦點

通常要判斷控件是否獲得了焦點,可以用GetFocus()函數
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點是否在編輯框IDC_EDIT_VALUE2內。
但是combobox 的焦點不同,因爲它是由edit和listbox兩部分組成的,所以獲得焦點要用GetParent():

  1. if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
  1. if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))   

11.改變下拉框大小

在設計界面裏,點擊一下Combo Box的下拉箭頭,此時出現的調整框就是Combo Box的下拉調整框


12.常用消息映射宏

ON_CBN_DBLCLK 鼠標雙擊
ON_CBN_DROPDOWN 列表框被彈出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在輸入框失去/得到輸入焦點時產生
ON_CBN_SELCHANGE 列表框中選擇的行發生改變
ON_CBN_EDITUPDATE 輸入框中內容被更新
使用以上幾種消息映射的方法爲定義原型如:afx_msg void memberFxn( );的函數,並且定義形式如ON_Notification( id, memberFxn )的消息映射。
如果在對話框中使用組合框,Class Wizard會自動列出相關的消息,並能自動產生消息映射代碼。




二: win32 工程下操作:


一 Combo Box函數簡單介紹

 

1 SendMessage函數向窗口發送消息

LRESULT SendMessage(

  HWND hWnd,     // handle to destination window

  UINT Msg,      // message

  WPARAM wParam, // first message parameter

  LPARAM lParam   // second message parameter

);

 

Combo Box添加數據

HWND hWndComboBox = GetDlgItem(hWnd, IDC_COMBO1);

TCHAR szMessage[20] = "Hello";

SendMessage(hWndComboBox , CB_ADDRSTRING, 0, (LPARAM)szMessage);

 

Combo Box插入數據

HWND hWndComboBox = GetDlgItem(hWnd, IDC_COMBO1);

TCHAR szMessage[20] = "World";

SendMessage(hWndComboBox , CB_INSERTRSTRING, 0, (LPARAM)szMessage);

 

Combo Box刪除數據

SendMessage(hWndComboBox, CB_DELETESTRING, 1, 0);    //刪除第二項數據

 

清除Combo Box所有數據

SendMessage(hWndComboBox, CB_RESETCONTENT, 0, 0);

 

獲取Combo Box數據項目的數量

UINT uCount;

uCount = SendMessage(hWndComboBox, CB_GETCOUNT, 0, 0):

 

獲取Combo Box某項的值

TCHAR szMessage[200];

ZeroMessage(szMessage, sizeof(szMessage)):

SendMessage(hWndComboBox, CB_GETLBTEXT, 1, (LPARAM)szMessage);    //獲取第二項的數據

MessageBox(NULL, szMessage, " ", MB_OK);

 

二 Combo Box簡單使用

界面設計如下圖

 

功能實現代碼(建的是簡單的Win32工程)

//ComboBox.cpp
#include "stdafx.h"
#include "resource.h"

LRESULT CALLBACK Dialog(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	DialogBox(hInstance, (LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)Dialog);
	return 0;
}

LRESULT CALLBACK Dialog(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
	switch(uMessage)
	{
	case WM_INITDIALOG:
		return TRUE;

	case WM_COMMAND:
		UINT uSender;
		uSender = LOWORD(wParam);
		HWND hWndComboBox;
		hWndComboBox = GetDlgItem(hWnd, IDC_COMBO1);
		TCHAR szBuff[200];
		ZeroMemory(szBuff, sizeof(szBuff));
		switch(uSender)
		{
		//CB_ADDSTRING是在最後添加數據
		case IDC_BUTTON1:
			GetDlgItemText(hWnd, IDC_EDIT1, szBuff, sizeof(szBuff));
			SendMessage(hWndComboBox, CB_ADDSTRING, 0, (LPARAM)szBuff);
			break;

		//CB_ADDSTRING是在指定位置添加數據
		case IDC_BUTTON2:
			GetDlgItemText(hWnd, IDC_EDIT1, szBuff, sizeof(szBuff));
			SendMessage(hWndComboBox, CB_INSERTSTRING, 0, (LPARAM)szBuff);
			break;

		case IDC_BUTTON3:
			SendMessage(hWndComboBox, CB_RESETCONTENT, 0, 0);
			break;

		case IDC_BUTTON4:
			UINT uCount;
			uCount = SendMessage(hWndComboBox, CB_GETCOUNT, 0, 0);
			SetDlgItemInt(hWnd, IDC_EDIT2, uCount, TRUE);
			break;
			
		case IDC_BUTTON5:
			UINT uSelect;
			uSelect = GetDlgItemInt(hWnd, IDC_EDIT2, NULL, TRUE);
			SendMessage(hWndComboBox, CB_GETLBTEXT, uSelect, (LPARAM)szBuff);
			MessageBox(hWnd, szBuff, "SHOW", MB_OK|MB_ICONINFORMATION);
			break;

		case IDOK:
			EndDialog(hWnd, lParam);
			break;
		}
		break;

	case WM_CLOSE:
		EndDialog(hWnd, lParam);
		break;
	}
	return FALSE;
}


發佈了17 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章