• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蝸牛的家
            男兒當自強
            posts - 48,  comments - 21,  trackbacks - 0


            windows默認的入口函數WinMain直接調用MFC函數AfxWinMain

            _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                LPTSTR lpCmdLine, 
            int nCmdShow)
            {
                
            // call shared/exported WinMain
                return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
            }
            int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                LPTSTR lpCmdLine, 
            int nCmdShow)
            {
                CWinThread
            * pThread = AfxGetThread();
                CWinApp
            * pApp = AfxGetApp();
                
            // 主要進行內部初始化和調用了AfxInitThread()
                if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
                
                
            // 相當于調用CWinApp的InitApplication(),與Document Template 和CDocManager相關初始化
                if (pApp != NULL && !pApp->InitApplication())
                
                    AfxInitThread()
                
            // 相當于調用CMyWinApp中的InitInstance()
                if (!pThread->InitInstance())
                
            {}
                
                    
            // 相當于調用CWinApp中的函數
                nReturnCode = pThread->Run();

                
            return nReturnCode;
            }


            BOOL CMYApp::InitInstance()
            {
                
            //對話框程序的初始化
            #ifdef _AFXDLL
                Enable3dControls();            
            // Call this when using MFC in a shared DLL
            #else
                Enable3dControlsStatic();    
            // Call this when linking to MFC statically
            #endif

                CMYDlg dlg;
                m_pMainWnd 
            = &dlg;
                
            int nResponse = dlg.DoModal(); //產生模態對話框
                
            if (nResponse == IDOK)
                
            {
               

                }

                
            else if (nResponse == IDCANCEL)
                
            {
                  

                }

                return FALSE; //不同之處,對話框初始化程序返回的是FALSE,這樣,RUN就不會被調用
            }

            int CDialog::DoModal()
            {
                
            // can be constructed with a resource template or InitModalIndirect
                ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
                    m_lpDialogTemplate 
            != NULL);

                
            // 載入需要的資源文件
                LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
                HGLOBAL hDialogTemplate 
            = m_hDialogTemplate;
                HINSTANCE hInst 
            = AfxGetResourceHandle();
                
            if (m_lpszTemplateName != NULL)
                
            {
                    hInst 
            = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
                    HRSRC hResource 
            = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
                    hDialogTemplate 
            = LoadResource(hInst, hResource);
                }

                
            if (hDialogTemplate != NULL)
                    lpDialogTemplate 
            = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

                
            // return -1 in case of failure to load the dialog template resource
                if (lpDialogTemplate == NULL)
                    
            return -1;

                
            // 在創建窗口前,隱藏父窗口 
                HWND hWndParent = PreModal();
                AfxUnhookWindowCreate();
                BOOL bEnableParent 
            = FALSE;
                
            if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
                
            {
                    ::EnableWindow(hWndParent, FALSE);
                    bEnableParent 
            = TRUE;
                }


                TRY
                
            {
                    
            //調用CreateDlgIndirect創建對話框 
                    AfxHookWindowCreate(this);
                    
            if (CreateDlgIndirect(lpDialogTemplate,
                                    CWnd::FromHandle(hWndParent), hInst))
                    
            {
                        
            if (m_nFlags & WF_CONTINUEMODAL)
                        
            {
                            
            //RunModalLoop中開始消息循環
                            DWORD dwFlags = MLF_SHOWONIDLE;
                            
            if (GetStyle() & DS_NOIDLEMSG)
                                dwFlags 
            |= MLF_NOIDLEMSG;
                            VERIFY(RunModalLoop(dwFlags) 
            == m_nModalResult);
                        }


                        
            // 在父窗口出現前,先隱藏窗口
                        if (m_hWnd != NULL)
                            SetWindowPos(NULL, 
            0000, SWP_HIDEWINDOW|
                                SWP_NOSIZE
            |SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
                    }

                }

                CATCH_ALL(e)
                
            {
                    DELETE_EXCEPTION(e);
                    m_nModalResult 
            = -1;
                }

                END_CATCH_ALL

                
            if (bEnableParent)
                    ::EnableWindow(hWndParent, TRUE);
                
            if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
                    ::SetActiveWindow(hWndParent);

                
            // 銷毀狂口
                DestroyWindow();
                PostModal();

                
            // 釋放資源
                if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
                    UnlockResource(hDialogTemplate);
                
            if (m_lpszTemplateName != NULL)
                    FreeResource(hDialogTemplate);

                
            return m_nModalResult;
            }


               // 文檔程序的初始化
            BOOL CMy4App::InitInstance()
            {
                CMultiDocTemplate
            * pDocTemplate;
                pDocTemplate 
            = new CMultiDocTemplate(
                    IDR_MYTYPE,
                    RUNTIME_CLASS(CMyDoc),
                    RUNTIME_CLASS(CChildFrame), 
            // custom MDI child frame
                    RUNTIME_CLASS(CMyView));
                AddDocTemplate(pDocTemplate);

                
            // create main MDI Frame window
                CMainFrame* pMainFrame = new CMainFrame;
                
            if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
                    
            return FALSE;
                m_pMainWnd 
            = pMainFrame;
                
                pMainFrame
            ->ShowWindow(m_nCmdShow);
                pMainFrame
            ->UpdateWindow();

                
            return TRUE;
            }
            一開始NEW了一個CFrameWnd對象,pMainFrame->LoadFrame()引發連鎖反映-CFrameWnd::Create()-CWnd::CreateEx()-::CreateWindowEx()觸發WM_CREATE其中調用宏AfxDeferRegisterClass注冊窗口類,默認的窗口類對應為下表
            CWnd CFameWnd CMDIFrameWnd CMDIChildWnd CView
            _afxWnd _afxWndFrameOrView _afxWndMDIFrame _afxWndFrameOrView _afxWndFrameOrView

            posted on 2008-08-31 01:03 黑色天使 閱讀(602) 評論(0)  編輯 收藏 引用 所屬分類: VC&MFC

            <2008年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            99久久国产综合精品网成人影院| 亚洲精品国产综合久久一线| 亚洲精品tv久久久久久久久久| 成人妇女免费播放久久久| 7777精品伊人久久久大香线蕉| 欧美日韩成人精品久久久免费看| 国产叼嘿久久精品久久| 久久精品国产影库免费看| 国产91色综合久久免费分享| 国内精品人妻无码久久久影院| 亚洲精品无码久久一线| 男女久久久国产一区二区三区| 无码日韩人妻精品久久蜜桃| 色88久久久久高潮综合影院 | 国产午夜精品久久久久九九电影| 精品久久久久久久久中文字幕| 亚洲精品无码久久久久AV麻豆| 欧美久久亚洲精品| 亚洲国产精品成人久久| 99精品久久久久久久婷婷| 99久久人人爽亚洲精品美女| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 亚洲狠狠久久综合一区77777| 亚洲国产成人久久综合一| 久久久精品视频免费观看| 久久久精品久久久久影院| 香蕉久久av一区二区三区| 久久综合综合久久97色| 亚洲国产婷婷香蕉久久久久久| 亚洲中文精品久久久久久不卡| 久久精品国产精品国产精品污| 亚洲а∨天堂久久精品| 无码久久精品国产亚洲Av影片| 999久久久国产精品| 无码日韩人妻精品久久蜜桃 | 国产精品久久久久久久人人看| 人妻无码中文久久久久专区| 激情久久久久久久久久| 亚洲成色WWW久久网站| 久久久WWW成人免费精品| 亚洲狠狠婷婷综合久久蜜芽|