[面试] C/C++ —— MFC(三)

CWnd 窗口基类的仿真

class CWnd
{
public:
    BOOL CreateEx( DWORD dwExStyle,      // extended window style
                ...     
            );
    BOOL ShowWindow(int nCmdShow);
    BOOL UpdateWindow();
public:
    HWND m_hWnd;
};

BOOL CWnd::CreateEx(DWORD dwExStyle,      // extended window style
                ....
                    )
{
    m_hWnd = ::CreateWindowEx(dwExStyle, ....);
    return m_hWnd ? true:false;
}

BOOL CWnd::ShowWindow(int nCmdShow)
{
    return ::ShowWindow(m_hWnd, nCmdShow);
}

BOOL CWnd::UpdateWindow()
{
    return ::UpdateWindow(m_hWnd);
}


int WINAPI WinMain(  HINSTANCE hInstance, ....)
{

    WNDCLASS wndcls;
    wndcls.cbClsExtra = 0;
    wndcls.cbWndExtra = 0;
    // ...
    RegisterClass(&wndcls);
    CWnd wnd;
    wnd.CreateEx(...);
    wnd.ShowWindow(SW_SHOWNORMAL);
    wnd.UpdateWindow();
    ...
}

C++ 对象(CWnd)与窗口之间的关系

仅仅是因为在 CWnd 类的内部维护了一个指向窗口的句柄。

public:
    HWND m_hWnd; 

窗口销毁,CWnd 对象的其他成员函数依然可以使用;

你可能感兴趣的:([面试] C/C++ —— MFC(三))