[PRB] WinCE + CAppWindowBase::ActivatePreviousInstance()
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 20.09.06 13:46
Оценка: 2 (2)
Доброго всем времени суток!

В классе CAppWindowBase из <atlwince.h> иммется метод ActivatePreviousInstance, содержащий в самом начале вот такой код:

static HRESULT ActivatePreviousInstance(HINSTANCE hInstance, LPCTSTR  lpstrCmdLine, bool bDialog)
{
    // requires T does DECLARE_APP_FRAME_CLASS, DECLARE_APP_FRAME_CLASS_EX or DECLARE_APP_DLG_CLASS
    CFrameWndClassInfo& classInfo = T::GetWndClassInfo();

    ATLVERIFY(::LoadString(hInstance, classInfo.m_uCommonResourceID, classInfo.m_szAutoName, sizeof(classInfo.m_szAutoName)/sizeof(classInfo.m_szAutoName[0])) != 0);

    classInfo.m_wc.lpszClassName = classInfo.m_szAutoName;

...
}

Выделенная строка приводит к тому, что имя класса окна, заданное нами посредством макроса DECLARE_FRAME_WND_CLASS(), "самопроизвольно" заменяется на совершенно другое и функции типа FindWindow() перестают возвращать "положительные" результаты. Решением будет исправить этот код следующим образом:

    static HRESULT ActivatePreviousInstance(HINSTANCE hInstance, LPCTSTR  lpstrCmdLine, bool bDialog)
    {
        // requires T does DECLARE_APP_FRAME_CLASS, DECLARE_APP_FRAME_CLASS_EX or DECLARE_APP_DLG_CLASS
        CFrameWndClassInfo& classInfo = T::GetWndClassInfo();

        ATLVERIFY(::LoadString(hInstance, classInfo.m_uCommonResourceID, classInfo.m_szAutoName, sizeof(classInfo.m_szAutoName)/sizeof(classInfo.m_szAutoName[0])) != 0);

        if (classInfo.m_wc.lpszClassName == NULL || *classInfo.m_wc.lpszClassName == 0)
        {
            classInfo.m_wc.lpszClassName = classInfo.m_szAutoName;
        }

...
}
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.