亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 03.2.2 mfc框架窗口(1).txt

?? 網上第一本以TXT格式的VC++深入詳解孫鑫的書.全文全以TXT格式,并每一章節都分了目錄,清晰易讀
?? TXT
字號:
3.2.2  MFC框架窗口
1.設計和注冊窗口
有了WinMain函數,根據創建Win32應用程序的步驟,接下來應該是設計窗口類和注冊窗口類了。MFC已經為我們預定義了一些默認的標準窗口類,只需要選擇所需的窗口類,然后注冊就可以了。窗口類的注冊是由AfxEndDeferRegisterClass函數完成的,該函數的定義位于WINCORE.CPP文件中。其定義代碼較長,由于篇幅所限,在這里僅列出部分代碼,如例3-10所示。

例3-10

BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)

{

……

    // common initialization

    WNDCLASS wndcls;

    memset(&wndcls, 0, sizeof(WNDCLASS));   // start with NULL defaults

①  wndcls.lpfnWndProc = DefWindowProc;

    wndcls.hInstance = AfxGetInstanceHandle();

    wndcls.hCursor = afxData.hcurArrow;

……

    // work to register classes as specified by fToRegister, populate fRegisteredClasses as we go

    if (fToRegister & AFX_WND_REG)

    {

        // Child windows - no brush, no icon, safest default class styles

        wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

        wndcls.lpszClassName = _afxWnd;

        if (AfxRegisterClass(&wndcls))

            fRegisteredClasses |= AFX_WND_REG;

    }

    if (fToRegister & AFX_WNDOLECONTROL_REG)

    {

        // OLE Control windows - use parent DC for speed

        wndcls.style |= CS_PARENTDC | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

        wndcls.lpszClassName = _afxWndOleControl;

        if (AfxRegisterClass(&wndcls))

            fRegisteredClasses |= AFX_WNDOLECONTROL_REG;

    }

……

    if (fToRegister & AFX_WNDMDIFRAME_REG)

    {

        // MDI Frame window (also used for splitter window)

        wndcls.style = CS_DBLCLKS;

        wndcls.hbrBackground = NULL;

        if (_AfxRegisterWithIcon(&wndcls, _afxWndMDIFrame, AFX_IDI_STD_ MDIFRAME))

            fRegisteredClasses |= AFX_WNDMDIFRAME_REG;

    }

    if (fToRegister & AFX_WNDFRAMEORVIEW_REG)

    {

        // SDI Frame or MDI Child windows or views - normal colors

        wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

        wndcls.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);

        if (_AfxRegisterWithIcon(&wndcls, _afxWndFrameOrView, AFX_IDI_STD _FRAME))

            fRegisteredClasses |= AFX_WNDFRAMEORVIEW_REG;

    }

……

}

從例3-10所示代碼可知,AfxEndDeferRegisterClass函數首先判斷窗口類的類型,然后賦予其相應的類名(wndcls.lpszClassName變量),這些類名都是MFC預定義的。之后就調用AfxRegisterClass函數注冊窗口類,后者的定義也位于WINCORE.CPP文件中,代碼如例3-11所示。

例3-11

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass)

{

    WNDCLASS wndcls;

    if (GetClassInfo(lpWndClass->hInstance, lpWndClass->lpszClassName,

        &wndcls))

    {

        // class already registered

        return TRUE;

    }

 

    if (!::RegisterClass(lpWndClass))

    {

        TRACE1("Can't register window class named %s\n",

            lpWndClass->lpszClassName);

        return FALSE;

    }

 

    if (afxContextIsDLL)

    {

        AfxLockGlobals(CRIT_REGCLASSLIST);

        TRY

        {

            // class registered successfully, add to registered list

            AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

            LPTSTR lpszUnregisterList = pModuleState->m_szUnregisterList;

            // the buffer is of fixed size -- ensure that it does not overflow

            ASSERT(lstrlen(lpszUnregisterList) + 1 +

                lstrlen(lpWndClass->lpszClassName) + 1 <

                _countof(pModuleState->m_szUnregisterList));

            // append classname + newline to m_szUnregisterList

            lstrcat(lpszUnregisterList, lpWndClass->lpszClassName);

            TCHAR szTemp[2];

            szTemp[0] = '\n';

            szTemp[1] = '\0';

            lstrcat(lpszUnregisterList, szTemp);

        }

        CATCH_ALL(e)

        {

            AfxUnlockGlobals(CRIT_REGCLASSLIST);

            THROW_LAST();

            // Note: DELETE_EXCEPTION not required.

        }

        END_CATCH_ALL

        AfxUnlockGlobals(CRIT_REGCLASSLIST);

    }

 

    return TRUE;

}

從例3-11所示代碼可知,AfxRegisterClass函數首先獲得窗口類信息。如果該窗口類已經注冊,則直接返回一個真值;如果尚未注冊,就調用RegisterClass函數注冊該窗口類。讀者可以看出這個注冊窗口類函數與第2章介紹的Win32 SDK編程中所使用的函數是一樣的。

小技巧:如果在當前工程文件中查找某個函數或字符串,可以利用工具欄上的“Find in Files”工具按鈕或Edit菜單下的Find in Files命令;如果在當前文件中查找某個函數或字符串,可以使用Ctrl+F快捷鍵或Edit菜單下的Find命令。

我們創建的這個MFC應用程序Test,實際上有兩個窗口。其中一個是CMainFrame類的對象所代表的應用程序框架窗口。該類有一個PreCreateWindow函數,這是在窗口產生之前被調用的。該函數的默認實現代碼如例3-12所示。

例3-12

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

    if( !CFrameWnd::PreCreateWindow(cs) )

        return FALSE;

    // TODO: Modify the Window class or styles here by modifying

    //  the CREATESTRUCT cs

 

    return TRUE;

}

從其代碼可知,該函數首先調用CFrameWnd的PreCreateWindow函數。后者的定義位于源文件WINFRM.CPP中,代碼如例3-13所示。

例3-13

BOOL CFrameWnd::PreCreateWindow(CREATESTRUCT& cs)

{

    if (cs.lpszClass == NULL)

    {

        VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG));

        cs.lpszClass = _afxWndFrameOrView;  // COLOR_WINDOW background

    }

 

    if ((cs.style & FWS_ADDTOTITLE) && afxData.bWin4)

        cs.style |= FWS_PREFIXTITLE;

 

    if (afxData.bWin4)

        cs.dwExStyle |= WS_EX_CLIENTEDGE;

 

    return TRUE;

}

我們發現該函數中調用了AfxDeferRegisterClass函數,讀者可以在AFXIMPL.H文件中找到后者的定義,定義代碼如下:

#define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)

由其定義代碼可以發現,AfxDeferRegisterClass實際上是一個宏,真正指向的是AfxEndDefer-RegisterClass函數。根據前面介紹的內容,我們知道這里完成的功能就是注冊窗口類。

在CMainFrame類的PreCreateWindow函數處設置一個斷點,調試運行Test程序,將會發現程序在調用theApp全局對象和WinMain函數之后,到達此函數處。由此,我們知道MFC程序執行的脈絡也是在WinMain函數之后,窗口產生之前注冊窗口類的。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
jiyouzz国产精品久久| 欧美xfplay| 日本高清成人免费播放| av一二三不卡影片| 不卡电影一区二区三区| av动漫一区二区| 91成人网在线| 欧美日本韩国一区二区三区视频| 精品视频一区三区九区| 欧美精品乱码久久久久久按摩| 正在播放亚洲一区| 欧美α欧美αv大片| 久久久美女毛片| 中文字幕一区二区三区在线播放 | av电影在线观看完整版一区二区| 成人免费毛片高清视频| 99r国产精品| 欧美日韩免费电影| 欧美zozozo| 中文字幕在线一区免费| 亚洲精品老司机| 蜜臀91精品一区二区三区 | 91精品免费观看| 欧美一区二区三区视频在线观看| 欧美成人三级电影在线| 久久久www成人免费毛片麻豆 | 久久久欧美精品sm网站| 国产欧美精品日韩区二区麻豆天美| 国产三级久久久| 亚洲色图制服诱惑| 日本vs亚洲vs韩国一区三区二区 | 亚洲电影视频在线| 久久国内精品自在自线400部| 国产精品一区二区三区乱码| a级高清视频欧美日韩| 欧美精品乱人伦久久久久久| 久久一夜天堂av一区二区三区| 亚洲色图制服诱惑| 全国精品久久少妇| 成人一级片网址| 在线视频你懂得一区| 日韩精品一区二区在线| 国产精品美日韩| 日本不卡高清视频| 99九九99九九九视频精品| 欧美一级淫片007| 国产精品国模大尺度视频| 亚洲高清免费观看高清完整版在线观看| 美女一区二区三区在线观看| 91在线播放网址| 中文字幕日韩一区二区| 日本美女一区二区三区视频| 成人av网站免费观看| 欧美一区二区三区播放老司机| 国产精品久久一级| 青青草成人在线观看| 99久久99久久综合| 精品久久99ma| 亚洲资源在线观看| 国产一区二区女| 欧美一区二区免费视频| 一区二区视频免费在线观看| 国产在线不卡视频| 91精品国产欧美一区二区成人 | 国精产品一区一区三区mba视频| 色播五月激情综合网| 国产亚洲成aⅴ人片在线观看| 亚洲第一电影网| 色噜噜狠狠成人网p站| 国产视频一区不卡| 老司机精品视频在线| 欧美一a一片一级一片| 国产精品夫妻自拍| 国产自产v一区二区三区c| 欧美精品丝袜中出| 夜夜亚洲天天久久| 91看片淫黄大片一级| 久久久久久影视| 另类小说图片综合网| 欧美日韩精品一区二区三区| 亚洲美女屁股眼交| 91视频你懂的| 国产精品乱人伦中文| 国产一区91精品张津瑜| 欧美电影免费观看高清完整版在线 | 成年人午夜久久久| 久久精品综合网| 久久99精品久久只有精品| 欧美日本韩国一区二区三区视频 | 亚洲免费av在线| 97久久超碰国产精品电影| 国产日产欧美精品一区二区三区| 美脚の诱脚舐め脚责91| 欧美一区二区性放荡片| 蜜芽一区二区三区| 日韩欧美国产综合一区| 久久精品理论片| 精品精品国产高清一毛片一天堂| 久久国产精品区| 精品人在线二区三区| 美国毛片一区二区三区| 日韩欧美色综合网站| 美女视频黄久久| 精品国产欧美一区二区| 国产美女视频一区| 久久精品免视看| 粉嫩绯色av一区二区在线观看 | 从欧美一区二区三区| 欧美日韩国产首页| 色综合色综合色综合色综合色综合 | 欧美α欧美αv大片| 毛片av中文字幕一区二区| 日韩精品专区在线影院重磅| 美女高潮久久久| 久久久久久**毛片大全| 顶级嫩模精品视频在线看| 国产精品污www在线观看| 成人黄色大片在线观看| 亚洲激情自拍偷拍| 精品视频一区三区九区| 日韩av中文字幕一区二区| 精品国产一区二区亚洲人成毛片 | 日韩亚洲欧美综合| 国产一区在线视频| 国产精品久久久一本精品| 99国产欧美另类久久久精品 | 成人av电影免费在线播放| 亚洲视频狠狠干| 欧美日韩亚洲综合| 经典三级视频一区| 国产精品不卡一区二区三区| 欧美色网站导航| 日本美女一区二区三区| 国产人妖乱国产精品人妖| aaa亚洲精品一二三区| 亚洲一区二区美女| 欧美大胆人体bbbb| 懂色av一区二区三区免费观看 | 久久99精品国产.久久久久| 久久久电影一区二区三区| 色哟哟一区二区在线观看| 天堂av在线一区| 国产亚洲1区2区3区| 日本精品一区二区三区高清| 日韩av不卡在线观看| 欧美国产在线观看| 欧美午夜在线一二页| 国产一区二区三区最好精华液| 国产精品伦理在线| 欧美精品99久久久**| 国产成人在线网站| 亚洲国产精品一区二区www在线| 亚洲精品一区二区精华| 91免费版pro下载短视频| 久久精品国产亚洲高清剧情介绍| 国产精品亲子伦对白| 欧美喷水一区二区| 成人黄色av电影| 久久不见久久见中文字幕免费| 欧美激情一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲私人黄色宅男| 欧美一区2区视频在线观看| 97精品电影院| 卡一卡二国产精品 | 午夜亚洲国产au精品一区二区| 亚洲精品在线电影| 欧美日韩高清在线| 成人a免费在线看| 97精品国产露脸对白| 久久69国产一区二区蜜臀| 亚洲猫色日本管| 国产日本欧洲亚洲| 日韩欧美一二区| 欧美日韩一卡二卡| 波多野结衣欧美| 国产一区二区在线观看视频| 亚洲国产aⅴ成人精品无吗| 亚洲欧洲成人自拍| 久久久久久电影| 精品黑人一区二区三区久久| 欧美日韩高清在线| 欧美优质美女网站| 一本色道亚洲精品aⅴ| 国产福利91精品| 国产一区三区三区| 美女视频第一区二区三区免费观看网站| 一区二区三区高清不卡| 综合久久给合久久狠狠狠97色 | 天使萌一区二区三区免费观看| 亚洲欧美二区三区| 亚洲国产精品av| 久久久久国产精品人| 亚洲精品一区二区在线观看| 欧美一区二区人人喊爽| 欧美浪妇xxxx高跟鞋交| 欧美天天综合网| 欧美视频在线观看一区二区| 色综合激情五月| 91精品福利在线|