win32視窗程式開發步驟詳解

2021-06-15 06:20:21 字數 3745 閱讀 4507

1.

程式進入點

windows

程式的進入點是winmain函式,它有四個引數,形式如下:

int winapi winmain ( hinstance     hinst,

hinstance       hprevinst,

lpstr           lpcmdline,

int             ncmdshow )

引數說明:

hinst

為當前例項控制代碼,windows 環境下用於區別同一應用程式的不同例項;hprevinst表示應用程式先前例項的控制代碼(如果有的話),否則為 null,可以用來確定當前例項是否為應用程式的第乙個例項;

lpcmdline

是以null結尾的命令列字串長指標;ncmdshow指定視窗初始顯示方式的整型常量(1 = 通常;7 = 最小化) 。

2.

註冊視窗類

乙個視窗在建立以前,必須進行一些初始化,比如視窗的大小、標題及邊框的顏色等,完成這些工作我們還必須乙個api函式registerclass來註冊視窗類:

函式功能:該函式註冊在隨後呼叫createwindow函式和createwindowex函式中使用的視窗類。 registerclass函式己經由函式registerclas***函式來代替,但是,如果不需要設定類的小目標則仍然可以使用registerclass函式

函式原型:aton registerclass

(const wndclass *lpwndclass);

引數:

lpwndclass:指向乙個wndclass結構的指標。在將它傳遞給函式之前,必須在該結構中填充適當的類屬性。

返回值:如果函式成功,返回值是唯一標識已註冊的類的乙個原子;如果函式失敗,返回值為0

。若想獲得更多錯誤資訊,請呼叫getlasterror函式。

下面是wndclass

的乙個結構說明:

結構wndclass

包含乙個視窗類的全部資訊,也是windows程式設計中使用的基本資料結構之一,應用程式通過定義乙個視窗類確定視窗的屬性,定義如下:

typedef struct _wndclass wndclass, *lpwndclass;

例子:

wndclass wndclass;

//初始化視窗的屬性

…………….

//註冊視窗類

if(!registerclass(&wndclass))

3

.建立視窗

視窗屬性設定好並且註冊了視窗類之後,我們就要建立乙個視窗了,createwindow函式會完成這個工作,如:

hwnd=createwindow(

lpszclassname,

lpsztitle,

cw_usedefault,

cw_usedefault,

cw_usedefault,

cw_usedefault,

null,

null,

hinstance,

null);

建立好視窗之後就要顯示視窗了,如下:

//顯示視窗

showwindow(hwnd,ncmdshow);

updatewindow(hwnd);

然後進步訊息迴圈,程式出於一直等待的狀態(除非你退出程式)。

//訊息迴圈

while(getmessage(&msg,null,0,0))

4

.視窗函式

這是視窗的生命中樞,因為它是處理各種訊息的地方。上面訊息迴圈中dispatchmessage就是將訊息分派到視窗處理函式。

所謂的視窗函式。視窗函式形如:

lresult callback wndproc( hwnd hwnd,

uint message,

wparam wparam,

lparam lparam)

return ( 0 ); }

注意視窗函式中訊息的分支結構中default分支必須是return defwindowproc ( hwnd, message, wparam, lparam );因為不論什麼訊息都必須被處理,defwindowproc是windows內部預設的訊息處理函式。以上就是windows程式的精要所在!

5.舉例說明

#include

//包含應用程式中資料型別和資料結構的定義

long callback wndproc(hwnd,uint,wparam,lparam);

//視窗說明

//winmain函式是所有windows應用程式的入口,類似c語言中的main函式其功能是完成//一系列的定義和初始化,並產生訊息迴圈

/* winmain函式實現以下功能:註冊視窗類,建立視窗及執行其他必要的初始化工作;進入訊息迴圈,根據從應用程式訊息佇列接受的訊息,呼叫相應的處理過程;當訊息迴圈檢

測到wm_quit訊息時終止程式執行

winmain函式有三個基本部分組成:函式說明、初始化和訊息迴圈*/

//函式說明

int winapi winmain(

hinstance hinstance, // handle to current instance

hinstance hprevinstance, // handle to previous instance

lpstr lpcmdline, // command line

int ncmdshow // show state )

//初始化

//初始化包括視窗類的定義、註冊、建立視窗例項和顯示視窗四部分

///建立視窗建立乙個視窗的例項由函式createwindow()實現

hwnd=createwindow( lpszclassname, //視窗類名

lpsztitle, //視窗標題名

cw_usedefault,

cw_usedefault, //視窗左上角座標值為預設值

cw_usedefault, cw_usedefault, //視窗的高和寬為預設值

null, //此視窗無父視窗

null, //此視窗無子選單

hinstance, //建立此視窗的應用程式的當前控制代碼

null //不使用該值

); /顯示視窗

showwindow(hwnd,ncmdshow);

//繪製使用者區

updatewindow(hwnd);

/訊息迴圈

while(getmessage(&msg,null,0,0))

return msg.wparam; //訊息迴圈結束即程式結束時將資訊返回系統 }

/視窗函式

//視窗函式定義了應用程式對接收到的不同訊息的響應,其中包含了應用程式對各種可能接受到的訊息的

//處理過程,時訊息處理分支控制語句的集合

long callback wndproc(

hwnd hwnd,

uint message,

wparam wparam,

lparam lparam )

return (0); }

學習win32程式步驟

不可跨越 1.c語言 2.c c是c,c 是c 很多同志學過其他語言,雖然有物件導向概念,但還是需要好好看看,c 語言還是複雜的,特別是其指標的使用,才使得其效率的保證.上面是第一階段。了解語言後就得練習,更進一步的了解語言,如看effective c 等,或者自己手動寫些 來練習,熟能生巧嘛.3....

建立Win32視窗程式

建立win32視窗程式的步驟 建立win32視窗程式 int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int nshowcmd 構造視窗 winmain wndclas wndclass w...

Win32應用程式啟動步驟詳解

關於win32應用程式的啟動,我們給出乙個有可執行檔案 動態鏈結庫的例項來分析。作業系統建立程序,分配私有程序空間,理論上32作業系統每個程序有4g的記憶體空間,其中低2g為系統所用,高2g為程序所用。作業系統的載入器把可執行檔案的資料段和 段對映到程序的虛擬記憶體空間,需要注意的是並不是把所有的 ...