Окно инструмента с идентификатором ресурса - PullRequest
0 голосов
/ 22 июля 2011

Как я могу это сделать?

Кажется, работает следующее:

CreateWindowEx(WS_EX_TOOLWINDOW, szToolWndClass, "Title",
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320,
hWnd, NULL, hInstance, NULL)

Но это не так (окно не отображается):

CreateWindowEx(WS_EX_TOOLWINDOW, szToolWndClass, "Title",
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 240, 320,
hWnd, (HMENU) IDD_TOOL, hInstance, NULL)

Однако, это работает, когда я добавляю стиль WS_CHILD, но это не создает плавающее окно.

1 Ответ

0 голосов
/ 23 июля 2011

Окна верхнего уровня используют слот идентификатора в качестве HMENU (точнее, дочерние окна используют слот HMENU в качестве идентификатора элемента управления);поэтому дочерние окна не могут иметь HMENU, а HWND верхнего уровня не могут иметь идентификаторы.

Вероятно, случается, что когда вы опускаете WS_CHILD, окна воспринимают идентификатор как HMENU, и, поскольку он недопустимHMENU, не удается вызвать CreateWindow.

Вообще говоря, идентификатор имеет смысл только в контексте известного контейнера.Таким образом, в контексте диалога идентификаторы имеют смысл, потому что диалоговое окно владеет элементами управления в нем, и автор может убедиться, что в нем нет дубликатов - и GetDlgItem сделает что-то разумное.

Но на рабочем столе каждое окноиз другого источника, поэтому не было бы никакого способа обеспечить уникальные идентификаторы, поэтому концепция в любом случае не имела бы смысла.

Ваш лучший выбор, возможно, состоит в том, чтобы спасти сам HWND и использовать егонепосредственно при необходимости.

Следует помнить одну вещь: если вы не используете WS_CHILD, ваше новое окно на самом деле является дочерним по отношению к окну рабочего стола, но HWND принадлежит * .Вы проходите мимо, это не ребенок этого окна.Перечисление дочерних окон этого окна владельца не вернет ваше новое окно.

Рэймонд Чен (чей блог должен считаться обязательным для чтения всеми разработчиками Win32) имеет хорошее объяснение проблемы «родитель против владельца» здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...