Microsoft Foundation Classes を使用してアプリケーションを開発している場合は、メイン・ダイアログ・クラスかアプリケーション・クラスで同期メッセージを取得できます。ここでは、両方の方法について説明します。
メッセージの通知用に、アプリケーションのカスタム・ウィンドウ・クラス名を作成し、登録しておいてください。アプリケーションに対するクラス名の割り当てを参照してください。
登録したメッセージを追加し、メッセージ・ハンドラを宣言します。
メイン・ダイアログのソース・ファイルでメッセージ・マップを検索します (名前は CMyAppDlg.cpp と同じ形式です)。次の例のように、登録したメッセージを static を使用して追加し、メッセージ・ハンドラを ON_REGISTERED_MESSAGE を使用して宣言します。
static UINT WM_ULTRALITE_SYNC_MESSAGE = ::RegisterWindowMessage( UL_AS_SYNCHRONIZE ); BEGIN_MESSAGE_MAP(CMyAppDlg, CDialog) //{{AFX_MSG_MAP(CMyAppDlg) //}}AFX_MSG_MAP ON_REGISTERED_MESSAGE( WM_ULTRALITE_SYNC_MESSAGE, OnDoUltraLiteSync ) END_MESSAGE_MAP() |
メッセージ・ハンドラを実装します。
次のシグニチャで、メイン・ダイアログ・クラスにメソッドを追加します。ActiveSync 用 Mobile Link プロバイダがアプリケーションの同期を要求するときは、常にこのメソッドが自動的に実行されます。このメソッドで、ULSynchronize を呼び出してください。
LRESULT CMyAppDlg::OnDoUltraLiteSync( WPARAM wParam, LPARAM lParam ); |
この関数の戻り値は 0 にしてください。
同期メッセージの処理の詳細については、ULIsSynchronizeMessage 関数を参照してください。
アプリケーション・クラスのクラス・ウィザードを開きます。
[メッセージ] リストで、PreTranslateMessage を強調表示して [関数の追加] をクリックします。
[コードの編集] をクリックします。PreTranslateMessage 関数が表示されます。それを次のように変更します。
BOOL CMyApp::PreTranslateMessage(MSG* pMsg) { if( ULIsSynchronizeMessage(pMsg->message) ) { DoSync(); // close application if launched by provider if( pMsg->wParam == 1 ) { ASSERT( AfxGetMainWnd() != NULL ); AfxGetMainWnd()->SendMessage( WM_CLOSE ); } return TRUE; // message has been processed } return CWinApp::PreTranslateMessage(pMsg); } |
DoSync は実際に ULSynchronize を呼び出す関数です。
同期メッセージの処理の詳細については、ULIsSynchronizeMessage 関数を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |