Как зарегистрировать класс Windows и найти окно, используя зарегистрированный класс - PullRequest
0 голосов
/ 16 ноября 2010

Я создаю приложение MFC, которое будет запускаться при нажатии в контекстном меню проводника (щелчок правой кнопкой мыши).

Но мне нужно запустить только один экземпляр приложения.Для этого я должен использовать FindWindow и AfxRegisterClass

Я попытался зарегистрировать класс в своем приложении 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 to Window.Не в состоянии понять это.Пожалуйста, дайте мне знать, если я что-то упускаю или делаю что-то не так.

1 Ответ

3 голосов
/ 16 ноября 2010

FindWindow находит окно экземпляры не окно классы .В вашем приложении, которое регистрирует класс, вам нужно создать окно, чтобы расширение могло найти это окно.

(Найти окно по имени класса можно, проблема в том, что вы ничего не создалиfind.)

Кроме того, я подозреваю, что если вы попытаетесь создать окно на основе зарегистрированного вами оконного класса, оно не будет выполнено, потому что вы оставили большую часть структуры WNDCLASS пустой.См. Пример, на который вы ссылаетесь, для получения лучших значений по умолчанию.(Например, вы должны предоставить wndproc и hinstance.)

...