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中的内容都是必需的。


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