Почему рисуется только одно окно?

Тема в разделе "WASM.WIN32", создана пользователем drem1lin, 12 янв 2018.

Метки:
  1. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Здравствуйте, я пытаюсь написать небольшую утилиту на с++ с использованием winapi и столкнулся с проблемой. Есть основное окно, в нем хочу создать несколько похожих дочерних, один под одним для элементов из БД и еще одно пустое, для добавления элемента. Написал код, но вижу только одно окно. Начал искать в чем беда, когда оставил одно любое из окон, то оно создается. Потом я сместил окно с элементом бд, и за ним окна добавления нет. Почему оба окна не создаются вместе?
    Код (C):
    1. for (i = 0; i < keys.size(); i++)
    2.       {
    3.         keys[i].Register(hWnd, 1);
    4.         Child = CreateWindowEx(0, CHILD_CLASSNAME, L"Child 1", WS_CHILDWINDOW | WS_VISIBLE,
    5.           WindowRectSize.left + 50,
    6.           WindowRectSize.top + (int)i * 102,
    7.           WindowRectSize.right,
    8.           100,
    9.           hWnd,
    10.           NULL,
    11.           g_hInst,
    12.           (LPVOID)(&keys[i]));
    13.  
    14.         ShowWindow(Child, SW_SHOW);
    15.         UpdateWindow(hWnd);
    16.       }
    17.  
    18.       Child = CreateWindowEx(0, CHILD_CLASSNAME, L"Child 999", WS_CHILDWINDOW | WS_VISIBLE,
    19.         WindowRectSize.left,
    20.         WindowRectSize.top + (int)i * 102,
    21.         WindowRectSize.right,
    22.         100,
    23.         hWnd,
    24.         NULL,
    25.         g_hInst,
    26.         NULL);
    27.  
    28.       ShowWindow(Child, SW_SHOW);
    29.       UpdateWindow(hWnd);
    Естественно все возвращаемые значения проверял, и брекпойнт срабатывает дважды в WndProc
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Окна создаются, но их просто не видно (хендлы не нулевые)? Что говорит Spy++? Как организована обработка WM_PAINT у родителя, у потомков? WS_CLIPCHILDREN стоит для родительского окна?
     
  3. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    во первых им надо обработчики событий, а так посмотрите дерево через IngSoft WinScanner
     
    Последнее редактирование: 12 янв 2018
  4. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Окно Spy++ прикрепил. Окна есть, почему то одновременно не видно. WM_PAINT родитель не обрабатывает. Потомки тоже не обрабатывают. На WM_CREATE родитель создает детей, а дети создают кнопочки. WS_CLIPCHILDREN добавил, ничего не поменялось
     

    Вложения:

  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    drem1lin, нужен весь код вместе с обработчиками.
     
    RET нравится это.
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Как же без обработчиков событий то)))
     
  7. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    В общем спасибо за подсказку, совсем забыл о Spy++. Сейчас поковырялся в коде и нашел. Я по ошибке в наследниках привязал позицию кнопок к позиции наследника, и на первом все сходилось, а второй уже рисовал кнопки ниже размера наследника, поэтому все было, только его не было видно. Или если сказать страшнее я не нарисовал окно не там, я контролы в окне нарисовал за пределами этого окна.