C语言也能干大事~part 5

546 阅读4分钟

本节的知识点:

组合框

  1. GetDlgItem ————由对话框句柄+id 得到控件的句柄,返回HWND类型

    例如:HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);

    hwndCombo1是变量名,IDC_COMBO1 是控件ID(名称), 大致意思:实现把控件的句柄放到变量hwndCombo1中


  2. ComboBox_AddString ————添加一项,并不是按照顺序添加项

    例如: ComboBox_AddString(hwndCombo1, TEXT("河南省"));

    hwndCombo1是控件的句柄


  3. ComboBox_InsertString———— 添加一项,依次向最后一项添加

    例如: ComboBox_InsertString(hwndCombo1, -1, TEXT("河南省"));

    第一个参数hwndCombo1是控件的句柄,第二个参数是索引


  4. ComboBox_GetCurSel————得到当前项的索引,返回int类型

    例如: int CurSel = ComboBox_GetCurSel(hwndCombo1);

    hwndCombo1是控件的句柄


  5. ComboBox_GetCount ————取得有多少项,返回int类型

    例如: int count = ComboBox_GetCount(hwndCombo1);

    hwndCombo1是控件的句柄


  6. ComboBox_DeleteString ———— 删除项

    例如: ComboBox_DeleteString(hwndcombo1, 1);

    第一个参数hwndCombo1是控件的句柄,第二个参数是索引


  7. ComboBox_SetCurSel———— 选择某一项

    例如:ComboBox_SetCurSel(hwndCombo1, 1);

    第一个参数hwndCombo1是控件的句柄,第二个参数是索引


  8. ComboBox_GetLBText ————得到某项的值,放到字符串指针中

    例如:ComboBox_GetLBText(hwndCombo1, 1, str);

    第一个参数hwndCombo1是控件的句柄,第二个参数是索引,第三个参数是字符串指针


更多宏的用法请参考: msdn.microsoft.com/en-us/libra…

课堂练习

控件如下:

代码如下:

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)         //Main_OnInitDialog 对话框初始化的时候被调用,运行时进行加载。
{


				HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);//GetDlgItem 由对话框句柄+id 得到控件的句柄,返回HWND类型
				/*
				ComboBox_AddString(hwndCombo1, TEXT("河南省"));//并不是按照顺序添加项
				ComboBox_AddString(hwndCombo1, TEXT("江苏省"));
				ComboBox_AddString(hwndCombo1, TEXT("河北省"));
				ComboBox_AddString(hwndCombo1, TEXT("浙江省"));
				*/

				ComboBox_InsertString(hwndCombo1, -1, TEXT("河南省"));//依次向最后一项添加
				ComboBox_InsertString(hwndCombo1, -1, TEXT("江苏省"));
				ComboBox_InsertString(hwndCombo1, -1, TEXT("河北省"));
				ComboBox_InsertString(hwndCombo1, -1, TEXT("浙江省"));


    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
			{
				HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);//得到控件的句柄

				int CurSel = ComboBox_GetCurSel(hwndCombo1);  //ComboBox_GetCurSel得到当前项的索引,返回int类型

				if(0 == CurSel)
				{
					//MessageBox(hwnd, TEXT("你选择的是河北省"), TEXT("提示"), MB_OK);

					
					//int count = ComboBox_GetCount(hwndCombo1);//取得有多少项

				}

				//ComboBox_DeleteString(hwndcombo1, 1);//删除项

				//ComboBox_SetCurSel(hwndCombo1, 1);//单击确定,选定某一项 

				TCHAR str[256];
				ComboBox_GetLBText(hwndCombo1, 1, str);    //得到某项的值,放到字符串指针中
				MessageBox(hwnd, str, TEXT("消息"), MB_OK);
			}
        break;


        default:
		break;
    }
}

运行图:

我们可以看到这个组合框中还可以输入

可通过以下方法来禁止

 右击 combobox(组合框)选择属性,弹出的对话框中按如下设置:类型选择【下拉列表】

课后作业

1. 小型计算器2.0版

控件如下:

代码如下:

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
	HWND hwndcombo1 = GetDlgItem(hwnd, IDC_COMBO1); //获得控件的句柄
	ComboBox_InsertString(hwndcombo1, -1,TEXT("+"));//依次向最后一项添加
	ComboBox_InsertString(hwndcombo1, -1,TEXT("-"));
	ComboBox_InsertString(hwndcombo1, -1,TEXT("*"));
	ComboBox_InsertString(hwndcombo1, -1,TEXT("/"));
	ComboBox_InsertString(hwndcombo1, -1,TEXT("%"));


    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
			{
				TCHAR str1[256];
				TCHAR str2[256];
				GetDlgItemText(hwnd, IDC_EDIT1, str1, sizeof(str1)); //在IDC_EDIT1文本框中输入
				GetDlgItemText(hwnd, IDC_EDIT2, str2, sizeof(str2)); //在IDC_EDIT2文本框中输入
				int i1 = atoi(str1);
				int i2 = atoi(str2);

				HWND hwndcombo1 = GetDlgItem(hwnd, IDC_COMBO1); //获得控件的句柄
				int curIndex = ComboBox_GetCurSel(hwndcombo1);  //确定目前选项的索引

				int s = 0;
			switch(curIndex)
			{
				case 0:
						{
							 s = i1+i2;
						}
						break;

				case 1:
						{
							 s = i1-i2;
						}
						break;

				case 2:
						{
							 s = i1*i2;
						}
						break;

				case 3:
						{
							 s = i1/i2;
						}	
						break;
				case 4:
						{
							s = i1%i2;
						}
						break;
			}

			TCHAR str3[256];
			itoa(s, str3, 10);
			SetDlgItemText(hwnd, IDC_EDIT3, str3);
		}
		break;

        default:
		break;
    }

}

运行结果:

2. 数据的增加、删除与查找

控件如下:

代码如下:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_BUTTONADD:  //添加命令按钮
			{
				TCHAR str1[256];
				GetDlgItemText(hwnd, IDC_EDITADD, str1, sizeof(str1)); //在IDC_EDIT1文本框中输入
				HWND hwndCombo = GetDlgItem(hwnd, IDC_COMBO1);

				ComboBox_AddString(hwndCombo, str1);
			}
		break;

        case IDC_BUTTONDEL: //删除命令按钮
			{
				HWND hwndCombo = GetDlgItem(hwnd, IDC_COMBO1);

				int curSel2 = ComboBox_GetCurSel(hwndCombo);
				if(CB_ERR == curSel2)     //没有任何项被选择,返回值为CB_ERR
				{ 
					MessageBox(hwnd, TEXT("没有任何项被选择,无法删除"), TEXT("错误"), MB_OK|MB_ICONERROR);
					return ;
				}

				ComboBox_DeleteString(hwndCombo, curSel2);
				SetDlgItemText(hwnd, IDC_EDITADD, TEXT("")); //赋值为空字符串,清除在文本框添加的字符串

			}
		break;

        case IDC_BUTTONSEARCH://查找命令按钮
			{
				TCHAR strSearch[256];
				GetDlgItemText(hwnd, IDC_EDITSEARCH, strSearch, sizeof(strSearch)); //在IDC_EDIT1文本框中输入
				HWND hwndCombo3 = GetDlgItem(hwnd, IDC_COMBO1);
				int count = ComboBox_GetCount(hwndCombo3); //对添加的字符串进行计数
				
				int i;
				BOOL found = FALSE;

				for(i = 0; i<count; i++)
				{
					TCHAR str2[256];
					ComboBox_GetLBText(hwndCombo3, i, str2);
					if(lstrcmp(str2, strSearch) == 0)      //字符串比较通常用lstrcmp 代替 strcmp
					{
						found = TRUE;
						ComboBox_SetCurSel(hwndCombo3, i); //找到后在组合框选中
					}
				}

				if(found)  //found 是真是假由上面的步骤决定
				{
					MessageBox(hwnd, TEXT("找到了"), TEXT("提示"), MB_OK);
				}
				else
				{
					MessageBox(hwnd, TEXT("没有找到,请查看输入的信息是否有误"), TEXT("提示"), MB_OK|MB_ICONERROR);
				}


			}
		break;


	
		
        default:
		break;
    }

}

运行图:

比如添加了1、a、b、c、d, 然后查找a

1. 小型计算器2.0版成品:pan-yz.chaoxing.com/share/info/…

2. 数据的增加、删除与查找成品:pan-yz.chaoxing.com/share/info/…