從今天開始看《mfc程式開發參考大全》這本書啦,所以會寫一下上面的好玩的**~
先是第一章,這次的**就是體現了 在mfc之前,開發人員是怎樣寫windows應用程式的。
先上**好了:
#include"windows.h"
#include/*視窗函式
//系統通過視窗函式處理系統中的各種訊息
//視窗函式原型為:
//typedef lresult(callback* wndfun)(hwnd, uint, wparam, lparam);
//第乙個引數表示視窗控制代碼,第二個引數表示訊息標識,第
三、第四個引數表示訊息的附加資訊
//視窗函式是處理訊息的場所,因此在視窗函式內部會存在乙個大的switch語句,針對不同的訊息進行相應的處理*/
lresult callback wndfun(hwnd hwnd, uint msg, wparam wparam, lparam lparam)
case wm_close:
case wm_destroy:
default:
return defwindowproc(hwnd, msg, wparam, lparam);
} return 0;
}//程式的進入點
//dos程式的入口點函式為main函式,windows應用程式的入口點函式為winmain
int winapi winmain(hinstance hinstance, hinstance hprevinstance, lpstr ipcmdline, int ncmdshow)
return msg.wparam;
}
上面的**完整的體現了windows視窗的產生過程:
1.首先是windows應用程式的入口函式winmain函式,其語法如下:
int winapi winmain(hinstance hinstance, hinstance hprevinstance, lpstr ipcmdline, int ncmdshow);
2.然後是視窗的誕生,分為四步:設計視窗類、註冊視窗類、建立視窗和顯示視窗。
設計視窗類:視窗資料結構定義如下:
typedef struct _wndclass wndclass;
其中要著重說明的是第二個引數lpfnwndproc,它是乙個函式指標,表示視窗函式。在**的最上面有它的乙個具體實現的例子和詳細的說明。
註冊視窗類:定義了乙個視窗類後,並不能直接使用它來建立窗體,必須要向作業系統註冊視窗類,其語法如下:
atom registerclass(const wndclass* lpwndclass);
lpwndclass表示需要註冊的視窗類指標。
建立視窗:在定義並註冊視窗類之後,就可以呼叫createwindow函式建立視窗了,其語法如下:
hwnd createwindow(
lpctstr lpclassname,//視窗類名
lpctstr lpwindowname,//視窗名
dword dwstyle,//視窗風格
int x,
int y,//視窗初始化時左上角的座標
int nwidth,//視窗的寬度
int nheight,//視窗的高度
hwnd hwndparent,//被建立視窗的父視窗
hmenu hmenu,//視窗的選單控制代碼
handle hlnstance,//視窗所在的應用程式例項控制代碼
lpvoid lpparam/*乙個createstruct結構指標。在執行createwindow函式時,會向視窗函式傳送wm_create訊息,同時,lpparam引數作為wm_create訊息的lparam引數被傳遞。*/
);
顯示視窗:視窗在成功建立後,要呼叫showwindow函式來顯示視窗,其函式語法如下:
bool showwindow(hwnd hwnd,int ncmdshow);
第乙個引數表示要顯示的視窗控制代碼,第二個引數表示視窗顯示的狀態,通常為sw_show。
在首次顯示視窗時,還需要呼叫updatewindow函式重新整理視窗,其函式語法如下:
bool updatewindow(hwnd hwnd);
第乙個引數表示需要繪製的視窗控制代碼。
3.接著是訊息處理
windows應用程式是基於訊息的程式設計模式。其處理過程為:使用者對視窗進行操作-作業系統首先發現該事件並將事件封裝成乙個訊息,傳送到訊息佇列中-應用程式從訊息佇列中取出訊息,並將其回傳給作業系統-作業系統呼叫「視窗函式」對訊息進行處理。
訊息迴圈就是由此構成的:擁有訊息佇列的執行緒,需要不斷地從訊息佇列中取出訊息,進行處理。在處理訊息的過程中,可能會有新的 訊息放入訊息佇列,由此反覆便構成了訊息迴圈。
最後是寫**過程中發現的幾個小知識:
1.關於char*轉lpcwstr,這個實實在在困擾我了許久,後來用_t()解決了,不過更加詳細的解決方案在下面這個鏈結中,還沒有試過,不過看起來挺棒的,先收著。
2._t()不得不說是乙個很好的工具。講真到現在也不是那麼清楚它到底是啥,不過就是很好用,各種轉換用它都很自如。
然後就是關於各種巨集的標頭檔案的出處:有趣~
3.裡約奧運會馬上開始了,簡直抑制不住激動的心情,首先希望各位運動員能平安回國(最近關於裡約奧運會的吐槽太多了
MFC程式的誕生與死亡
mfc程式的誕生與死亡 注 摘抄自候捷的 深入淺出mfc 第二版。程式的誕生 2.afxwinmain執行afxwininit,後者又呼叫afxinitthread,把訊息佇列盡量加大到96。6.cmyframewnd構造函式呼叫create,產生視窗種類,自行為我們註冊乙個名為 afxframeo...
MFC視窗程式基礎
完成乙個簡單的mfc程式,並分析 中物件類的關係以及程式執行流程 用cl.exe,linker.exe等編譯簡單的windows api程式和mfc程式 總結程式的執行流程主要是先進行一些初始化過程,再註冊並建立視窗,接下來顯示視窗再更新視窗,最後進入訊息迴圈,視窗過程函式來處理所有的訊息。首先要新...
深入淺出MFC 視窗類的註冊與視窗的誕生
對於乙個windows程式的開始,需要做一些準備工作,目的是為了進行一些基礎的初始化和產生應用程式的工作舞台 視窗,當然這個過程已經沒有什麼難度,api函式createwindow 已經封裝好了這一切,不過在此之前還需要預先進行視窗結構的定義和視窗函式的定義,註冊該視窗 程式在產生視窗之前必要通過利...