MFC程式開發 視窗的誕生

2021-07-16 04:17:00 字數 2739 閱讀 2970

從今天開始看《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 已經封裝好了這一切,不過在此之前還需要預先進行視窗結構的定義和視窗函式的定義,註冊該視窗 程式在產生視窗之前必要通過利...