关于WM_CREATE消息 我的逻辑很乱

小弟才学MFC不久有个问题想问下高手在SDK风格的程序中总有一个逻辑顺序是注册窗口类-创建窗口-显示窗口-更新窗口-消息循环这些步骤但是用MFCAppWizard生成的代... 小弟才学MFC不久 有个问题想问下高手
在SDK风格的 程序中 总有一个逻辑顺序是 注册窗口类-创建窗口-显示窗口-更新窗口-消息循环 这些步骤
但是用MFC AppWizard生成的代码 就完全的打乱了这些逻辑结构 我发现每个应用程序都有Oncreate()函数来响应WM_CREATE消息 这个函数就是用来创造窗口的吗 请问注册窗口在什么地方完成的呢 我知道显示窗口 更新窗口和消息循环在CWinApp派生的TheApp中的Initstance()中完成的 所以我的逻辑有点乱
哪个高手能详细和通俗的指教我下 谢谢
展开
 我来答
安定且感人的福音
2008-10-04
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
不要被MFC干扰了,MFC封装了太多的东西,心里想着API的执行顺序就行了。
所有窗口都是在注册窗口类之后调用CreateWindowEx来创建的,创建成功之后(HWND有效但CreateWindowEx尚未返回)系统自动发送WM_CREATE消息,所以你的OnCreate将被执行,在这里窗口已经创建成功了,你可以安全地创建各种子窗口。
保晏然2Q
2008-10-04 · TA获得超过1053个赞
知道小有建树答主
回答量:422
采纳率:0%
帮助的人:520万
展开全部
注册窗口类也是在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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2008-10-04 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2403万
展开全部
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里的代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bati8888
2008-10-07 · TA获得超过3716个赞
知道大有可为答主
回答量:4669
采纳率:0%
帮助的人:2048万
展开全部
创造完窗口发送到消息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式