0

Explorer Context(右クリック)メニューをクリックすると起動するMFCアプリケーションを作成しています。

ただし、アプリケーションのインスタンスを1つだけ起動する必要があります。そのためには、FindWindowAfxRegisterClassを使用する必要があります

以下のように、MFCアプリにクラスを登録しようとしました。

BOOL CNDSClientDlg::InitInstance()
{
    //Register Window Updated on 16th Nov 2010, @Subhen
    // Register our unique class name that we wish to use
    WNDCLASS wndcls;
    memset(&wndcls, 0, sizeof(WNDCLASS));
    //Class name for using FindWindow later
    wndcls.lpszClassName = _T("NDSApp");
    // Register new class and exit if it fails

    if(!AfxRegisterClass(&wndcls)) // [C]

    {
        return FALSE;
    }
}

MFCクラスのコンストラクターでメソッドを呼び出しました。アプリケーションの起動中に、クラスが登録されていることを確認しました。

現在、シェル拡張機能で、MFCに登録されているクラスを次のように検索しようとしています。

CWnd *pWndPrev = NULL;
 pWndPrev = CWnd::FindWindow(_T("NDSApp"),NULL);
         if(pWndPrev != NULL)
            pWndPrev->BringWindowToTop();

しかし、CWndをWindowに取得できません。それを理解することができません。何かが足りない、または何か間違ったことをしている場合はお知らせください。

4

1 に答える 1

3

FindWindowは、ウィンドウクラスではなくウィンドウインスタンスを検索します。クラスを登録するアプリでは、拡張機能がそのウィンドウを見つけられるように、実際にウィンドウを作成する必要があります。

(クラス名でウィンドウを検索することは問題ありません。問題は、実際に検索するものを作成していないことです。)

また、登録したウィンドウクラスに基づいてウィンドウを作成しようとすると、WNDCLASS構造のほとんどがnullのままになっているため、失敗する可能性があります。より良いデフォルト値については、リンクした例を参照してください。(たとえば、wndprocとhinstanceを提供する必要があります。)

于 2010-11-16T12:51:34.307 に答える