Freigeben über


Значения параметров оконных сообщений, приходящих в ваше окно, не содержат метафизическую истину

В документации MSDN в разделе об оконных сообщениях написано, что каждый из параметров что-то означает. Но только потому, что он означает что-то, совсем не значит, что этим он и является. Он всего-навсего означает это.

Но это вы итак знаете. Если у вас есть дескриптор окна, вы можете послать ему любое сообщение, какое захотите, с любыми параметрами, даже если эти параметры идут вразрез с реальностью. К примеру, вы можете написать некоторый код, который находит целевое окно и отправляет ему сообщение WM_COMMAND с параметрами, которые заявляют, что сообщение было сформировано при помощи сочетания клавиш, когда на самом деле оно было сформировано при помощи кода внутри вашего специального элемента. Но вы отправляете это сообщение с параметрами определенных сочетаний клавиш для того, чтобы обмануть программу, чтобы она считала, что это сообщение было сгенерировано в результате нажатия кнопок на клавиатуре. Аналогичным образом, если ваш элемент управления хочет сэмулировать щелчок по пункту меню, вы должны передать те же самые параметры таким же способом, как это делает само меню.

Однако есть некоторые люди, которым трудно перестроить свой мозг на этот стиль мышления (1, 2): если вы хотите что-то проэмулировать, вы должны вести себя так же, как и та вещь, которую вы пытаетесь эмулировать, а не так, как вы ведете себя обычно. Если в документации написано "элемент управления отправляет сообщение вот с такими параметрами" и вы и есть этот элемент управления, но вы хотите притвориться, как будто вы — меню, вам нужно отправлять сообщения в таком же виде, как это делает меню. Поэтому это и называется притворяться.

Документация по параметрам сообщений написана из предположения, что никто никем не притворяется. Какие здесь еще варианты? Здесь не обсуждается возможность того, что отправитель сообщения просто решил выкинуть пару фокусов и обманывает вас, потому что (1) ваша программа должна просто смириться с мошенничеством и отвечать на поддельные сообщения меню, как если бы они были настоящими сообщениями меню, потому что (2) все равно нет никакого способа сообщить вам, что вас обманывают. Чтобы определить обман, вы должны обладать способностью распознавать образ мышления программиста, который прислал вам это сообщение. "Боже мой, этот код генерирует сообщение и утверждает, что оно было вызвано элементом меню. Действительно ли этот код реализует окно с меню или же он просто пытается обвести меня вокруг пальца?"