UIElement:CaptureMouse

ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ์ค‘์— ์š”์ฒญ์ด ๋“ค์–ด ์™”๋Š”๋ฐ

ShowDialog ๋กœ ์ฐฝ์ด ํ‘œ์‹œ ๋œ ์ดํ›„
์šฐํด๋ฆญ ์‹œ ์ฐฝ์„ ๋‹ซ์•„ ๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Dialog Window์— ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ ํ–ˆ๋”๋‹ˆ
์ปค์„œ๊ฐ€ ์œˆ๋„์šฐ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด ์˜ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์ด CaptureMouse ์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•˜์˜€๋Š”๋ฐ

public DialogWindow()
{
	InitializeComponent();
	Owner = Application.Current.MainWindow;
	Loaded += (_, _) => System.Diagnostics.Debug.WriteLine(CaptureMouse());
	MouseRightButtonDown += (_, _) => System.Diagnostics.Debug.WriteLine("asd");
}

์บก์ณ๋Š” true ๋กœ ์ ์šฉ ๋˜์—ˆ๊ณ  ์›ํ•˜๋Š” MRB๋Š” ์ž˜ ๋“ค์–ด ์˜ค๋Š”๋ฐ
์ œ๊ฐ€ ๋ฐ›์ง€ ์•Š๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ๊ฐ€ ๋จนํ†ต์ž…๋‹ˆ๋‹ค.

ํด๋ฆญ ๋“œ๋ ˆ๊ทธ ๋ชจ๋“  ์•ก์…˜์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ง์ ‘ ๋ฐ›์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ ํ•ด์•ผ ๋˜๋‚˜์š”?

์ด์ „์— WinAPI ํ• ๋•Œ ์™ธ๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ๋งˆ์šฐ์Šค์ด๋ฒคํŠธ ์ฃผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ
๊ทธ๊ฑธ wpf ์—์„œ๋Š” ๋ชป์“ฐ๋Š”๊ฑฐ ๊ฐ™๋„ค์š”.

PS : ์ด์ œ spy++ ์ด ์•ˆ๋˜๋‚˜์š”? ์œ„์— ์ ๊ณ  ๋ณด๋‹ˆ ์ฐพ์•„๋ณผ๊นŒ ์‹ถ์–ด์„œ ํ–ˆ๋Š”๋ฐ ๋ฉ”์„ธ์ง€๊ฐ€ ์•ˆ๋“ค์–ด ์˜ค๋„ค์š”โ€ฆ;; ๋„ˆ๋ฌด ์˜ค๋ž˜ ๋˜์„œ ์‚ฌ์šฉ๋ฒ•์„ ๊นŒ๋จน์—ˆ๋‚˜..

2๊ฐœ์˜ ์ข‹์•„์š”

๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€๋„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๋งˆ์šฐ์Šค ์ „์—ญ ํ›„ํ‚น์„ ์“ฐ๋ฉด ์–ด๋–จ๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

๊ทธ๋ฐฉ๋ฒ• ๋ฟ์ธ๊ฐ€ ๋ณด๊ตฐ์š”โ€ฆ

1๊ฐœ์˜ ์ข‹์•„์š”

RawInput์„ ์ด์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.NET Framework: 788. RawInput์„ ์ด์šฉํ•œ ํ‚ค๋ณด๋“œ/๋งˆ์šฐ์Šค ์ž…๋ ฅ ๋ชจ๋‹ˆํ„ฐ๋ง (sysnet.pe.kr)

๋‹จ์ง€, Click ์ฒ˜๋ฆฌ๋Š” ์—†์œผ๋ฏ€๋กœ Mouse ์ž…๋ ฅ์ธ ๊ฒฝ์šฐ Mouse.ButtonFlags์˜ ๊ฐ’์œผ๋กœ RightDown / RightUp์„ ์ ์ ˆํ•˜๊ฒŒ ํŒ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

๊ผผ์ˆ˜์ง€๋งŒ Dialog ์ฐฝ์„ ๋ถ€๋ชจ์ฐฝ ํฌ๊ธฐ๋งŒํผ ๋„์šฐ๊ณ  ๊ฐ€์šด๋ฐ ํŒจ๋„์„ ๋ถ™์ด๊ณ  ๋ฒ„ํŠผ์„ ๋ถ™์—ฌ ๋งˆ์น˜ ๋ฉ”์„ธ์ง€ ์ฐฝ๋งŒ ๋œฌ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋ฐฐ๊ฒฝ์„ ํˆฌ๋ช…์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ์š”?? ๊ทธ๋Ÿฌ๋ฉด ํ™œ์„ฑํ™”๋œ ์ฐฝ ์–ด๋””์—์„œ๋“  ๋งˆ์šฐ์Šค๊ฐ€ ์žˆ๊ฒŒ๋˜๋‹ˆ ์šฐํด๋ฆญ์ด ์ž‘๋™ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~! Dialog ์ฐฝ์ด ์›€์ง์—ฌ์•ผ ํ•œ๋‹ค๋ฉด ํŒจ๋„์— ๋งˆ์šฐ์Šค์ด๋ฒคํŠธ ์ถ”๊ฐ€ํ•˜๊ณ โ€ฆ ใ…Žใ…Ž;;

4๊ฐœ์˜ ์ข‹์•„์š”

์˜ดโ€ฆ ReleaseMouseCapture() ๋ฅผ ํ•˜์…จ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.

๋ฐ˜๋“œ์‹œ right button down ์— ์ฐฝ์ด ๊บผ์ ธ์•ผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด
right button down ์ด๋ฒคํŠธ์—์„œ CaptureMouse() ๋ฅผ ํ•˜๊ณ  right button up ์—์„œ ReleaseMouseCapture() ํ•ด์ค€ ๋‹ค์Œ DialogWindow ๋ฅผ close ํ•˜๋ฉด ๋  ๊ฑฐ ๊ฐ™์€๋ฐ์š”.

์•„๋‹Œ๊ฐ€ ใ…‡ใ……ใ…‡?

ํ˜น์‹œ ์ œ๊ฐ€ ์ดํ•ด๋ฅผ ๋ชปํ•œ ๊ฑฐ๋ผ๋ฉด ์ฃ„์†กโ€ฆ(_ _)

4๊ฐœ์˜ ์ข‹์•„์š”

์•„์ฃผ ์ข‹์€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Prism DialogService๋„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์ด๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ๋„ ํ˜„๋Œ€์ ์ด๊ณ  ํŠธ๋ Œ๋””ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๋„ ์žˆ๊ฒ ๋„ค์š”.

3๊ฐœ์˜ ์ข‹์•„์š”