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サーバーではありませんか?
返信ありがとう