Windows程式設計2 MFC

2021-07-10 21:13:05 字數 4017 閱讀 3058

編譯環境vs2010

在文章開始前,我有個疑惑,我新建了個控制台工程,並新建檔案建立標頭檔案和類

globalvariate.h

class ctest

;

globalvariate.cpp

#include "stdafx.h"

#include "globalvariatetest.h"

ctest::ctest()

ctest::~ctest()

ctest p;

test.cpp,主函式

// test.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

int _tmain(int argc, _tchar* argv)

執行時,先進入全域性變數

ctest p;
再進入main 函式;

這可以理解,但是當我重新在工程中建立個test2.cpp檔案時,也寫了乙個全域性變數,並加入斷點,但是執行是並不進入這個斷點,這顯然是對全域性變數或是編譯原理等知識點理解不夠透徹,先把問題放這裡。。。。。。。。。

進入主題:

但在整個程式中始終找不到這個入口??

找到入口:

_twinmain(hinstance hinstance, hinstance hprevinstance,

_in_ lptstr lpcmdline, int ncmdshow)

#pragma warning(suppress: 4985)

winmain如何與其他類關聯在一起

然後,進入winmain函式

afxwinmain(hinstance, hprevinstance,lpcmdline, ncmdshow);   //這函式在winmain.cpp檔案中

在這個框架函式中完成:設計視窗類,註冊視窗類,顯示視窗,更新視窗,訊息迴圈。

下面流程是由於單文件工程造成

全域性物件-建構函式-winmain-initialinstance(完成初始化的工作,完成視窗類的註冊,完成視窗的產生,完成視窗的顯示和更新)-進入訊息迴圈----給作業系統---傳送訊息給視窗過程,並不是全部發給預設的視窗過程進行處理,做了而是採用了訊息對映機制,訊息響應函式來執行

----採用了訊息對映機制來響應函式

這個初始化函式,完成了所有的建立,並且使用以下**對所用建立的視窗進行連線,每個視窗都是乙個類,也稱為視窗類,視窗類是乙個封裝了視窗控制代碼hwnd的類,它與視窗間的關聯的關鍵紐帶是視窗控制代碼,只有視窗類中的視窗控制代碼被銷毀時,視窗才算銷毀。

// 將用作文件、框架視窗和檢視之間的連線

csingledoctemplate* pdoctemplate; // 單文件模板指標

pdoctemplate = new csingledoctemplate(

idr_mainframe,

runtime_class(cmainframe), // 主 sdi 框架視窗

下面給出-initialinstance的** ,從mfc程式中直接複製出來,

afxenablecontrolcontainer();

enabletaskbarinteraction(false);

// 使用 richedit 控制項需要 afxinitrichedit2()

// afxinitrichedit2();

// 標準初始化

// 如果未使用這些功能並希望減小

// 最終可執行檔案的大小,則應移除下列

// 不需要的特定初始化例程

// 更改用於儲存設定的登錄檔項

// todo: 應適當修改該字串,

// 例如修改為公司或組織名

setregistrykey(_t("應用程式嚮導生成的本地應用程式"));

loadstdprofilesettings(4); // 載入標準 ini 檔案選項(包括 mru)

initcontextmenumanager();

initkeyboardmanager();

inittooltipmanager();

cmfctooltipinfo ttparams;

ttparams.m_bvislmanagertheme = true;

runtime_class(cmfctooltipctrl), &ttparams);

// 註冊應用程式的文件模板。文件模板

// 將用作文件、框架視窗和檢視之間的連線

csingledoctemplate* pdoctemplate;

pdoctemplate = new csingledoctemplate(

idr_mainframe,

runtime_class(cmainframe), // 主 sdi 框架視窗

if (!pdoctemplate)

return false;

adddoctemplate(pdoctemplate);

// 分析標準 shell 命令、dde、開啟檔案操作的命令列

ccommandlineinfo cmdinfo;

parsecommandline(cmdinfo);

// 排程在命令列中指定的命令。如果

// 用 /regserver、/register、/unregserver 或 /unregister 啟動應用程式,則返回 false。

if (!processshellcommand(cmdinfo))

return false;

// 唯一的乙個視窗已初始化,因此顯示它並對其進行更新

m_pmainwnd->showwindow(sw_show);

m_pmainwnd->updatewindow();

// 僅當具有字尾時才呼叫 dragacceptfiles

// 在 sdi 應用程式中,這應在 processshellcommand 之後發生

return true;

}而訊息響應函式在背封裝在

具體執行**被封裝在

afxwinmain(hinstance, hprevinstance,lpcmdline, ncmdshow);   //這函式在winmain.cpp檔案中

在這個框架函式中完成:設計視窗類,註冊視窗類,顯示視窗,更新視窗,訊息迴圈。具體**如下所示

/

// standard winmain implementation

// can be replaced as long as 'afxwininit' is called first

int afxapi afxwinmain(hinstance hinstance, hinstance hprevinstance,

_in_ lptstr lpcmdline, int ncmdshow)

nreturncode = pthread->exitinstance();

goto initfailure;

} nreturncode = pthread->run();

initfailure:

#ifdef _debug

// check for missing afxlocktempmap calls

if (afxgetmodulethreadstate()->m_ntempmaplock != 0)

afxlocktempmaps();

afxunlocktempmaps(-1);

#endif

afxwinterm();

return nreturncode;

}

為視窗新增控制項:使用訊息

所做的程式在windows下都是基於訊息的,不管是基於win32api函式來設計程式還是基於mfc, 在為視窗建立控制項是就要響應wm_oncreate訊息。

WINDOWS程式設計 複習(2)

可選mm anisotropic 任意 x y 可選可選 上面這個圖我是從這個部落格轉過來的。至於有什麼區別了,我覺得說不清楚,直接給上測試 吧 include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain h...

Windows程式設計筆記2

1.關於hdc hdc hdc hdc getdc hwnd for int i 0 i 20 i releasedc hwnd,hdc getdc 與releasedc 一起使用。不能用於beginpain hdc beginpaint hwnd,ps textout hdc,0,0,paintd...

Windows核心程式設計 MFC下INI檔案操作

ini 檔案是initialization file的縮寫,即初始化檔案,是windows的系統配置檔案所採用的儲存格式,統管windows的各項配置,一般使用者就用windows提供的各項圖形化管理介面就可實現相同的配置了。但在某些情況,還是要直接編輯ini才方便。通過ini檔案操作,在我們關閉軟...