关于WM_CREATE消息 我的逻辑很乱
小弟才学MFC不久有个问题想问下高手在SDK风格的程序中总有一个逻辑顺序是注册窗口类-创建窗口-显示窗口-更新窗口-消息循环这些步骤但是用MFCAppWizard生成的代...
小弟才学MFC不久 有个问题想问下高手
在SDK风格的 程序中 总有一个逻辑顺序是 注册窗口类-创建窗口-显示窗口-更新窗口-消息循环 这些步骤
但是用MFC AppWizard生成的代码 就完全的打乱了这些逻辑结构 我发现每个应用程序都有Oncreate()函数来响应WM_CREATE消息 这个函数就是用来创造窗口的吗 请问注册窗口在什么地方完成的呢 我知道显示窗口 更新窗口和消息循环在CWinApp派生的TheApp中的Initstance()中完成的 所以我的逻辑有点乱
哪个高手能详细和通俗的指教我下 谢谢 展开
在SDK风格的 程序中 总有一个逻辑顺序是 注册窗口类-创建窗口-显示窗口-更新窗口-消息循环 这些步骤
但是用MFC AppWizard生成的代码 就完全的打乱了这些逻辑结构 我发现每个应用程序都有Oncreate()函数来响应WM_CREATE消息 这个函数就是用来创造窗口的吗 请问注册窗口在什么地方完成的呢 我知道显示窗口 更新窗口和消息循环在CWinApp派生的TheApp中的Initstance()中完成的 所以我的逻辑有点乱
哪个高手能详细和通俗的指教我下 谢谢 展开
4个回答
展开全部
注册窗口类也是在TheApp中的Initstance()中进行的,例如SDI中注册窗口类代码:
BOOL CSDI_CView_TestApp::InitInstance()
{
.........................
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
//开始注册窗口类
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDI_CView_TestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSDI_CView_TestView));
AddDocTemplate(pDocTemplate);
//注册窗口类结束
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BOOL CSDI_CView_TestApp::InitInstance()
{
.........................
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
//开始注册窗口类
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDI_CView_TestDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSDI_CView_TestView));
AddDocTemplate(pDocTemplate);
//注册窗口类结束
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BOOL CWnd::PreCreateWindow(CREATESTRUCT& cs)
{
if (cs.lpszClass == NULL)
{
// make sure the default window class is registered
VERIFY(AfxDeferRegisterClass(AFX_WND_REG));
// no WNDCLASS provided - use child window default
ASSERT(cs.style & WS_CHILD);
cs.lpszClass = _afxWnd;
}
return TRUE;
}
注册窗口类应该是在这个函数中完成的,就是说,注册窗口是在窗口类中完成的。
ps:这段是wincore.cpp里的代码
{
if (cs.lpszClass == NULL)
{
// make sure the default window class is registered
VERIFY(AfxDeferRegisterClass(AFX_WND_REG));
// no WNDCLASS provided - use child window default
ASSERT(cs.style & WS_CHILD);
cs.lpszClass = _afxWnd;
}
return TRUE;
}
注册窗口类应该是在这个函数中完成的,就是说,注册窗口是在窗口类中完成的。
ps:这段是wincore.cpp里的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
创造完窗口发送到消息。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询