如何不定义此变量

How is this variable not defined?

本文关键字:变量 定义 何不      更新时间:2023-10-16

这是我目前代码的一个片段。这完全没有意义。它说 CASE 命令下的 hEditEW 未在上面明确定义的地方定义。这可能是一个非常简单的修复,但我有一个很大的时间来解决它。

case WM_CREATE:
         {
                  HWND hWndButton = CreateWindowEx(NULL, "Button", "Click to Convert", WS_TABSTOP|WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                      200, 370, 150, 50, hWnd, (HMENU)IDC_BUTTON_ONE, NULL, NULL);
                  HWND hEditEW = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD|ES_MULTILINE| WS_VISIBLE |
                      ES_AUTOHSCROLL | ES_AUTOVSCROLL, 25, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL);
                  HWND hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE |
                      ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL);
         }
    break;
case WM_COMMAND:
       {
                   switch (LOWORD(wParam))
                   {
                   case IDC_BUTTON_ONE:
                   {
                                          LPWSTR buffer[256];
                                          SendMessage(hEditEW,
                                              WM_GETTEXT,
                                              sizeof(buffer) / sizeof(buffer[0]),
                                              reinterpret_cast<LPARAM>(buffer));
                                          HANDLE hFile = CreateFile("C:\test.txt", GENERIC_READ,
                                              0, NULL, CREATE_NEW, FILE_FLAG_OVERLAPPED, NULL); 
                   }
                       break;
                   }
                   break;
      }

您在case WM_CREATE之后的作用域中定义它,并尝试在case WM_COMMAND之后的作用域中使用它。那行不通 - 不同的范围。

您甚至不需要开关来演示问题:

{
   HWND hEditEW = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD|ES_MULTILINE| WS_VISIBLE |
                      ES_AUTOHSCROLL | ES_AUTOVSCROLL, 25, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL);
}  //in scope up to here
{
   SendMessage(hEditEW,
      WM_GETTEXT,
      sizeof(buffer) / sizeof(buffer[0]),
      reinterpret_cast<LPARAM>(buffer));
}

hEditEW 是本地的把 HWND hEditNS;在顶部并更换

WND hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE |
                      ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL);

hEditNS = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | ES_MULTILINE | WS_VISIBLE |
                      ES_AUTOHSCROLL | ES_AUTOVSCROLL, 300, 50, 220, 300, hWnd, (HMENU)IDC_EDITOR_BOX_EAST_WEST, NULL, NULL);

删除WND应该修复它的所有位置,如果你把HWND hEditNS;在类/函数的顶部

我不知道

WinApi,但hEditEW超出了范围:

case WM_CREATE:
{
     HWND hEditEW = ....
} //end of scope

简单修复:将hEditEW放在较高的范围内:

HWND hEditEW;
case WM_CREATE:
{ .....