Доброго всем времени суток!
В классе 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 ]