Toy With ComboBox

2010/11/11

本文对ComboBox的各种函数进行了尝试。

#include "StdAfx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
        HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    HWND hwnd_combo = GetDlgItem(hwnd,IDC_COMBO);
    ComboBox_InsertString(hwnd_combo,-1,TEXT("第三个"));
    ComboBox_InsertString(hwnd_combo,-1,TEXT("第二个"));
    ComboBox_InsertString(hwnd_combo,-1,TEXT("第一个"));
    ComboBox_InsertString(hwnd_combo,-1,TEXT("第零个"));
    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    HWND hwnd_combo = GetDlgItem(hwnd,IDC_COMBO);
    switch(id)
    {
        case IDC_BUTTONADD:
            {
            TCHAR strin[256];
            GetDlgItemText(hwnd,IDC_EDITIN,strin,sizeof(strin));//取内容
            ComboBox_InsertString(hwnd_combo,-1,strin);//添加至ComboBox
            SetDlgItemText(hwnd,IDC_EDITIN,TEXT(""));//清空输入文本框
            }
            break;
        case IDC_BUTTONDEL:
            {
            int i = ComboBox_GetCurSel(hwnd_combo);//取被选中的索引
            if(CB_ERR == i)//如果没有选任何项,则报错
            {
                MessageBox(hwnd,TEXT("你没有选中任何项"),TEXT("错误"),MB_OK|MB_ICONERROR);
                return;
            }
            ComboBox_DeleteString(hwnd_combo,i);//删除选中项
            }
            break;
        case IDC_BUTTONFIND:
            {
            TCHAR strToSearch[256];
            GetDlgItemText(hwnd,IDC_EDITOUT,strToSearch,sizeof(strToSearch));//得到要查找的内容
            int iCount = ComboBox_GetCount(hwnd_combo);
            BOOL sFound = FALSE;
            int i;
            for(i=0;i<iCount;i++)//遍历各项,若与要查找的内容相同,则弹出“找到了”,并选中该内容
            {
                TCHAR str[256];
                ComboBox_GetLBText(hwnd_combo,i,str);
                if(lstrcmp(str,strToSearch)==0)
                {
                sFound = TRUE;
                }
                if(sFound)
                {
                ComboBox_SetCurSel(hwnd_combo,i);
                MessageBox(hwnd,TEXT("找到了"),TEXT("消息"),MB_OK);
                break;
                }
            }
            if(FALSE == sFound)
            {
                MessageBox(hwnd,TEXT("没找到"),TEXT("报告"),MB_OK);
                return;
            }

            }
            break;
        default:
            break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

实现三个基本功能:

  1. 点击“增加”按钮,实现把左侧文本框中字符串加入到ComboBox中作为一个项;
  2. 点击“删除所选”按钮,删掉ComboBox正被选择的那一项;
  3. 点击查找,将所选项的序号写入左侧文本框中。