MFC学习日记1:下拉列表框(Combo Box)控件的应用:设计一个可选择进程的功能

网上已经有很多相关下拉列表框(Combo Box)的教程,以及在MSDN上也有详细的介绍以及用法,这里只讲一部分。

创建MFC项目,然后切换到资源管理器,设计如下:
这里写图片描述
之后在下拉列表框(Combo Box)上右键,选择“类向导”(或者快捷键Ctrl+Shift+x打开),给它添加按钮属性,然后在成员里给它取个好记一点的名字。再点击应用,程序立即生效。
这里写图片描述
我想设计成这个样子:只要点击下拉列表框,会出现进程列表。首先要给它添加个事件处理功能。在下拉列表框控件上右键,点击“添加事件处理程序”,会出现以下界面,可以看到,不同的消息类型,对应着不同的响应方式。类列表又对应着不同的*.cpp文件,这里选择的是后面字母为Dlg的类。
这里写图片描述
之后点击“添加代码”或者“编辑代码”,转到代码界面。
这里写图片描述
编写代码,我想要实现的是:下拉列表框之后,会出现所有进程列表。要用到 Tlhelp32.h 这个头文件以及对应的代码,详见 CreateToolhelp32Snapshot(进程快照)以及其他函数的用法,这里不仔细介绍。

代码如下:

这里写图片描述

下面贴上代码(纯实现功能),上面注释好了,方便看懂。

void CCeShi1Dlg::OnCbnDropdownCombo1()
{
    m_box1.ResetContent(); //一次性直接清除ID对应的内容,目的是防止重复
    HANDLE myhProcess;//定义变量myhProcess为HANDLE型
    PROCESSENTRY32 mype;//定义变量mype为PROCESSENTRY32型
    mype.dwSize = sizeof(PROCESSENTRY32);//定义变量mype的结构体变量dwSize大小,详见MSDN
    BOOL mybRet;//定义mybRet为BOOL型
    //进行进程快照
    myhProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //TH32CS_SNAPPROCESS快照所有进程
    mybRet = Process32First(myhProcess, &mype);//取出第一个进程的信息,并将这个进程信息传递给mybRet
    while (mybRet)//判断是否成功获取第一个进程信息
    {
        m_box1.AddString(LPCWSTR(mype.szExeFile));//将mybRet的进程名加入列表框,详见MSDN AddString的用法
        mybRet = Process32Next(myhProcess, &mype);//获取下一个
    }
}

再加入个标签,用于响应下拉列表框的事件,主要实现:下拉列表框选择了什么,标签上面就同步显示刚才下拉列表框的选定内容。效果:
这里写图片描述
标签的实现也比较简单,跟刚才那个下拉列表框类似。右键添加响应事件,之后在对应的代码写入以下代码:

    CString Tmp;//定义变量Tmp为CString型
    int xx;//定义变量xx为int型
    xx = m_box1.GetCurSel();//获取下拉列表框所选定的项目的值,并赋值给变量xx
    m_box1.GetLBText(xx,Tmp);//获取下拉列表框值对应的内容,并赋值给变量Tmp
    SetDlgItemText(IDC_STATIC,(L"您选择的进程是:" + Tmp));//这里的IDC_STATIC表示的是控件标签ID,
                                                         //然后在这个控件上显示Tmp的内容     
                                                         //详细请查阅MSDN上函数SetDlgItemText的用法                                                                                                                          

这篇的代码还是头一次注释的比较细,在此之前,为了实现某些功能,踩了不少坑。主要是并不太明白其中的代码逻辑以及MFC框架。这篇文章将作为我在学习MFC的一个历程。

猜你喜欢

转载自blog.csdn.net/weixin_42950931/article/details/81953550