編譯環境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檔案操作,在我們關閉軟...