是否可以将控制添加到另一个进程的窗口?

时间:2015-01-29 09:48:33

标签: winapi mfc handle hwnd

我已经创建了一个MFC窗口,并且从另一个项目中,我想通过其句柄(使用FindWindow)向该窗口添加一个按钮。手柄是正确的,但没有任何反应。这是不可能的,还是我做错了什么?

这是我的代码:

HWND hWnd = FindWindow(NULL, "MFCtest");
if(hWnd)
{
    printf("Found it\n");
    HWND hwndButton = CreateWindow( 
        "BUTTON",
        "OK",      // Button text 
        WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles 
        0,         // x position 
        0,         // y position 
        100,        // Button width
        100,        // Button height
        hWnd,     // Parent window
        NULL,       // No menu.
        (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), 
        NULL);      // Pointer not needed.

    if(!hwndButton)
        printf("GetLastError: %d\n", GetLastError());
}

1 个答案:

答案 0 :(得分:1)

是。但是!

问题是窗口总是属于创建它的线程。因此,这些控制消息的消息将到达创建这样一个窗口的线程中。

这可能会起作用,但是因为父窗口中的消息将被发送到子窗口将花费很长时间通过消息队列,并且如果无法直接检索和处理消息,则可能导致锁定。

所以最后我建议:不要这样做!