hur.cn - 华软网

 热门搜索

【请教】OnCreat与Creat区别

  作者:未知    来源:网络    更新时间:2010/10/15
请教各位达人,新建一个单文档文件,在文件中的CMainFrame中会有一个:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;      // fail to create
}

// TODO: Delete these three lines if you don't want the toolbar to
//  be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}



而在WINFRM.CPP中有一个

BOOL CFrameWnd::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
LPCTSTR lpszMenuName,
DWORD dwExStyle,
CCreateContext* pContext)
{
HMENU hMenu = NULL;
if (lpszMenuName != NULL)
{
// load in a menu that will get destroyed when window gets destroyed
HINSTANCE hInst = AfxFindResourceHandle(lpszMenuName, RT_MENU);
if ((hMenu = ::LoadMenu(hInst, lpszMenuName)) == NULL)
{
TRACE0("Warning: failed to load menu for CFrameWnd.\n");
PostNcDestroy();            // perhaps delete the C++ object
return FALSE;
}
}

m_strTitle = lpszWindowName;    // save title for later

if (!CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), hMenu, (LPVOID)pContext))
{
TRACE0("Warning: failed to create CFrameWnd.\n");
if (hMenu != NULL)
DestroyMenu(hMenu);
return FALSE;
}

return TRUE;
}


孙鑫的VC++深入详解上讲的第一个是创建窗口,而第二个也是创建窗口,请问这俩有什么区别啊,搞晕了,多谢多谢
---华软 网友回答---
调用Create函数的时候,系统会发一个WM_CREATE消息到你的窗口。

你再去用 OnCreate就可以处理这个消息。
---华软网友回复---
Create创建窗口是你主动调用来执行的。OnCreate是事件响应,当你Create窗口时,供你完成一些其它与创建相关的事务的。
可以看到,Create函数中的内容,都是创建这个窗口本身所需的代码;而OnCreate中,都是这个窗口附属的子窗口的创建,对于窗口本身来说,没有这些附属子窗口也没有问题,但是Create中的内容都是必须的。
---华软网友回复---
Create只管完成创建这个窗口所必须做的工作,而OnCreate允许你去做一些不是窗口必须的,但是你自己需要的与窗口相关的一些操作。
---华软网友回复---
OnCreate是WM_CREATE的消息响应函数
---华软网友回复---
这个我以前也搞不清楚得,但是OnCreate是WM_CREATE得消息相应函数,这个和PreCreateWindow都是MFC为了方便用户对于API进行封装的.能在Create的同时做些其他的事情.

2楼讲的很细啊
---华软网友回复---
先Create,Create完后socket本身自动会调用OnCreate,OnCreate是WM_CREATE的消息响应函数,可在Create动作时再实现一些内容
---华软网友回复---
引用 2 楼 happyparrot 的回复:
Create创建窗口是你主动调用来执行的。OnCreate是事件响应,当你Create窗口时,供你完成一些其它与创建相关的事务的。
可以看到,Create函数中的内容,都是创建这个窗口本身所需的代码;而OnCreate中,都是这个窗口附属的子窗口的创建,对于窗口本身来说,没有这些附属子窗口也没有问题,但是Create中的内容都是必须的。

是的,并且OnCreate是WM_CREATE的消息响应函数,有消息就在这个函数中处理,没有就啥也没有,所谓的“不是必须的”
---华软网友回复---
引用 1 楼 ilysony 的回复:
调用Create函数的时候,系统会发一个WM_CREATE消息到你的窗口。

你再去用 OnCreate就可以处理这个消息。



谢谢~讲的很详细~~
---华软网友回复---
引用 2 楼 happyparrot 的回复:
Create创建窗口是你主动调用来执行的。OnCreate是事件响应,当你Create窗口时,供你完成一些其它与创建相关的事务的。
可以看到,Create函数中的内容,都是创建这个窗口本身所需的代码;而OnCreate中,都是这个窗口附属的子窗口的创建,对于窗口本身来说,没有这些附属子窗口也没有问题,但是Create中的内容都是必须的。


谢谢,讲解的很详细~
---华软网友回复---
终于明白了这个函数,原来是这样子的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。