Winapi: обработка пользовательских и стандартных не клиентских элементов управления - PullRequest
0 голосов
/ 27 июня 2011

Все не связанные с клиентом события управления по умолчанию контролируются DefWindowProc .Я хочу создать свои собственные не клиентские элементы управления;это приводит меня к перехвату WM_NCPAINT msg и, вероятно, создает мой собственный дескриптор для управления окнами в не клиентской области.Если я хочу создать кнопку сворачивания или сворачивания, то мне придется воссоздать (с нуля?) И перехватить все события, которые предполагается обработать по умолчанию для оконной процедуры, потому что размер, расположение и атрибут моих пользовательских кнопок не являютсято же самое со стандартными.Тем не менее, я до сих пор не уверен, что это обычные способы создания пользовательских не-клиентских элементов управления, которые имитируют стандартные не-клиентские элементы управления, поэтому я хочу убедиться, что я на правильном пути:

  1. Не передавайте стиль окна по умолчанию, который задает создание элементов управления, не связанных с клиентом (кнопка «Свернуть», «Развернуть», «Закрыть»)
  2. Создание собственных элементов управления окнами (например, для кнопок) внутри области, не связанной с клиентом
  3. Перехватить все сообщения, относящиеся к ним.если пользовательское окно является окном по умолчанию, например кнопка «Свернуть», то отправлять сообщения относятся к этой кнопке? (Однако я вижу только сообщение WM_CLOSE, там нет WM_MINIMIZE или WM_MAXIMIZE)

У меня проблемы с обработкой всех процедур по умолчанию;если возможно, я бы хотел посмотреть, что внутри DefWindowProc (чтобы я мог имитировать их функции и одновременно добавлять свои)

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Нарисуйте свои пользовательские кнопки, где заголовок обычно размещает их. Положение не имеет значения. В разделе WM_COMMAND вашего обратного вызова используйте ShowWindow(hwnd, SW_MAXIMIZE) и ShowWindow(hwnd, SW_RESTORE). Вот и все.

2 голосов
/ 27 июня 2011

Звучит, если хочешь все на заказ.Если вам абсолютно необходимо наложить некоторый «шум» на ваших пользователей, то просто сделайте это, разместив свои вещи в клиентской области, и не оставляйте никаких областей, не относящихся к клиенту (без границ и т. Д.).Возможно, вам придется реализовать перетаскивание окна, но я думаю, что это все.

Cheers & hth.,

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