• <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 黑色天使 閱讀(610) 評論(0)  編輯 收藏 引用 所屬分類: VC&MFC

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

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国内精品久久国产大陆| 久久人人超碰精品CAOPOREN| 精品人妻伦九区久久AAA片69| 久久人妻AV中文字幕| 色婷婷久久综合中文久久蜜桃av| 久久亚洲AV成人无码电影| 精品久久香蕉国产线看观看亚洲| 国产精品狼人久久久久影院| 久久精品无码一区二区WWW| 2021少妇久久久久久久久久| 中文字幕无码久久人妻| 久久99国产精品一区二区| 久久男人中文字幕资源站| 久久66热人妻偷产精品9| 久久久久久国产精品美女 | 中文字幕乱码久久午夜| 亚洲国产精品人久久| 亚洲精品无码专区久久久| 久久丝袜精品中文字幕| 国产成人精品久久一区二区三区| 日韩中文久久| 大美女久久久久久j久久| 性高湖久久久久久久久| 久久人妻少妇嫩草AV无码蜜桃| 99久久国语露脸精品国产| 77777亚洲午夜久久多喷| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲国产欧美国产综合久久| 久久精品夜色噜噜亚洲A∨| 日本久久久精品中文字幕| 996久久国产精品线观看| 亚洲国产精品一区二区久久hs| 久久伊人亚洲AV无码网站| 久久国产精品免费一区二区三区| 久久久久久免费一区二区三区| 亚洲国产精品久久电影欧美| 中文字幕热久久久久久久| 久久久无码精品亚洲日韩京东传媒 | 国产成人精品久久免费动漫| 日韩AV无码久久一区二区| 日韩精品久久久肉伦网站|