C언어에서 sendMessage()함수를 사용하는 것처럼 C#에서도 구현하고 싶은데 이것이 또 그냥 되지는 않더라.
[DllImport("coredll.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
이런 식으로 함수원형을 선언했다.
이렇게 구현하여 보내는 Message는 WndProc함수를 이용하여 확인할 수 있는데 .net framework에서는 Form class에서 지원하지만 compactframework에서는 사용할 수 없다.
MessageWindow를 이용하여 우회적으로 사용할 수는 있다.
protected override void WndProc(ref Message msg)
{
switch (msg.Msg)
{
case (MSG.Message1):
Console.WriteLine("Message1");
Program.mainform.Function1();
break;
case (MSG.Message2):
Console.WriteLine("in WndProc Message2");
switch (MSG.WParam.ToInt32())
{
case START:
if (Program.mainform.CLI_Flag == true)
{
Program.mainform.AbortThread();
}
Program.mainform.g_bStop = true;
break;
case PAUSE:
break;
case RESTART:
break;
case END:
Console.WriteLine("END");
if (Program.mainform.CLI_Flag == true)
{
Program.mainform.CreateThread();
}
break;
case ERROR:
break;
}
//Do something here
break;
}
// call the base class WndProc for default message handling
base.WndProc(ref msg);
}
}
다음은 message를 보내는 부분이다
SendMessage(winproc.Hwnd, MSG.Message1, IntPtr.Zero, IntPtr.Zero);
핸들러를 IntPtr형식으로 주게되면 dll에서 메시지를 보내는 것도 동일하게 받아올 수 있다.
'Programming > C#을즐기자' 카테고리의 다른 글
label에 mouse 가두기 (0) | 2014.03.28 |
---|---|
windowCE C#에서 Sleep time 설정 (0) | 2010.07.29 |
WindowsCE C#에서 registry 사용하기 (0) | 2010.06.26 |
Windows CE C#에서 프로그램 경로 얻어오기 (0) | 2010.06.26 |
compack framework (0) | 2010.06.05 |
dataGridView에 CheckBoxColumn 하드코딩으로 넣기 (0) | 2008.08.21 |
Visual Studio 2008 and .NET 3.5 Released (0) | 2008.02.26 |
닷넷Library 소스공개 (0) | 2008.02.26 |