【发布时间】:2013-11-20 08:47:08
【问题描述】:
伙计们, 我是新手,刚开始学习MFC。 我有一个关于 MDI 应用程序框架的问题。 在 MFC 中。 我从代码中了解到,当我新建一个文件时,MDI 客户端窗口总是创建一个 ChildFrame。 但是我在 MFC 中找不到“MDI 客户端窗口”的 WindowProc 是什么。 实际上,“MDI Client Window”是在我们创建主框架之后创建的。
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)
在创建 ChildFrame 时,我们向“MDI Client Window”发送 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 的 WindowProc 来自 AfxGetInstanceHandle();但老实说,我真的不知道它是怎么做到的。
AfxGetInstanceHandle http://msdn.microsoft.com/en-us/library/vstudio/36z3tfsb.aspx 此函数允许您检索当前应用程序的实例句柄。
请帮帮我... 真的非常感谢。
【问题讨论】:
标签: windows visual-c++ mfc