当前位置:C++技术网 > 资讯 > Create与CreateEx函数

Create与CreateEx函数

更新时间:2015-10-18 23:23:04浏览次数:1+次

首先函数声明是


BOOL Create( LPCTSTR lpszClassName,
             LPCTSTR lpszWindowName,
             DWORD dwStyle = WS_OVERLAPPEDWINDOW,
             const RECT& rect = rectDefault,
             CWnd* pParentWnd = NULL,
             LPCTSTR lpszMenuName = NULL,
             DWORD dwExStyle = 0,
             CCreateContext* pContext = NULL );
其实这个函数前2个参数也是必须要的,后面的参数则是表明产生怎么样窗口。
第一个参数lpszClassName是指定WNDCLASS窗口类,设为NULL是表明以MFC内建的窗口类产生一个标准的外框窗口。
第二个参数lpszWindowName是指定窗口的标题。
第三个参数dwStyle是指定窗口风格。
(#define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | WS_CAPTION |
                              WS_SYSMENU | WS_THICKFRAME |
                              WS_MINIMIZEBOX | WS_MAXIMIZEBOX))
第四个参数rect是指定窗口的大小。
第五个参数是指定父窗口。
第六个参数lpszMenuName是指定父窗口的菜单栏 在VC2005中式IDR_MAINFRAME需要用MAKEINIRESOURCE(IDR_MAINFRAME).
剩余2个可略。
例如:
Create(NULL, _T("Hello MFC"),WS_OVERLAPPEDWINDOW,CRect(40,60,400,400),
  NULL, MAKEINTRESOURCE(IDR_MAINFRAME));




BOOL CreateEx(
DWORD dwExStyle,
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID,
LPVOID lpParam = NULL
);
不过函数参数lpszClassName的取值,你得注意要先注册窗口类哦!要不然哪来的?
CreateEx与Create的区别在于CreateEx能创建WS_POPUP样式的窗口和有扩展样式。Create是通过调用CreateEx函数来实现创建窗体的。
当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由:
HWND hwnd;  CWnd* pWnd;  pWnd=((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();  hwnd=pWnd->GetDlgItem(IDC_EDIT2)->GetSafeHwnd();
  ::SetWindowText(hwnd,m_strResult);
(调用它返回窗口的句柄,如果CWnd没有与任何窗口联系或者用于一直空的CWnd指针,它返回NULL)