关于InitInstance() oninitDialog() 如果我要初始化对话框框架,应该在哪里初始化窗口,各在每个函数中初始化哪个部分?
我被搞糊涂了,我在看一个例子的时候,在对话框onintdialog中创建初始化对话框边框,如果在initinstance()中可以么初始化,如果不可以,initinstance初始化的是哪些部分?
我被搞糊涂了,我在看一个例子的时候,在对话框onintdialog中创建初始化对话框边框,如果在initinstance()中可以么初始化,如果不可以,initinstance初始化的是哪些部分?
// 例如,对于下面由AppWizard创建的代码,选择了单文档界面(SDI)选项。
// 你可以在AppWizard创建的代码中加入其它的每个实例都执行的初始化代码。BOOL CMyApp::InitInstance()
{
// 标准的初始化工作
// 如果你没有使用这些特性,并且希望减小最终可执行程序的大小,
// 你应当从下面的初始化例程中移去不必要的代码。 SetDialogBkColor(); // 将对话框的背景色设为灰色。
LoadStdProfileSettings(); // 载入标准的INI文件选项(包括MRU) // 注册应用程序的文档模板。文档模板
// 被用作文档、框架窗口和视图之间的联系。 CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame), // SDI的主框架窗口
RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate); // create a new (empty) document
OnFileNew(); if (m_lpCmdLine[0] != '\0')
{
// 创建一个新(空的)文档
} return TRUE;
}
BOOL CTestApp::InitInstance()
{
CTestDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
} // Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}上面是一个典型的对话框程序的InitInstance,可以看出App类就是负责整个流程的类,由winmain等入口函数来调用的
在里面做什么就是你要做的事了。oninitDialog则是对话框类的初始化函数,一般用来初始化对话框所需的资源、风格等等建议多读读《深入浅出MFC》,读懂后这些问题自然迎刃而解
InitInstance(),oninitDialog(),OnInitialUpdate(),OnCreate()...类似的初始化函数很多,不过每个的功能和侧重点都不一样之所以有这么多函数,是为了方便在程序运行的不同时候,可以修改参数,然后产生各种风格的程序InitInstance() 是程序加载后,在分配了 Instance句柄,进程ID,主线程等一些资源后可以初始化的操作,比如判断本程序是否已经打开了一个窗口,现在是第二个窗口,或者初始化程序的参数,比如加载Ini文件,或者读取注册表信息等或者加载资源里的指定ID的 ResouceOnInitDialog() 是创建好了对话框,上面的控件什么的都放好了,可以用了,接下来就等展示出来的时候,就好像大厦建好了,也给了房间的钥匙给你,这时候你会想先装修装修再住进去