1. 程式人生 > >mfc學習筆記之如何自己動手實現最簡單的mfc程式

mfc學習筆記之如何自己動手實現最簡單的mfc程式

    在剛開始學完c++基本語法之後,發現要用c++寫一個視窗應用程式必須與作業系統結合起來,於是自然而然的選擇了從mfc入手,但是通過新建的mfc程式發現太過於臃腫,不知道如何下手,因此從網上查閱資料發現可以自己動手使用mfc庫實現一個最簡單的mfc程式。

  1. 由於mfc只是對win32API進行了大量的封裝,因此可以通過修改win32專案來建立mfc工程


2. 工程名起名為FirstMFC,然後下一步選擇windows應用程式,然後點選完成

3. 建立完成後發現主cpp檔案已經為我們自動生成了win32建立視窗的程式碼,因為要用mfc實現,所以只需保留標頭檔案,刪掉其餘的程式碼

FirstMFC.cpp內只剩下如下程式碼

// FirstMFC.cpp : 定義應用程式的入口點。
//

#include "stdafx.h"
#include "FirstMFC.h"

4.由於我們要使用MFC庫,因此需要在stdafx標頭檔案裡包含afxwin.h  而afxwin.h內已經包含windows.h,因此可以直接將stdafx.h內的#include <windows.h>替換成<afxwin.h>。

5. 右鍵點選工程名,選擇屬性,在彈出對話方塊中MFC使用這一項選擇在靜態庫中使用MFC,然後選擇應用確定。

6. 因為mfc程式需要至少包含一個應用程式類和視窗框架類,因此我們需要在FirstMFC.cpp定義一個CFrameWnd和CWinApp的子類,併為CWinApp的子類建立一個全域性的實

    例化物件,並在CwinApp的子類中過載InitInstance函式建立視窗,程式碼如下:

class CMyFrameWnd : public CFrameWnd
{

};

class CMyWinApp : public CWinApp
{
	virtual BOOL InitInstance();
};

CMyWinApp myApp;


InitInstance函式中建立視窗程式碼如下<pre name="code" class="cpp">BOOL CMyWinApp::InitInstance()
{
	CMyFrameWnd * pFrame = new CMyFrameWnd();
	pFrame->Create(NULL,"FirstMFC");
	m_pMainWnd = pFrame;
	pFrame->ShowWindow(SW_SHOW);
	pFrame->UpdateWindow();
	return TRUE;
}
從程式碼可以看出,InitInstance主要完成的工作就是視窗的建立過程,查閱csdn可以發現

CFrameWnd::Create

BOOL Create( LPCTSTR lpszClassName,

LPCTSTR lpszWindowName,

DWORD dwStyle = WS_OVERLAPPEDWINDOW,

const RECT& rect = rectDefault,

CWnd* pParentWnd = NULL,

LPCTSTR lpszMenuName = NULL,

DWORD dwExStyle = 0,

CCreateContext* pContext = NULL );

create函式的第一個引數為類名,可以置空,在建立的過程中mfc會自己重新為它賦值,第二個引數為要建立的視窗的名稱,後面的引數固定引數,無須賦值





至此,第一個MFC程式建立完畢,只定義了兩個類,重寫了一個類成員函式,不像新建一個MFC工程那樣生成一大堆的冗餘程式碼,便於我們分析mfc程式的整個執行流程。

相關推薦

mfc學習筆記如何自己動手實現簡單mfc程式

    在剛開始學完c++基本語法之後,發現要用c++寫一個視窗應用程式必須與作業系統結合起來,於是自然而然的選擇了從mfc入手,但是通過新建的mfc程式發現太過於臃腫,不知道如何下手,因此從網上查閱資料發現可以自己動手使用mfc庫實現一個最簡單的mfc程式。   1. 由

框架學習自己動手實現Struts框架

前言: MVC模式回顧:Model(模型) View(檢視) Controller(控制器) 框架無非目的是為了簡化程式碼,快捷開發,萬變不離其宗。Structs就是對其中的Controller層進行優化,在JavaWeb中

ES學習筆記-AvgAggregation的實現過程分析

我們需要檢視資料的統計量時,均值是最重要的特徵之一。 對於海量資料,這類簡單的聚合ES可以做到秒級別返回。聚合是ES的特色功能。 那麼ES是如何實現這一功能的呢? 我們知道,ES的資料儲存在各個節點中, 所以ES的實現AvgAggregation時基本思路就是先統計各個節點,然後彙總。 先了解ES是

MFC學習筆記XML 檔案操作類

可擴充套件標記語言XML(Extend Mark Language)是一種描述資料和資料結構的語言,XML資料可以儲存在任何可以儲存文字的文件中。HTML用來描述外觀,而XML從一開始就被設計為表示原始資訊而完全忽略資料呈現方式。XML之所以功能強大,是因為計算機行業已經把X

3、《SSO CAS單點系列》 自己動手實現一個屬於自己的SSO認證伺服器!

上篇《實現一個SSO認證伺服器是這樣的》中,我們詳細講述了實現SSO的基本思路,本篇我們按照這個思路,親自動手實現一個輕量級的SSO認證中心。除了認證中心,我們還要改造系統應用的登入登出部分,使之與認證中心互動,共同完成SSO。因此我們的實現分成兩大部分,一個是SSO Ser

MFC學習筆記多對話方塊中使用定時器

MFC菜鳥第一次發貼,請各位高人指教:我需要做一個基於對話方塊的程式,主對話方塊TimerTryDlg上就兩個按鈕,確定鈕按下後執行訊息處理OnFirstOK(),先初始化定時器,再開啟有模式對話方塊TestDlg,定時器時間到了執行OnTimer-在子對話方塊上的一個靜態控制元件上畫點,但OnTimer在

《Pro Spring》學習筆記Spring+ActiveMQ實現Queue通訊(點對點)

spring配置檔案: <?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="h

android學習筆記利用AsyncHttpClient實現登入及cookie使用

首先感謝大神在自定義及使用AsyncHttpClent上的支援,詳見 http://blog.csdn.net/jdsjlzx/article/details/44700965 本文主要記錄一下我的android練習專案開發經過,主要提供一個思路,方便日後用到的時候參考。

SpringBoot學習筆記CXF整合(實現使用者驗證)

Springboot整合CXF 說起web service最近幾年restful大行其道,大有取代傳統soap web service的趨勢,但是一些特有或相對老舊的系統依然使用了傳統的soap web service,例如銀行、航空公司的機票查詢介面等。目前就遇到了這

Tensorflow 學習筆記使用LSTM實現MNIST資料集

LSTM實現MNIST手寫集識別 這幾天剛好看了RNN之後瞭解了LSTM(原理可以去參考這個)。雖然LSTM主要用於處理自然語言、語音、機器人翻譯等領域,但圖片也可以看做一個有序列的資料。所以用LSTM

自己動手實現一個簡單的JSON解析器

pair bool 優點 輕量 結束 pan isdigit 復雜 false 1. 背景 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。相對於另一種數據交換格式 XML,JSON 有著諸多優點。比如易讀性更好,占用空間更少等

自己動手實現一個簡單的Mybatis(初級版本1.0)

手寫Mybatis-v1.0 原始碼連結(包括v1.0與v2.0): https://github.com/staticLin/customMyBatis.git 從上一個文章 ---Mybatis概述中瞭解到了Mybatis的主要架構與底層原理流程,結尾給出了一個巨集觀流程圖,可

ES學習筆記-集成測試的簡單學習

spro exc except arc urn ast case ger 啟用 集成測試在es源碼中的用法比較簡單。我選擇的切入口是delete-by-query插件。 將es插件的源碼導入intellij後,直接運行類DeleteByQueryRestIT, 就會運行所有

自己動手實現一個簡單c編譯器

這學期的編譯課程設計需要做一個類c編譯器,準確的說是完善上學期做的大實驗。 上學期的實驗中,使用antlr完成的編譯器識別的語法很有限,基本上是個計算器的語法,於是這次決定弄語法一個更加完整。 語法支援: 宣告,賦值,函式,if-else,while,for。 首先是詞法分

32位組合語言學習筆記(21)--用NASM實現Hello World小程式

前面20篇彙編學習筆記主要是學習《深入理解計算機系統》過程中所記錄的筆記,接下來打算學一下另外一本書《Assembly Language step by step programming with linux》。首先需要安裝NASM彙編器,例如:rpm –ivh nasm-2

【SoftKeyboard研究系列】自己動手簡單的SoftKeyboard

引言 研究SoftKeyboard也有一段時間了,鑑於目前關於輸入法的教程繁多,但又不能解決本人所有的困惑,故開始自己研究。經過一段時間的摸索,逐漸理清了整個框架結構。下面就從本人寫的一個最簡單的SimpleSoftKeyboard為例,來介紹怎麼實現一個自定義的Sof

JS——純js實現簡單的檔案上傳(後臺使用MultipartFile)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>XMLHttpRequest上傳檔案</title> <

java學習筆記使用MyEclipse編寫一個簡單的登陸界(一)

使用MyEclipse編寫一個簡單的網頁。 要求:有一個簡單的登陸介面。可以驗證使用者名稱是否為admin,密碼為123。當結果正確時,跳往另外一個介面。 1、首先新建一個web project。 2、在webroot目錄下新建一個jsp檔案。 程式碼如下: <%@

自己動手實現一個簡單的 IOC容器

控制反轉,即Inversion of Control(IoC),是面向物件中的一種設計原則,可以用有效降低架構程式碼的耦合度,從物件呼叫者角度又叫做依賴注入,即Dependency Injection(DI),通過控制反轉,物件在被建立的時候,由一個調控系統內所有物件的容器,將其所依賴的物件的引用傳遞給它,也

算法(第四版)學習筆記java實現可以動態調整數組大小的棧

length pub move sta gen font -c @override lifo 下壓(LIFO)棧:可以動態調整數組大小的實現 import java.util.Iterator; public class ResizingArrayStack&l