Это пример симметричной частичной ассоциации. Такая связь может быть смоделирована только с помощью подходящего ограничения, как показано в следующей модели:
Прикрепленное явное ограничение / invariant можно избежать, только если бы было определено соответствующее ключевое слово ограничения, которое будет использоваться в стереотипе ассоциации, таком как «симметричный». К сожалению, в UML 2.5 такой стереотип отсутствует, но мы можем добавить его следующим образом:
[У меня есть Прочитайте комментарий "bruno" выше только после отправки моего ответа. «Бруно» правильно указал на необходимость основной части ограничения: self.partner.partner = self
.]
GetNextWindow() is actually a macro for GetWindow(), rather than an actual API method. It's for backward compatibility with the Win16 API.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
enum GetWindow_Cmd : uint {
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
(From Pinvoke.net)
GetNextWindow - это макрос c ++, который вызывает GetWindow, поэтому его нельзя вызвать из .NET. Вместо этого вызовите GetWindow.
Из MSDN :
Использование этой функции аналогично вызову функции GetWindow с установленным флагом GW_HWNDNEXT или GW_HWNDPREV