WPF프로젝트개발법을 익히는중인데 유저메세지사용법 참 난감합니다. MFC에서는 별일없던 SendMessage도 WPF에서는 생소한데 아래코드에서 해결 좀 주세요
글쓴이: 익명 사용자 / 작성시간: 금, 2012/01/06 - 11:42오후
namespace MyTest { public partial class MainWindow : Window, IMessageFilter { private IntPtr m_handle; [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string className, string windowText); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam); public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { System.Windows.Forms.Application.AddMessageFilter(this); } private void Button1_Click(object sender, RoutedEventArgs e) { // m_handle값이 0으로 나옵니다. m_handle = FindWindow("MainWindow", "MainWindow"); //int iResult = SendMessage(m_handle, 100, 0, 0); } public bool PreFilterMessage(ref Message m) { //메세지기본처리부(현재 구현안됨) return false; } } }
Forums:
방법은 옳은것 같은데 혹시 개발환경에 문제가 있지
방법은 옳은것 같은데 혹시 개발환경에 문제가 있지 않을까요?
다시 한번 보는게 좋을것 같아요.
FindWindow 함수의 인자로 넘기는 값을 확인해 보세요
이 함수의 첫번째 인자는 윈도우클래스명, 두번째 인자는 윈도우캡션바의 타이틀명 으로써
보통 이 값을 만족하는 윈도우를 못찾으면 0을 반환합니다.
일단 윈도우클래스(첫번째인자)를 null로 주고 호출해 보세요.
그리고 MFC든 C#이든 윈도우 자신에게 메시지를 보낼 때를 위해, 윈도우핸들인자가 생략된 함수가 항상 있었던 걸로 기억합니다.
MFC : this->SendMessage(MsgCode, WParam, LParam)
c# : this.SendMessage(MsgCode, WParam, LParam)
이런식으로요, 저도 지금 기억이 가물 ㅜㅜ 별로 도움이 못된거 같네요.
새해 복 많이 받으세요~
댓글 달기