Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows “的WindowProc是什么?”;MDI客户端窗口“;在MFC中_Windows_Visual C++_Mfc - Fatal编程技术网

Windows “的WindowProc是什么?”;MDI客户端窗口“;在MFC中

Windows “的WindowProc是什么?”;MDI客户端窗口“;在MFC中,windows,visual-c++,mfc,Windows,Visual C++,Mfc,伙计们, 我是一个新的广告人,我刚刚开始学习MFC。 我有一个关于MDI应用程序框架的问题。 在MFC中。 我从代码中了解到,当我新建一个文件时,MDI客户端窗口总是创建一个子框架。 但是我在MFC中找不到什么是“MDI客户端窗口”的WindowProc。 实际上,“MDI客户端窗口”是在我们创建主框架之后创建的 winmdi.cpp // Create MDICLIENT control with special IDC if ((m_hWndMDIClient = ::AfxCtxCre

伙计们, 我是一个新的广告人,我刚刚开始学习MFC。 我有一个关于MDI应用程序框架的问题。 在MFC中。 我从代码中了解到,当我新建一个文件时,MDI客户端窗口总是创建一个子框架。 但是我在MFC中找不到什么是“MDI客户端窗口”的WindowProc。 实际上,“MDI客户端窗口”是在我们创建主框架之后创建的

winmdi.cpp
 // Create MDICLIENT control with special IDC
 if ((m_hWndMDIClient = ::AfxCtxCreateWindowEx(dwExStyle, _T("mdiclient"), NULL,
      dwStyle, 0, 0, 0, 0, m_hWnd, (HMENU)AFX_IDW_PANE_FIRST,
      AfxGetInstanceHandle(), (LPVOID)&ccs)) == NULL)
关于

当我们创建一个子框架时,我们向“MDI客户端窗口”发送一个WM_MDICREATE消息,然后获得窗口的句柄

    winmdi.cpp
    BOOL CMDIChildWnd::Create(LPCTSTR lpszClassName,
 LPCTSTR lpszWindowName, DWORD dwStyle,
 const RECT& rect, CMDIFrameWnd* pParentWnd,
 CCreateContext* pContext)

{
//......
 // create the window through the MDICLIENT window
 AfxHookWindowCreate(this);
 HWND hWnd = (HWND)::SendMessage(pParentWnd->m_hWndMDIClient,
      WM_MDICREATE, 0, (LPARAM)&mcs);
关于WM_MDICREATE,我从Microsoft找到了这些信息。 *应用程序将WM_MDICREATE消息发送到多文档接口(MDI)客户端窗口以创建MDI子窗口。 如果消息成功,则返回值是新子窗口的句柄。 如果消息失败,则返回值为NULL*

我想,可能是Windows从AfxGetInstanceHandle()下载了WindowProc;但老实说,我真的不知道它是如何做到这一点的

AfxGetInstanceHandle 此函数允许您检索当前应用程序的实例句柄

请帮帮我。。。
非常感谢。

在MFC中没有特殊的窗口过程。所有窗口都有一个名为AfxWndProc的MFC内部窗口过程。此过程查看消息映射,最终将窗口消息分派给处理程序


在内部,您在window proc中找不到任何关于特殊MDI处理的内容。一切都在内部完成,谢谢您的帮助。当我们创建大型机窗口时,我们在WH_CBT hook中设置windowProc。==>\u AfxCbtFilterHook(…),您是对的,它是AfxWndProc。
code
BOOL CFrameWnd::Create(…){/…afxhookwinowcreate(this);HWND HWND=::AfxCtxCreateWindowEx(cs.dwExStyle,cs.lpszClass,cs.lpszName,cs.style,cs.x,cs.y,cs.cx,cs.cy,cs.hwndpress,cs.hMenu,cs.hInstance,cs.lpCreateParams);}
code
我想知道我们什么时候为ChildFrame设置WindowProc。我没有看到任何为该窗口注册类的代码。windows是否从实例句柄获取WindowProc?这些窗口是否共享一个类?::AfxCtxCreateWindowEx(,,,,,,,AfxGetInstanceHandle(),)对于所有MFC窗口,只有一个中心类和一个WIndowProc。钩子函数创建窗口并将句柄设置为用于确定关联CWnd对象的映射。