讓控制檯應用程序支持MFC類庫

一、 問題闡述:在基於控制檯的應用程序中並不支持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

最簡單的MFC程序:基於MFC庫構建(不使用MFC AppWizard)

工程類型: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()與之鏈接,執行一系列動做,從而使程序正常運行。

相關文章
相關標籤/搜索