关于InitInstance() oninitDialog() 如果我要初始化对话框框架,应该在哪里初始化窗口,各在每个函数中初始化哪个部分?
我被搞糊涂了,我在看一个例子的时候,在对话框onintdialog中创建初始化对话框边框,如果在initinstance()中可以么初始化,如果不可以,initinstance初始化的是哪些部分?

解决方案 »

  1.   

    initinstance  初始化创建窗口、资源等onintdialog 对话框创建后,进行对话框上的控件、内容、标题等进行初始化
      

  2.   

    CWinApp::InitInstancevirtual BOOL InitInstance( );返回值如果初始化成功,则返回非零值;否则返回0。注释Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。通常,你重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。有关重载这个成员函数的更多信息参见“Visual C++ 程序员指南”中的“ CWinApp:应用程序类”。示例// AppWizard 根据你选择的选项实现重载的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;
    }
      

  3.   

    initinstance 中还可处理 :commandLine和保证程序只有一个实例.
      

  4.   


    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》,读懂后这些问题自然迎刃而解
      

  5.   


    InitInstance(),oninitDialog(),OnInitialUpdate(),OnCreate()...类似的初始化函数很多,不过每个的功能和侧重点都不一样之所以有这么多函数,是为了方便在程序运行的不同时候,可以修改参数,然后产生各种风格的程序InitInstance() 是程序加载后,在分配了 Instance句柄,进程ID,主线程等一些资源后可以初始化的操作,比如判断本程序是否已经打开了一个窗口,现在是第二个窗口,或者初始化程序的参数,比如加载Ini文件,或者读取注册表信息等或者加载资源里的指定ID的 ResouceOnInitDialog() 是创建好了对话框,上面的控件什么的都放好了,可以用了,接下来就等展示出来的时候,就好像大厦建好了,也给了房间的钥匙给你,这时候你会想先装修装修再住进去