Поле редактирования c ++ идет за главным окном - PullRequest
0 голосов
/ 06 ноября 2010

Я создал поле для редактирования, но оно не отображается в окне. это показывает, если окно не полноэкранное. если это полноэкранный режим, поле редактирования идет за ним. вот функция для поля ввода

HWND editbox=CreateWindowA("EDIT", NULL, 
                      WS_VISIBLE | WS_EX_TOPMOST | WS_BORDER | ES_LEFT, 
                      87, 81, 150, 17, 
                      hWnd, 
                      (HMENU)5, hInstance, NULL);

Я не знаю, почему это так, я установил его на WS_EX_TOPMOST, и он все еще идет за ним. я использовал DirectX 9, чтобы сделать мою программу в полноэкранном режиме

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

HWND editbox = CreateWindowA ("EDIT", NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT, 87, 81, 150, 17, HWND, (HMENU) 5, hInstance, NULL);

WS_CHILD требуется, если вы хотите отобразить новый элемент управления поверх окна ...

2 голосов
/ 06 ноября 2010

Все WS_EX_** стили должны быть переданы как первый аргумент CreateWindowEx, а не третий CreateWindow. Это, вероятно, вызывает проблему. Используйте CreateWindowExA вместо этого. Все аргументы в CreateWindowEx остаются неизменными, в начале есть только один дополнительный параметр.

HWND editbox=CreateWindowExA(WS_EX_TOPMOST, "EDIT", NULL, 
                  WS_VISIBLE | WS_BORDER | ES_LEFT, 
                  87, 81, 150, 17, 
                  hWnd, 
                  (HMENU)5, hInstance, NULL);



РЕДАКТИРОВАТЬ: Я знаю, что было не так. Вы забыли стиль WS_CHILD в третьем аргументе. Это необходимо, чтобы Windows знала, что это дочернее окно.

HWND editbox=CreateWindowA("EDIT", NULL,
              WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,
              87, 81, 150, 17,
              hWnd,
              (HMENU)5, hInstance, NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...