2009-10-26 4 views
3

C#으로 수학 입력 패널을 만드는 방법은 무엇입니까?C#으로 수학 입력 패널 만들기

나는 그것을 dll에 넣고 호출하려고 시도했지만 즉시 닫는다.

#include <stdafx.h> 
#include <atlbase.h> 
#include "micaut.h" 
#include "micaut_i.c" 

extern "C" __declspec(dllexport) int run() 
{ 
    CComPtr<IMathInputControl> g_spMIC; // Math Input Control 
    HRESULT hr = CoInitialize(NULL); 
    hr = g_spMIC.CoCreateInstance(CLSID_MathInputControl); 
    hr = g_spMIC->EnableExtendedButtons(VARIANT_TRUE); 
    hr = g_spMIC->Show(); 

    return hr; 
} 

나는 C#에서 dll 함수를 호출하고 패널은 팝업되지만 바로 사라집니다. 어떤 제안?

답변

8

C# 프로젝트에서 COM 라이브러리 micautLib에 대한 참조를 추가하십시오. 그런 다음 (C#에서) 다음 코드를 사용할 수 있습니다

MathInputControl ctrl = new MathInputControlClass(); 
ctrl.EnableExtendedButtons(true); 
ctrl.Show(); 

나는 당신이 그것을 할 거 야 방법이 정확히 잘 모르겠어요,하지만이 (완전한 프로그램) 정상적으로 작동하는 것 같다.

using System; 
using System.Windows.Forms; 
using micautLib; 

namespace MathInputPanel 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      MathInputControl ctrl = new MathInputControlClass(); 
      ctrl.EnableExtendedButtons(true); 
      ctrl.Show(); 
      ctrl.Close +=() => Application.ExitThread(); 
      Application.Run(); 
     } 
    } 
} 
+0

감사의 말은, 매력처럼 작동합니다. – Neosani

+0

여기에는 핵심적인 문제점이나이 코드가 어떻게 해결되는지에 대해서는 설명되어 있지 않습니다. 핵심 문제는 Math Input Control을 인스턴스화하는 스레드가 메시지를 전달하기 위해 메시지 루프를 실행해야한다는 것입니다. 이것은 중요한 세부 사항입니다. – IInspectable

관련 문제