Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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++ 无法更改WinAPI中的编辑控件文本_C++_Winapi - Fatal编程技术网

C++ 无法更改WinAPI中的编辑控件文本

C++ 无法更改WinAPI中的编辑控件文本,c++,winapi,C++,Winapi,此代码始终有效,我不知道出了什么问题,请参见以下内容: CreateWindowW(L"EDIT", L"Type Here!", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 150, 25, hwnd, (HMENU)ID_TEXTBOX1, NULL, NULL); 当程序运行时,创建控件时,可以使用SetWindowText函数选择文本并进行更改,但不能通过键入来更改文本,为什么 我已经看到了堆栈溢出的主题:,但即使使用SetFocus函数或En

此代码始终有效,我不知道出了什么问题,请参见以下内容:

CreateWindowW(L"EDIT", L"Type Here!", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 150, 25, hwnd, (HMENU)ID_TEXTBOX1, NULL, NULL);
当程序运行时,创建控件时,可以使用SetWindowText函数选择文本并进行更改,但不能通过键入来更改文本,为什么

我已经看到了堆栈溢出的主题:,但即使使用SetFocus函数或EnableWindow,它仍然不起作用

这是整个程序的功能:

#include <windows.h>

// IDs dos controles
#define ID_TEXTBOX1 1000
#define ID_BUTTON1 1001

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  LPSTR pCmdLine, int nCmdShow)
{
 MSG msg;
 HWND hwnd;
 WNDCLASSW wc;

 wc.style     = CS_HREDRAW | CS_VREDRAW;
 wc.cbClsExtra  = 0;
 wc.cbWndExtra  = 0;
 wc.lpszClassName = L"WINDOW";
 wc.hInstance   = hInstance;
 wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
 wc.lpszMenuName = NULL;
 wc.lpfnWndProc  = WndProc;
 wc.hCursor    = LoadCursor(NULL, IDC_ARROW);
 wc.hIcon     = LoadIcon(NULL, IDI_APPLICATION);

 RegisterClassW(&wc);
 hwnd = CreateWindowW(L"WINDOW", L"Janela",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        100, 100, 200, 200, NULL, NULL, hInstance, NULL);

 ShowWindow(hwnd, nCmdShow);
 UpdateWindow(hwnd);

 while( GetMessage(&msg, NULL, 0, 0)) {
  DispatchMessage(&msg);
}

 return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
  WPARAM wParam, LPARAM lParam)
{
 switch(msg)
 {
  case WM_CREATE:
      // Here is creted the edit control
      CreateWindowW(L"EDIT", L"Type Here!", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 150, 25,       hwnd, (HMENU)ID_TEXTBOX1, NULL, NULL);
   // Functions that i tried
   //EnableWindow(GetDlgItem(hwnd, ID_TEXTBOX1), true);
   //SetFocus(GetDlgItem(hwnd, ID_TEXTBOX1));
   // Here is create a button
      CreateWindowW(L"BUTTON", L"Show Text", WS_CHILD | WS_VISIBLE, 10, 45, 100, 20, hwnd, (HMENU)ID_BUTTON1, NULL, NULL);
   break;
 case WM_COMMAND:
   switch (LOWORD(wParam))
   {
   case ID_BUTTON1:
       int len = GetWindowTextLengthW(GetDlgItem(hwnd, ID_TEXTBOX1)) + 1;
       wchar_t *txt = new wchar_t[len];
       GetWindowText(GetDlgItem(hwnd, ID_TEXTBOX1), txt, len);
       //
       MessageBox(NULL, txt, L"Info", MB_OK);
       delete txt;
       break;
   }
   break;
 case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
 }

 return DefWindowProcW(hwnd, msg, wParam, lParam);
}
消息循环中缺少对的调用,从而阻止键盘输入生成/消息。这将使您的编辑控件看起来没有任何输入。有关标准消息循环实现的信息,请参阅

另外,在分配数组时,需要使用数组删除运算符,即delete[]txt

消息循环中缺少对的调用,从而阻止键盘输入生成/消息。这将使您的编辑控件看起来没有任何输入。有关标准消息循环实现的信息,请参阅


另外,在分配数组时,需要使用数组删除运算符,即delete[]txt

请发布应用程序的消息循环,并提供创建主窗口的代码。您也在泄漏内存。我可以看到新的wchar_t[len],但没有附带的delete[]。因为这个问题是用C++标记的,所以你应该使用一个STD::vector代替手动内存管理。但是,即使在非托管数组之后使用delete,或者没有WM_命令的内容,它仍然不起作用。该项目也可以在请发布应用程序的消息循环中使用,并提供创建主窗口的代码。您也在泄漏内存。我可以看到新的wchar_t[len],但没有附带的delete[]。因为这个问题是用C++标记的,所以你应该使用一个STD::vector代替手动内存管理。@ iCISTABLE I在非托管数组*txt之后添加了整个代码和“DELATE”,但是即使在非托管数组之后删除,或者没有WMX命令的内容,它仍然不工作。