一、 問題闡述:在基於控制檯的應用程序中並不支持MFC庫,若是使基於控制檯的應用程序可以使用MFC類庫呢?
二、 實現技巧:在控制檯應用程序中經過include來引入MFC庫,由於控制檯應用程序默認是單線程的,MFC是多線程的,因此在【Project】的【Settings】對話框的「C/C++」下的「Category」下拉列表框中選擇「Code Generation」,在「Use run-time library」下拉列表框中選擇「Debug Multithread」。程序員
如圖所示:編程
vs2010:在Project ->Property Pages -> Configuration Properties -> General -> Project Defaults ->Use of MFC, 選擇Use MFC in a Shared DLL.
多線程
添加頭文件和庫文件路徑到項目的VC++配置:框架
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include函數
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\libthis
建議先學Windows SDK編程,熟悉以後再看MFC,要不會很頭暈。spa
工程類型:Win32 Application (Win32 Project)線程
附加選項:Use MFC as a shared dll(按Alt + F7設置)code
Hello.h對象
#pragma once #include <afxwin.h> class CHelloApp : public CWinApp{ public: virtual BOOL InitInstance();};
Hello.cpp
#include "Hello.h" #include "MainFrame.h" CHelloApp theApp; BOOL CHelloApp::InitInstance(){ CMainFrame *pFrame = new CMainFrame; pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); m_pMainWnd = pFrame; //將指定的CMainFrame框架與應用程序對象創建關聯 return TRUE;}
MainFrame.h
#pragma once #include <afxwin.h> class CMainFrame : public CFrameWnd{ public: CMainFrame(); protected: afx_msg void OnPaint(); DECLARE_MESSAGE_MAP()};
MainFrame.cpp
#include "MainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_PAINT() END_MESSAGE_MAP() CMainFrame::CMainFrame(){ Create(NULL, _T("Hello"));} void CMainFrame::OnPaint(){ CPaintDC dc(this); dc.TextOut(0, 0, _T("Hello, MFC"));}
BOOL ShowWindow(int nCmdShow);
Return Value
若是窗口原來可見,則返回非零值;若是CWnd原來是隱藏的,則返回0
Parameters nCmdShow
指定了CWnd應如何被顯示。它必須是下列值之一:
SW_HIDE 隱藏窗口並將活動狀態傳遞給其它窗口。
SW_MINIMIZE 最小化窗口並激活系統列表中的頂層窗口。
SW_RESTORE 激活並顯示窗口。若是窗口是最小化或最大化的,Windows恢復其原來的大小和位置。
SW_SHOW 激活窗口並以其當前的大小和位置顯示。
SW_SHOWMAXIMIZED 激活窗口並顯示爲最大化窗口。
SW_SHOWMINIMIZED 激活窗口並顯示爲圖標。
SW_SHOWMINNOACTIVE 將窗口顯示爲圖標。當前活動的窗口將保持活動狀態。
SW_SHOWNA 按照當前狀態顯示窗口。當前活動的窗口將保持活動狀態。
SW_SHOWNOACTIVATE 按窗口最近的大小和位置顯示。當前活動的窗口將保持活動狀態。
SW_SHOWNORMAL 激活並顯示窗口。若是窗口是最小化或最大化的,則Windows恢復它原來的大小和位置。
這個函數設置窗口的可視狀態。
做爲一個最小的MFC應用程序,你須要在代碼中初始化一個CWinApp對象,並重載其CWinApp::InitInstance()方法。習慣了C/C++編程和SDK編程的人可能會以爲奇怪,程序的入口函數main()或WinMain()在哪裏呢?
其實,在MFC應用程序中,MFC維護着一個WinMain()函數,只是它被隱藏了,程序員看不見。經過你寫的MFC代碼,你已經創建了一個 CWinApp對象,這個全局對象的初始化工做在WinMain()被調用以前就已經完成。而MFC的WinMain(),這段代碼在VC98目錄下的 MFC\SRC\WinMain.cpp中。
總之,MFC程序先創建應用程序對象,而後將內部準備好的WinMain()與之鏈接,執行一系列動做,從而使程序正常運行。