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為程序所用。作業系統的載入器把可執行檔案的資料段和 段對映到程序的虛擬記憶體空間,需要注意的是並不是把所有的 ...