windows圖像界面

瞭解窗口

每個GUI應用程序至少創建一個窗口,稱爲主窗口,它作爲用戶與應用程序間的主要界面來提供服務。應用程序的主窗口包括標題欄、

菜單來、windows系統菜單、最小和最大化按鈕、關閉按鈕、可改變大小的邊框、垂直和水平滾動條。應用程序必須提供一個稱爲窗口

函數回調函數來處理窗口的輸入,向客戶區顯示輸出。

win32工程程序的入口函數:

int APIENTER WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

hInstance:指定了當前模塊的實例句柄,在win32下,模塊的實例句柄和模塊句柄是一樣的。

hPrevInstance:現在已近不用了,只是保留而已。

lpCmdLine:命令行參數。其值由CreateProcess函數的第二個參數指定。

nCmdShow:指定了窗口初始化的顯示方式。這個值也是由CreateProcess函數傳遞的。

windows的消息驅動

應用程序如何知道用戶在窗口上的動作呢? 是由操作系統告訴程序的,windows不斷嚮應用程序發送消息,通知發生了什麼事情。當

windows向程序發送消息時,它調用程序中的一個函數,這個函數稱爲窗口函數或消息處理函數,它是一個自定義的回調函數。原型如

下: LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

窗口句柄HWND唯一標識了一個窗口

hWnd:標識了消息到達的窗口

uMsg:一個被命名的常量(消息ID號),它指定了所發的消息,當窗口函數接收到消息時,它使用消息ID號來決定如何處理這個消息。

wParam和lParam:是消息的兩個參數,其值取決於uMsg。

一個典型的消息處理:

MSG msg;
	while(::GetMessage(&msg, NULL, 0, 0))
	{
		//轉化消息
		::TranslateMessage(&msg);
		//將消息發送到相應的窗口
		::DispatchMessage(&msg);
	}

TranslateMessage是爲了將鍵盤消息轉化。DispatchMessage經過UESR模塊的協助,才把消息交到窗口函數手中,當窗口函數執行

完後,返回到DispatchMessage處繼續執行。

GetMessage函數從消息隊列中取出消息,如果取得的消息不是WM_QUIT,則返回非零值,一個WM_QUIT消息會促使GetMessage函

數返回0,從而結束循環。

PostQuitMessage(0):向程序的消息隊列中插入一個WM_QUIT消息,促使WinMain函數離開消息循環。

SendMessage():該函數發送的消息並不進入消息隊列等待GetMessage函數取出,而是直接傳給窗口函數MainWnnProc,並等待

MainWndProc函數返回時再返回

PostMessage():向指定窗口投遞消息,與SendMessage函數不同的是PostMessage函數發送消息後馬上返回,並不等待消息的運行

結果。

GDI基本圖形

圖形設備接口(Graphics Device Interface, GDI) 使應用程序能夠在視頻顯示器和打印機上使用圖形和格式化的文本。

設備環境(Device Context) 是windows內部使用的數據結構,它定義了GDI函數在顯式設備特定區域的工作方式。

設備環境句柄(HDC)

hDC = ::GetDC(hWnd):取得窗口客戶區的設備環境句柄

::ReleaseDC(hWnd, hDC):釋放

windows的顏色和像素點:

DC上的圖形和文本都是由像素點組成的。一般用24位表示一個像素。Win32編程中同一同32位的整數來表示深度爲24位的顏色,只使

用低24位,0~7:紅色, 8~15:綠色, 16~23:藍色

 

 

 

發佈了37 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章