Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Классы Afx:400000


Автор: Delphist 1.9.2006, 08:05
Здравствуйте! Поздравляю так сказать всех с днем знаний. Хотелось бы, чтобы в этот день моих знаний стало больше, а именно:
 подскажите, пожалуйста, какие есть аналоги в Delphi классам (или хотя бы скажите, что это за класса и для чего предназначены): 
    AfxFrameOrView42s
     Afx:400000:8:10023:0:0
     Afx:400000:b:10011:6:3024e
     Afx:400000:2b:10011:1900010:0

Из анализа двух программ (написанные разными фирмами) я понял что эти классы используются для рисование.

Автор: Earnest 1.9.2006, 09:44
Вряд ли есть прямые аналоги...
Эти классы регистрирует MFC для своих окон. Afx + цифры - это кисть, курсор, какие-то другие параметры. 
Т.е. большого смысла имя класса не имеет - лишь бы было уникальным.
Причем, эти классы могут использоваться для совершенно разных окон. Например, AfxFrameOrView - это может быть или фрейм, или вью - а это две большие разницы. Функциональность-то реализуется на другом уровне, в виде обработчиков конкретных C++ классов. 

Автор: Damarus 1.9.2006, 10:20
Delphist, вот функция из MFC, которая создаёт такие классы (последние три):
Код

LPCTSTR AFXAPI AfxRegisterWndClass(UINT nClassStyle,
    HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon)
{
    // Returns a temporary string name for the class
    //  Save in a CString if you want to use it for a long time
    LPTSTR lpszName = AfxGetThreadState()->m_szTempClassName;

    // generate a synthetic name for this class
    HINSTANCE hInst = AfxGetInstanceHandle();

    if (hCursor == NULL && hbrBackground == NULL && hIcon == NULL)
    {
        ATL_CRT_ERRORCHECK_SPRINTF(_sntprintf_s(lpszName, _AFX_TEMP_CLASS_NAME_SIZE, _AFX_TEMP_CLASS_NAME_SIZE - 1, _T("Afx:%p:%x"), hInst, nClassStyle));
    }
    else
    {
        ATL_CRT_ERRORCHECK_SPRINTF(_sntprintf_s(lpszName, _AFX_TEMP_CLASS_NAME_SIZE, _AFX_TEMP_CLASS_NAME_SIZE - 1, _T("Afx:%p:%x:%p:%p:%p"), hInst, nClassStyle,
            hCursor, hbrBackground, hIcon));
    }
    
    // see if the class already exists
    WNDCLASS wndcls;
    if (::AfxCtxGetClassInfo(hInst, lpszName, &wndcls))
    {
        // already registered, assert everything is good
        ASSERT(wndcls.style == nClassStyle);

        // NOTE: We have to trust that the hIcon, hbrBackground, and the
        //  hCursor are semantically the same, because sometimes Windows does
        //  some internal translation or copying of those handles before
        //  storing them in the internal WNDCLASS retrieved by GetClassInfo.
        return lpszName;
    }

    // otherwise we need to register a new class
    wndcls.style = nClassStyle;
    wndcls.lpfnWndProc = DefWindowProc;
    wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
    wndcls.hInstance = hInst;
    wndcls.hIcon = hIcon;
    wndcls.hCursor = hCursor;
    wndcls.hbrBackground = hbrBackground;
    wndcls.lpszMenuName = NULL;
    wndcls.lpszClassName = lpszName;
    if (!AfxRegisterClass(&wndcls))
        AfxThrowResourceException();

    // return thread-local pointer
    return lpszName;
}

Автор: Delphist 1.9.2006, 13:02
Цитата(Damarus @ 1.9.2006,  11:20)
Delphist, вот функция из MFC, которая создаёт такие классы (последние три):

Я так понял из кода это функция генерирует имя класса. 
А как узнать, что это за класс - форма, панель, фрейм или еще что-то.

Автор: Damarus 1.9.2006, 14:57
Цитата(Delphist @  1.9.2006,  14:02 Найти цитируемый пост)
А как узнать, что это за класс - форма, панель, фрейм или еще что-то.

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

Добавлено @ 15:01 
А функцию я привёл для того, чтобы было понятно, как связано имя класса с параметрами, переданными в функцию.

Автор: Delphist 8.9.2006, 10:17
Цитата(Earnest @  1.9.2006,  10:44 Найти цитируемый пост)
может быть или фрейм, или вью

А в чем между ними разница.

Автор: Earnest 8.9.2006, 15:53
Между ними просто-таки ничего общего  smile 

Автор: Zqrilsrog 21.12.2020, 18:35
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)