【问题标题】:WinAPI FindWindowWinAPI 查找窗口
【发布时间】:2013-08-16 21:29:04
【问题描述】:

我正在 Visual Studio 2012 中构建一个 win32 应用程序。我使用以下代码创建了 4 个禁用按钮:

HWND hWndButton=CreateWindowEx(NULL, 
        L"BUTTON",
        L"APP1",
        WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON|WS_DISABLED|BS_ICON,
        40,
        40,
        180,
        140,
        hWnd,
        (HMENU)IDC_BUTTON1,
        GetModuleHandle(NULL),
        NULL);

我想做的是在应用程序运行时启用按钮。我尝试使用 findwindow 查找并启用第一个按钮,但没有找到。我的代码是:

HWND hwB1 = FindWindow(L"BUTTON",L"APP1");
if (hwB1 !=0)   MessageBox(NULL,L"FOUND",L"Button Found",MB_OK);
EnableWindow(hwB1,true);

我做错了吗? 提前谢谢你。

【问题讨论】:

    标签: winapi visual-studio-2012 findwindow createwindowex


    【解决方案1】:

    FindWindow() 查找顶级窗口,而不是子窗口。

    如果您确实想按名称查找子窗口,可以使用FindWindowEx() 函数,但使用 ID 通常更有效。

    执行此操作的函数是GetDlgItem()。这会根据您在创建子窗口时提供的 ID 查找子窗口。

    HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1);
    

    hWnd 是父窗口,IDC_BUTTON1 是 ID。

    另一种选择是简单地存储创建子窗口时返回的窗口句柄 - 在代码示例中为 hWndButton - 然后您根本不需要查找它。

    【讨论】:

      【解决方案2】:

      使用FindWindowEx()

      HWND hwB1=FindWindowEx(hWnd/*Parent window*/,
                             hWndButton/*Child window*/,
                             "BUTTON"/*Class of the child window*/,
                             "APP1"/*Title of the child window*/);
      

      当控件 ID 未知时,这是一种更好的方法。

      【讨论】:

      • @aschipfl:这个解释有帮助吗?
      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多