【问题标题】:read text from edit control从编辑控件读取文本
【发布时间】:2013-06-01 22:55:11
【问题描述】:

我想阅读用户在编辑控件中键入的文本。 输入文本并按下按钮后,我想获取文本并将其作为项目添加到组合框中。 这就是我在父对话框的WM_COMMAND 中所做的:

case WM_COMMAND:

    if(HIWORD(wParam) == BN_CLICKED)
    {
        if ((HWND)lParam == Button[0])
        {



                int len = GetWindowTextLengthW(Button[2]) + 1;
                GetWindowTextW(Button[2], text, len);
                SendMessage(Button[1],(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) text);

                }
        }


    return 0;

但事情出错了,有时我在“text”变量中得到NULL,有时只是用户输入的字符串的第一个字符,有时是奇怪的 ASCII 等字符。我在做什么错?有什么想法吗?

【问题讨论】:

  • Button[2]是如何初始化的?你可能应该使用SendMessageW
  • button[2] 包含createWindow Button[2] = CreateWindowW( L"edit", NULL, WS_CHILD | WS_VISIBLE|WS_OVERLAPPED|WS_BORDER, windowWidth - (windowWidth), windowHeigh,windowWidth ,windowHeight, handlW, (HMENU)ID_EDIT,instnc, NULL);创建时编辑框的句柄
  • 抱歉,我是想说text >.>
  • 这是一个全球性的LPWSTR
  • SendMessageW 没有效果。 text 被定义为 LPWSTR text;,当我将 LPWSTR text = L"myText"; it always ad myText` 放入组合框时,无论用户在编辑控件中输入什么

标签: c++ winapi controls win32gui


【解决方案1】:

您需要为字符串分配内存。以下是人们期望在 C++03 中做到这一点的方式:

std::vector<wchar_t> str(len);
GetWindowTextW(Button[2], &str[0], str.size());
SendMessageW(Button[1], CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(&str[0]));

【讨论】:

  • 你成功了。太感谢了。我怎么能像你一样成为这方面的专家?尽管我大部分时间都在使用 c++,但这个问题花费了我太长时间。
  • @user667222, 在 C++ 上浏览 book 并经常浏览新的 SO 问题?除了做事,这几乎就是我的故事。 winapi 方面主要是经验,也是旧新事物的一部分。
猜你喜欢
  • 2012-06-19
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2011-11-15
  • 2021-04-23
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多