Win32 C ++:重叠的子窗口不会聚焦

时间:2015-07-13 07:00:05

标签: c++ winapi window

我的问题是: 需要做什么才能在带有标题的子窗口中进行功能编辑控制?

我一直在为Win32开发一个包装器并遇到了一些麻烦。 带有子标题窗口的重叠Windows似乎无法完全激活或获得焦点。也许是因为缺少焦点,儿童字幕窗口中的编辑控件将无法正常工作。

隔离我的错误的实验如下:

  1. 设置窗口类
  2. 注册该课程
  3. 使用类
  4. 创建重叠窗口
  5. 使用相同的类
  6. 创建一个带有标题的子窗口
  7. 在子窗口中创建编辑控件
  8. 观察结果符合我的包装项目: 子窗口可以根据样式位移动和调整大小。 在被选中时,其标题不会改变颜色以暗示它是焦点。 “编辑”控件不响应单击。没有插入符号。 子窗口中的按钮控件正常响应。

    此外, 从子窗口中删除标题允许编辑控件正确地进行交互。

    这是测试代码:

    // Create a WNDCLASSEX for registering windows
    WNDCLASSEX wndclass;
    ZeroMemory(&wndclass, sizeof(WNDCLASSEX));
    wndclass.cbSize         = sizeof(WNDCLASSEX);
    wndclass.style          = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    = WndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground  = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName   = NULL;
    wndclass.lpszClassName  = L"MyTestClassForText";
    
    // Check for register problem
    if (!RegisterClassEx(&wndclass))
    {
        MessageBox( NULL , L"Window Couldn't be Created" , L"Error" , MB_OK );
        return false;
    }
    
    // Create a child window to the main window and put an edit contol inside. What happends?
    HWND parWnd     = CreateWindowEx( NULL              , L"MyTestClassForText" , L"Parent Window"      , WS_OVERLAPPEDWINDOW | WS_VISIBLE                  ,0 ,0  ,340 ,240 , NULL     , NULL , hInstance , NULL );
    HWND childWnd   = CreateWindowEx( NULL              , L"MyTestClassForText" , L"Child Window"       , WS_CHILDWINDOW | WS_VISIBLE | WS_OVERLAPPEDWINDOW ,0 ,0  ,300 ,200 , parWnd   , NULL , hInstance , NULL );
    HWND editWnd    = CreateWindowEx( WS_EX_CLIENTEDGE  , L"EDIT"               , L"Try To Edit This."  , WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL            ,4 ,4  ,270 ,40  , childWnd , NULL , hInstance , NULL );
    HWND buttonWnd  = CreateWindowEx( NULL              , L"BUTTON"             , L"This Works"         , WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON             ,4 ,52 ,100 ,30  , childWnd , NULL , hInstance , NULL );
    

    您可以假设在所提到的WndProc中充分使用了Windows默认进程,并且整个程序中的hInstance是一致的。将子窗口中的样式标志从WS_OVERLAPPEDWINDOW更改为WS_CAPTION会导致同样的问题。

    我知道直接在另一个窗口中有一个窗口是不正常的,但它应该是可能的。

    非常感谢您的帮助和考虑,

    迦勒

0 个答案:

没有答案