0
컨트롤 중 하나에 C++ 응용 프로그램 (SUMATRA pdf 뷰어)을 호스팅하는 Winforms 응용 프로그램이 있습니다.호스트 모드에서 DDE 서버가 연결을 설정하지 않았습니다.
DDE를 두 가지 방법으로 보낼 수 있기를 원하며, C++가 독립형 일 때 이 잘 작동합니다. 그러나 호스트 모드에서 I 은 WinForms 앱에서 수마트라로 DDE 연결을 시작할 수 없습니다. 나는 C#에서 NDDE를 사용
, 여기에 내 코드입니다 :
class SumatraCommander : DdeClient
{
public SumatraCommander() : base("SUMATRA", "control")
{
}
public void MoveDocuments(ClientsQuestion question)
{
if (!this.IsConnected) this.Connect(); // this line fails only when sumatra
//is hosted
}
}
그리고이 기능을 시작 수마트라
에서case WM_DDE_INITIATE:
return OnDDEInitiate(hwnd, wParam, lParam);
처리 WINAPI 메시지입니다 :
LRESULT OnDDEInitiate(HWND hwnd, WPARAM wparam, LPARAM lparam)
{
DBG_OUT("received WM_DDE_INITIATE from %p with %08lx\n", (HWND)wparam, lparam);
ATOM aServer = GlobalAddAtom(PDFSYNC_DDE_SERVICE);
ATOM aTopic = GlobalAddAtom(PDFSYNC_DDE_TOPIC);
if (LOWORD(lparam) == aServer && HIWORD(lparam) == aTopic) {
if (!IsWindowUnicode((HWND)wparam))
DBG_OUT("The client window is ANSI!\n");
DBG_OUT("Sending WM_DDE_ACK to %p\n", (HWND)wparam);
SendMessage((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, MAKELPARAM(aServer, 0));
}
else {
GlobalDeleteAtom(aServer);
GlobalDeleteAtom(aTopic);
}
return 0;
}
하는 것이 도움이됩니다 , 내가 수마트라 뷰어를 넣은 C# Winforms 컨트롤의 메시지 처리를 재정의한다면?
또는 C++ 코드에 문제가 있습니까?
또는 다른 컨트롤에서 호스팅 할 때 일반적으로 DDE 서버가 될 수 있습니까?
답장을 보내 주셔서 감사합니다.