我想看看OnCreate()是什么出来的,所以,我在Create()和OnCreate()都设了断点,程序先进入Create(),然后我就跟,可是不明显,跟到::CreateWindowEx()后,就进入OnCreate()中了,也不知道经过了什么操作就进来了,我想知道,类似于消息激发的这样的函数(OnCreate()是由消息WM_CREATE消息才调用的),我们可以看到它是在哪里调用的吗?反正我没有看到在哪里有类似
if(CFrameWnd::OnCreate())
{..}
这样的语句。我只能看到OnCreate()的定义,但看不到它被谁调用。是不是根本我们看到不到啊?? 

解决方案 »

  1.   

    1。 你看看消息映射的意思
    2。 看看WM_CREATE 消息的说明:在 CreateWindow返回前。
      

  2.   

    消息映射我知道啊。可关键我们从哪里看到发送了消息呀?::CreateWindowEx()是一个api函数,你不知道它里面如何触发了WM_CREATE呀。这个问题很重要,不过以前不论是<深入浅出mfc》里没有关于这个问题的说明。或者说没有深入到这个问题请讨论
      

  3.   

    create()调用触发wm_create事件
    当然就调用oncreate()消息处理函数
      

  4.   

    这个我来告诉你,CreateWindowEx内部填写好消息后,不把消息发到队列,而是要直接调用窗口函数,而MFC底层用了hook机制,最终会将这个调用转到OnCreate这里。
      

  5.   

    hotness28(小左) 回答的谁都明白,可我问的是更深入的问题。触发消息WM_CREATE后怎么就调用Oncreate()了?不要以为这是个理所当然的过程,是有原因的!!
      

  6.   

    为什么没有人回答呀?我还想知道消息函数中的参数的意义!比如::CreateWindowEx()函数会激发WM_CREATE消息,调用OnCreate()函数,但这两个函数中的参数却不一样,请问这样的消息调用函数的参数有什么特点,或者说与原函数有什么关系?
    例如:::CreateWindowEx(cs.dwExStyle, cs.lpszClass,
    cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy,
    cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);//这些是::CreateWindowEx的函数的参数表。而OnCreate()函数的参数表却是:OnCreate(LPCREATESTRUCT lpCreateStruct)
    这两者的参数表当然是有一定的关系,从::CreateWindowEx直接到OnCreate()函数是不是太快了点,中间的过程是怎么样的呢?
      

  7.   

    而且,大家都知道CMainFrame::OnCreate()中大都是进行工具条、状态条、对话条的建立操作。我认为这是因为大家已经接受了这个事实,可为什么呢?OnCreate()中到底都可以作哪些操作?难道只是工具条、状态条、对话条的建立吗?分割视图可以吗?为什么呀?换句话说:::CreateWindowEx()到底把窗口建立完毕了没有?或者说如果没有建立完毕,那建立到了什么程度?在OnCreate()操作中是必须作某些操作吗?