Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32 Combobox,打印要编辑的选定文本框的名称_C++_Winapi_Combobox_Textbox - Fatal编程技术网

C++ Win32 Combobox,打印要编辑的选定文本框的名称

C++ Win32 Combobox,打印要编辑的选定文本框的名称,c++,winapi,combobox,textbox,C++,Winapi,Combobox,Textbox,我正在测试win32组合框的理论。很多事情都试过了,但我不知道如何让它做我想做的事情。当在组合框中进行选择时,我希望它打印到编辑框中。我相信这可能是通过把手来完成的 因此,如果我通过按钮1的转换将其添加到我的按钮1中,如何将其打印到编辑字段 我的代码如下。我留下了一些我尝试过的东西,但我把它们评论掉了。问题在于添加控件,我正在考虑我的开关和案例 我缺少一个将文本填充到编辑框的部分 与其说我是编程新手,不如说我是这类编程新手。我正在寻找一种简单的方法。提前感谢您抽出时间 下面是更新的代码和我现在得

我正在测试win32组合框的理论。很多事情都试过了,但我不知道如何让它做我想做的事情。当在组合框中进行选择时,我希望它打印到编辑框中。我相信这可能是通过把手来完成的

因此,如果我通过按钮1的转换将其添加到我的按钮1中,如何将其打印到编辑字段

我的代码如下。我留下了一些我尝试过的东西,但我把它们评论掉了。问题在于添加控件,我正在考虑我的开关和案例

我缺少一个将文本填充到编辑框的部分

与其说我是编程新手,不如说我是这类编程新手。我正在寻找一种简单的方法。提前感谢您抽出时间

下面是更新的代码和我现在得到的。我遵循unicode的指导原则。我甚至和visualstudioc++交了朋友(我想)

#包括
#包括
#包括
使用名称空间std;
#定义选项1
#定义OPTINBT2
#定义组合1 3
HWND HWND,hComboOne;
无效控制(HWND);
LPCWSTR egClassName=L“myWindowClass”;
LRESULT回调窗口过程(HWND、UINT、WPARAM、LPARAM);
int WINAPI WinMain(HINSTANCE hInst、HINSTANCE hPrevInst、LPSTR args、int nCmdShow)
{
WNDCLASSW wc={0};
wc.lpszClassName=egClassName;
wc.lpfnWndProc=窗口过程;
wc.hbrBackground=(HBRUSH)(彩色窗口+1);
wc.hInstance=hInst;
wc.hIcon=LoadIcon(空,IDI_应用程序);
wc.hCursor=LoadCursor(空,IDC_箭头);
如果(!RegisterClassW(&wc))
{
const wchar_t Error01[]=L“要检查的寄存器问题:”;
const wchar_t Error 01_Caption[]=L“Error 01”;
MessageBoxW(hWnd,Error01,Error01_标题,MB_OK | MB_ICONERROR);
返回0;
}
LPCWSTR parentWinTitle=L“我的窗口”;
hWnd=CreateWindowW(egClassName,parentWinTitle,WS|u OVERLAPPEDWINDOW | WS|u VISIBLE,100100500500,NULL,NULL,NULL,NULL);
if(hWnd==NULL)
{
const wchar_t Error02[]=L“要检查的窗口创建问题:”;
const wchar_t Error02_Caption[]=L“要检查的窗口创建问题:”;
MessageBoxW(hWnd,Error02,Error02_标题,MB_OK | MB_ICONERROR);
}
显示窗口(hWnd、nCmdShow);
更新窗口(hWnd);
MSG={0};
while(GetMessage(&msg,NULL,0,0))
{
翻译信息(&msg);
发送消息(&msg);
}
返回0;
}
LRESULT回调窗口过程(HWND HWND、UINT msg、WPARAM wp、LPARAM lp)
{
开关(msg)
{
案例WM_创建:
addControl(hWnd);
打破
case WM_命令:
if(HIWORD(wp)=CBN\u SELCHANGE)
{
if(LOWORD(wp)=COMBO1)
{
HWND hcombo=(HWND)lp;
LRESULT index=SendMessageW(hcombo,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
wchar_t buf[256];
SendMessageW(hcombo,(UINT)CB_GETLBTEXT,(WPARAM)index,(LPARAM)buf);
MessageBoxW(hWnd,buf,L“好例子”,0);
}
打破
}
开关(低压(wp))
{
案例选项1:
MessageBoxW(hWnd,L“这是单选按钮1:”,L“单选按钮2很好”,MB_OK);
打破
案例选项t2:
MessageBoxW(hWnd,L“这是单选按钮2:”,L“单选按钮1很好”,MB_OK);
打破
默认:中断;
}
打破
案例WM_销毁:
PostQuitMessage(0);
打破
违约:
返回DefWindowProcW(hWnd、msg、wp、lp);
}
返回0;
}
无效添加控制(HWND HWND)
{
HWND OptBt1、OptBt2;
常量LPCWSTR cont1=L“静态”;
常量LPCWSTR cont2=L“组合框”;
常量LPCWSTR cont3=L“按钮”;
const LPCWSTR emptyS=L“”;
常量LPCWSTR bl=L“RButton 1”;
常量LPCWSTR b2=L“RButton 2”;
//选项按钮
OptBt1=CreateWindowW(cont3,bl,WS|u VISIBLE | WS|u CHILD | BS|u AUTORADIOBUTTON,24,8,90,25,hWnd,(menu)OPTINBT1,NULL,NULL);
OptBt2=CreateWindowW(cont3,b2,WS|u VISIBLE | WS|u CHILD | BS|u AUTORADIOBUTTON,24,40,90,25,hWnd,(menu)OPTINBT2,NULL,NULL);
发送消息(OptBt1,BM_设置检查,BST_检查,0);
hComboOne=CreateWindowW(cont2,清空,WS|u可见| WS|u儿童| CBS|u下拉列表| CBS|u hastrings | WS|u VSCROLL,77,70,150,150,hWnd,(HMENU)组合1,0,0);
LPCWSTR ComboBoxItems[]={L“主题1”、L“主题2”、L“主题3”,
L“主题4”,L“主题5”};
/**还是阵列方式*/
SendMessageW(hComboOne,CB_ADDSTRING,0,(LPARAM)ComboBoxItems[0]);
SendMessageW(hComboOne,CB_ADDSTRING,0,(LPARAM)ComboBoxItems[1]);
SendMessageW(hComboOne,CB_ADDSTRING,0,(LPARAM)ComboBoxItems[2]);
SendMessageW(hComboOne,CB_ADDSTRING,0,(LPARAM)ComboBoxItems[3]);
SendMessageW(hComboOne,CB_ADDSTRING,0,(LPARAM)ComboBoxItems[4]);
}

您希望响应发送到窗口过程的
CBN\u SELCHANGE
消息。在
WM_COMMAND
的情况下,wParam的低位字将包含控件ID,高位字将包含可选的命令代码


该命令代码对于正确响应组合框消息至关重要。您需要通过发送组合框a
CB\u GETCURSEL
,然后发送
CB\u GETLBTEXTLEN
CB\u GETLBTEXT
,来响应
CBN\u SELCHANGE
消息,之后,您可以发送编辑控件a
WM\u SETTEXT
和检索到的文本。

WM\u CREATE
应在
addControl
之前插入

WM_命令中
响应
CBN_SELCHANGE
通知以检测组合框选择的更改

显示消息框时,您可以使用自己窗口的句柄
MessageBox(hWnd,…)
。如果您提供
NULL
作为句柄,则消息框将成为桌面窗口的子窗口,其行为为
#include <windows.h>
#include <tchar.h>
#include <iostream>

using namespace std;

#define OPTINBT1 1
#define OPTINBT2 2
#define COMBO1 3

HWND hWnd, hComboOne;

void addControl(HWND);

LPCWSTR egClassName = L"myWindowClass";

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


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int nCmdShow)
{

    WNDCLASSW wc = { 0 };

    wc.lpszClassName = egClassName;
    wc.lpfnWndProc = WindowProcedure;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);

    if (!RegisterClassW(&wc))
    {
        const wchar_t  Error01[] = L"Register Issue To Check On : ";
        const wchar_t  Error01_Caption[] = L"Error 01";

        MessageBoxW(hWnd, Error01, Error01_Caption, MB_OK | MB_ICONERROR);

        return 0;
    }

    LPCWSTR parentWinTitle = L"My Window";

    hWnd = CreateWindowW(egClassName, parentWinTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 500, 500, NULL, NULL, NULL, NULL);

    if (hWnd == NULL)
    {

        const wchar_t Error02[] = L"Window Creation Issue To Check On : ";
        const wchar_t Error02_Caption[] = L"Window Creation Issue To Check On : ";
        MessageBoxW(hWnd, Error02, Error02_Caption, MB_OK | MB_ICONERROR);

    }
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);


    MSG msg = { 0 };

    while (GetMessage(&msg, NULL, 0, 0))
    {

        TranslateMessage(&msg);
        DispatchMessage(&msg);

    }

    return 0;

}

LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{

    switch (msg)
    {
    case WM_CREATE:
        addControl(hWnd);
        break;

    case WM_COMMAND:

        if (HIWORD(wp) == CBN_SELCHANGE)
        {
            if (LOWORD(wp) == COMBO1)
            {
                HWND hcombo = (HWND)lp;
                LRESULT index = SendMessageW(hcombo, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);

                wchar_t buf[256];

                SendMessageW(hcombo, (UINT)CB_GETLBTEXT, (WPARAM)index, (LPARAM)buf);
                MessageBoxW(hWnd, buf, L"Good Example", 0);
            }
            break;
        }
        switch (LOWORD(wp))
        {
        case OPTINBT1:
            MessageBoxW(hWnd, L"This is Radio button1: ", L"Radio Button 2 is good", MB_OK);
            break;
        case OPTINBT2:
            MessageBoxW(hWnd, L"This is Radio button2: ", L"Radio Button 1 is good", MB_OK);
            break;
        default:break;
        }
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProcW(hWnd, msg, wp, lp);
    }

    return 0;
}

void addControl(HWND hWnd)
{
    HWND OptBt1, OptBt2;

    const LPCWSTR cont1 = L"STATIC";
    const LPCWSTR cont2 = L"COMBOBOX";
    const LPCWSTR cont3 = L"BUTTON";
    const LPCWSTR emptyS = L"";
    const LPCWSTR bl = L"RButton 1";
    const LPCWSTR b2 = L"RButton 2";
    //Option buttons
    OptBt1 = CreateWindowW(cont3, bl, WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, 24, 8, 90, 25, hWnd, (HMENU)OPTINBT1, NULL, NULL);
    OptBt2 = CreateWindowW(cont3, b2, WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, 24, 40, 90, 25, hWnd, (HMENU)OPTINBT2, NULL, NULL);
    SendMessage(OptBt1, BM_SETCHECK, BST_CHECKED, 0);

    hComboOne = CreateWindowW(cont2, emptyS, WS_VISIBLE | WS_CHILD | CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL, 77, 70, 150, 150, hWnd, (HMENU)COMBO1, 0, 0);

    LPCWSTR ComboBoxItems[] = { L"Subject1", L"Subject2", L"Subject3",
        L"Subject4", L"Subject5" };

    /** Or the array way */
    SendMessageW(hComboOne, CB_ADDSTRING, 0, (LPARAM)ComboBoxItems[0]);
    SendMessageW(hComboOne, CB_ADDSTRING, 0, (LPARAM)ComboBoxItems[1]);
    SendMessageW(hComboOne, CB_ADDSTRING, 0, (LPARAM)ComboBoxItems[2]);
    SendMessageW(hComboOne, CB_ADDSTRING, 0, (LPARAM)ComboBoxItems[3]);
    SendMessageW(hComboOne, CB_ADDSTRING, 0, (LPARAM)ComboBoxItems[4]);

}
switch(msg)
{
case WM_CREATE:
    addControl(hWnd);
    break;

case WM_COMMAND:
    if(HIWORD(wp) == CBN_SELCHANGE)
    {
        if(LOWORD(wp) == COMBO1)
        {
            HWND hcombo = (HWND)lp;
            int index = SendMessage(hcombo, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
            char buf[256];
            SendMessage(hcombo, (UINT)CB_GETLBTEXT, (WPARAM)index, (LPARAM)buf);
            MessageBox(hWnd, buf, 0, 0);
        }
        break;
    }

    switch(LOWORD(wp))
    {
    case OPTINBT1:
        MessageBox(hWnd, "This is Radio button1: ", "ComboBox Working??", MB_OK);
        break;
    case OPTINBT2:
        MessageBox(hWnd, "This is Radio button2: ", "ComboBox Working??", MB_OK);
        break;
    default:break;
    }
    break;