C++ 检查所选组合框项-WinApi C++;

C++ 检查所选组合框项-WinApi C++;,c++,winapi,combobox,C++,Winapi,Combobox,好的,我有一个关于检查ComboBox项的问题,我目前使用“ComboBox\u AddString”来添加项,我使用ComboBox\u GetText将其传递给一个wchar\u t,然后检查wchar\u t是否等于L“Minecraft”,调试器中的所有内容都与变量名匹配,但它会跳过它,就像它不是等价的一样。是否有一种“主流”方式来检查选定的组合框项目 wchar_t* szProccessToKill = new wchar_t[20];

好的,我有一个关于检查ComboBox项的问题,我目前使用“ComboBox\u AddString”来添加项,我使用ComboBox\u GetText将其传递给一个wchar\u t,然后检查wchar\u t是否等于L“Minecraft”,调试器中的所有内容都与变量名匹配,但它会跳过它,就像它不是等价的一样。是否有一种“主流”方式来检查选定的组合框项目

            wchar_t* szProccessToKill = new wchar_t[20];
            GetWindowText(hUserBox, szProccessToKill, 20);
            wchar_t* szGameSelect = new wchar_t[20];
            ComboBox_GetText(comboBox, szGameSelect, 20);

            if (szGameSelect == L"Minecraft")
            {
                MessageBox(NULL, L"HAI", L"NULL", NULL);
            }
这是全部代码,如果你想看看它,让我知道是否有更好的方法,我需要这个工作,因为它是一个游戏启动器,我决定有一个组合框,而不是数百万个按钮。我见过有人使用SendMessage,但我不知道为什么,因为ComboBox\u AddString工作得很好

case WM_CREATE:
     {
        CreateWindowEx(NULL, BUTTON, L"Check for process", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX , 5, 35, 150, 25, hwnd, (HMENU)2, NULL, NULL);
        comboBox = CreateWindow(L"combobox", L"", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST , 250, 5, 100, 25, hwnd, (HMENU)1, NULL, NULL);

        ComboBox_AddString(comboBox, L"Minecraft");
        ComboBox_AddString(comboBox, L"Smite");
        CreateWindow(BUTTON, L"Launch", WS_CHILD | WS_VISIBLE, 250, 30, 100, 25, hwnd, (HMENU)4, NULL, NULL);
        hUserBox = CreateWindow(L"static", L"Awaiting Commands...", WS_CHILD | WS_VISIBLE | WS_BORDER, 5, 5, 240, 25, hwnd, NULL, NULL, NULL);
        break;
     }

    case WM_COMMAND:

        switch (LOWORD(wparam))
        {
            case 4:
            {
                wchar_t* szProccessToKill = new wchar_t[20];
                GetWindowText(hUserBox, szProccessToKill, 20);
                wchar_t* szGameSelect = new wchar_t[20];
                ComboBox_GetText(comboBox, szGameSelect, 20);

                if (szGameSelect == L"Minecraft")
                {
                    MessageBox(NULL, L"HAI", L"NULL", NULL);
                }
问题在于:

if (szGameSelect == L"Minecraft")
这不是字符串比较!这是在比较两个指针,当然这两个指针是不相等的。相反,您需要:

问题在于:

if (szGameSelect == L"Minecraft")
这不是字符串比较!这是在比较两个指针,当然这两个指针是不相等的。相反,您需要:


我认为
Combobox\u AddString
只是一个调用
SendMessage
的宏。我认为堆栈上可能可以容纳20个字符串。我认为
Combobox\u AddString
只是一个调用
SendMessage
的宏。我认为堆栈上可能可以容纳20个字符串。谢谢,这就是问题所在,我只记得一些字符数组主要是内存地址(有点像指针),所以有时我会感到困惑,比较它们。@ KimGrie:你的问题是加标签的C++,所以你应该使用C++字符串(<代码> STD::String 或<代码> STD::WString )代替字符数组。您可以使用
=
运算符比较字符串值。另一方面,如果您知道组合框中的<代码> MINECFRAUT/COD>项目的索引(它的代码为> COBOBOXXADADSTRING()/CODE >给您,那么您不需要使用<代码> COBOBOXXGETTHORE()/C++ >,只需使用它,并将返回值与该索引进行比较。如果您不使用框架,那么老式的字符串更容易处理+1提到“代码> GutCursEs/Cuth.>谢谢,这是问题,我只记得一些字符数组主要是内存地址(有点像指针),所以我有时会感到困惑,比较它们。”KyGrieD:你的问题是加标签C++,所以你应该使用C++字符串。(
std::string
std::wstring
)而不是字符数组。您可以使用
=
运算符比较字符串值。另一方面,如果您知道组合框中
Minecraft
项的索引(它是
combobox\u AddString()
提供的),则无需使用
combobox\u GetText(),只需使用它并将返回值与该索引进行比较。@ ReMyLeBeu不幸的是Windows API不是设计为C++的,如果不使用框架,那么老式字符串更容易处理。+ 1提到“代码> GutCursE。